convert: prevent ndarray conversion in LazyChunkedTensor (#27869)
This commit is contained in:
@@ -467,10 +467,15 @@ class GGUFWriter:
|
|||||||
shard_bar.reset(total=(total if total > 0 else None))
|
shard_bar.reset(total=(total if total > 0 else None))
|
||||||
|
|
||||||
# relying on the fact that Python dicts preserve insertion order (since 3.7)
|
# relying on the fact that Python dicts preserve insertion order (since 3.7)
|
||||||
for ti in tensors.values():
|
for name, ti in tensors.items():
|
||||||
assert ti.tensor is not None # can only iterate once over the tensors
|
assert ti.tensor is not None # can only iterate once over the tensors
|
||||||
assert ti.tensor.nbytes == ti.nbytes
|
assert ti.tensor.nbytes == ti.nbytes
|
||||||
|
start = fout.tell()
|
||||||
ti.tensor.tofile(fout)
|
ti.tensor.tofile(fout)
|
||||||
|
# a short write here would only surface as a corrupt file at load time
|
||||||
|
if fout.tell() - start != ti.nbytes:
|
||||||
|
raise ValueError(
|
||||||
|
f"tensor {name!r} wrote {fout.tell() - start} bytes, expected {ti.nbytes}")
|
||||||
if shard_bar is not None:
|
if shard_bar is not None:
|
||||||
shard_bar.update(ti.nbytes)
|
shard_bar.update(ti.nbytes)
|
||||||
if bar is not None:
|
if bar is not None:
|
||||||
|
|||||||
@@ -251,6 +251,10 @@ class LazyChunkedTensor:
|
|||||||
def numpy(self) -> LazyChunkedTensor:
|
def numpy(self) -> LazyChunkedTensor:
|
||||||
return self
|
return self
|
||||||
|
|
||||||
|
def __array__(self, *args, **kwargs):
|
||||||
|
# numpy would otherwise make a 1-element object array of self, and write 8 bytes
|
||||||
|
raise TypeError("LazyChunkedTensor cannot become an ndarray, it is written in chunks")
|
||||||
|
|
||||||
def quantize(self, qtype: Any) -> LazyChunkedTensor:
|
def quantize(self, qtype: Any) -> LazyChunkedTensor:
|
||||||
from .constants import GGMLQuantizationType
|
from .constants import GGMLQuantizationType
|
||||||
from .quants import QuantError, quant_shape_to_byte_shape
|
from .quants import QuantError, quant_shape_to_byte_shape
|
||||||
|
|||||||
Reference in New Issue
Block a user