diff --git a/convert_hf_to_gguf.py b/convert_hf_to_gguf.py index 7cad1f0ccf..9ac5ba4e2f 100755 --- a/convert_hf_to_gguf.py +++ b/convert_hf_to_gguf.py @@ -206,7 +206,7 @@ class ModelBase: if is_safetensors: data: gguf.utility.LocalTensor = model_part[name] if self.lazy: - data_gen = lambda data=data: LazyTorchTensor.from_safetensors_meta(data) # noqa: E731 + data_gen = lambda data=data: LazyTorchTensor.from_local_tensor(data) # noqa: E731 else: dtype = LazyTorchTensor._dtype_str_map[data.dtype] data_gen = lambda data=data: torch.from_numpy(data.mmap_bytes()).view(dtype).reshape(data.shape) # noqa: E731 @@ -8860,7 +8860,7 @@ class LazyTorchTensor(gguf.LazyBase): return cast(torch.Tensor, lazy) @classmethod - def from_safetensors_meta(cls, t: gguf.utility.LocalTensor) -> Tensor: + def from_local_tensor(cls, t: gguf.utility.LocalTensor) -> Tensor: def load_tensor(tensor: gguf.utility.LocalTensor) -> Tensor: dtype = cls._dtype_str_map[tensor.dtype] return torch.from_numpy(tensor.mmap_bytes()).view(dtype).reshape(tensor.shape) diff --git a/gguf-py/gguf/utility.py b/gguf-py/gguf/utility.py index 88f055746a..c9401a1c0a 100644 --- a/gguf-py/gguf/utility.py +++ b/gguf-py/gguf/utility.py @@ -179,6 +179,10 @@ class SafetensorRemote: except KeyError as e: raise ValueError(f"Missing key in metadata for tensor '{name}': {e}, meta = {meta}") + # order by name (same as default safetensors behavior) + # ref: https://github.com/huggingface/safetensors/blob/0816a1ae1d6b731cefd67f061d80d1cadd0dd7bb/bindings/python/src/lib.rs#L606 + res = dict(sorted(res.items(), key=lambda t: t[0])) + return res @classmethod @@ -332,8 +336,9 @@ class SafetensorsLocal: ), ) - # order by offset - self.tensors = dict(sorted(tensors.items(), key=lambda t: t[1].data_range.offset)) + # order by name (same as default safetensors behavior) + # ref: https://github.com/huggingface/safetensors/blob/0816a1ae1d6b731cefd67f061d80d1cadd0dd7bb/bindings/python/src/lib.rs#L606 + self.tensors = dict(sorted(tensors.items(), key=lambda t: t[0])) def __enter__(self, *args, **kwargs): del args, kwargs # unused