Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion gguf-py/gguf/gguf_writer.py
Original file line number Diff line number Diff line change
Expand Up @@ -467,10 +467,15 @@ def write_tensors_to_file(self, *, progress: bool = False) -> None:
shard_bar.reset(total=(total if total > 0 else None))

# 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.nbytes == ti.nbytes
start = fout.tell()
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:
shard_bar.update(ti.nbytes)
if bar is not None:
Expand Down
4 changes: 4 additions & 0 deletions gguf-py/gguf/lazy.py
Original file line number Diff line number Diff line change
Expand Up @@ -251,6 +251,10 @@ def nbytes(self) -> int:
def numpy(self) -> LazyChunkedTensor:
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:
from .constants import GGMLQuantizationType
from .quants import QuantError, quant_shape_to_byte_shape
Expand Down
Loading