Skip to content

Commit

Permalink
gguf-py: enable reading non-native endian files (ggml-org#12081)
Browse files Browse the repository at this point in the history
Currently self.byte_order is never used.
Actually use it to byteswap read data to
allow reading big endian files on little endian systems
and vice versa.

Now it's possible to convert little-endian model
into a big-endian model and back
on a little-endian system.
  • Loading branch information
AlekseiNikiforovIBM authored Feb 26, 2025
1 parent 53e4db1 commit 3567ee3
Showing 1 changed file with 5 additions and 3 deletions.
8 changes: 5 additions & 3 deletions gguf-py/gguf/gguf_reader.py
Original file line number Diff line number Diff line change
Expand Up @@ -146,9 +146,11 @@ def _get(
itemsize = int(np.empty([], dtype = dtype).itemsize)
end_offs = offset + itemsize * count
arr = self.data[offset:end_offs].view(dtype=dtype)[:count]
if override_order is None:
return arr
return arr.view(arr.dtype.newbyteorder(override_order))
if override_order is not None:
return arr.view(arr.dtype.newbyteorder(override_order))
if self.byte_order == 'S':
return arr.view(arr.dtype.newbyteorder(self.byte_order))
return arr

def _push_field(self, field: ReaderField, skip_sum: bool = False) -> int:
if field.name in self.fields:
Expand Down

0 comments on commit 3567ee3

Please sign in to comment.