summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn <78893154+cmp-nct@users.noreply.github.com>2024-02-13 18:56:38 +0100
committerGitHub <noreply@github.com>2024-02-13 19:56:38 +0200
commit6c00a066928b0475b865a2e3e709e2166e02d548 (patch)
treead01b040d0e1295998c5420086dd21c186cdedf6
parentea9c8e11436ad50719987fa23a289c74b7b40d40 (diff)
gguf : add python reader example (#5216)
* Update CMakeLists.txt * Create reader.py * Update reader.py * Update reader.py another whitespace :| * Update reader.py * lintlintlint
-rw-r--r--examples/CMakeLists.txt1
-rw-r--r--gguf-py/examples/reader.py45
2 files changed, 46 insertions, 0 deletions
diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
index 68ad8996..653abc73 100644
--- a/examples/CMakeLists.txt
+++ b/examples/CMakeLists.txt
@@ -38,6 +38,7 @@ else()
add_subdirectory(speculative)
add_subdirectory(lookahead)
add_subdirectory(lookup)
+ add_subdirectory(gguf)
add_subdirectory(train-text-from-scratch)
add_subdirectory(imatrix)
if (LLAMA_BUILD_SERVER)
diff --git a/gguf-py/examples/reader.py b/gguf-py/examples/reader.py
new file mode 100644
index 00000000..62e0769d
--- /dev/null
+++ b/gguf-py/examples/reader.py
@@ -0,0 +1,45 @@
+#!/usr/bin/env python3
+import sys
+from pathlib import Path
+from gguf.gguf_reader import GGUFReader
+
+
+sys.path.insert(0, str(Path(__file__).parent.parent))
+
+
+def read_gguf_file(gguf_file_path):
+ """
+ Reads and prints key-value pairs and tensor information from a GGUF file in an improved format.
+
+ Parameters:
+ - gguf_file_path: Path to the GGUF file.
+ """
+
+ reader = GGUFReader(gguf_file_path)
+
+ # List all key-value pairs in a columnized format
+ print("Key-Value Pairs:")
+ max_key_length = max(len(key) for key in reader.fields.keys())
+ for key, field in reader.fields.items():
+ value = field.parts[field.data[0]]
+ print(f"{key:{max_key_length}} : {value}")
+ print("----")
+
+ # List all tensors
+ print("Tensors:")
+ tensor_info_format = "{:<30} | Shape: {:<15} | Size: {:<12} | Quantization: {}"
+ print(tensor_info_format.format("Tensor Name", "Shape", "Size", "Quantization"))
+ print("-" * 80)
+ for tensor in reader.tensors:
+ shape_str = "x".join(map(str, tensor.shape))
+ size_str = str(tensor.n_elements)
+ quantization_str = tensor.tensor_type.name
+ print(tensor_info_format.format(tensor.name, shape_str, size_str, quantization_str))
+
+
+if __name__ == '__main__':
+ if len(sys.argv) < 2:
+ print("Usage: reader.py <path_to_gguf_file>")
+ sys.exit(1)
+ gguf_file_path = sys.argv[1]
+ read_gguf_file(gguf_file_path)