|
27 | 27 |
|
28 | 28 | # For more information about what field.parts and field.data represent,
|
29 | 29 | # please see the comments in the modify_gguf.py example.
|
30 |
| -def gguf_hash(reader: GGUFReader, filename: str, disable_progress_bar) -> None: |
| 30 | +def gguf_hash(reader: GGUFReader, filename: str, disable_progress_bar: bool, no_layer:bool) -> None: |
31 | 31 | sha1 = hashlib.sha1()
|
| 32 | + sha256 = hashlib.sha256() |
32 | 33 | uuidv5_sha1 = hashlib.sha1()
|
33 | 34 | uuidv5_sha1.update(UUID_NAMESPACE_LLAMA_CPP.bytes)
|
34 | 35 |
|
@@ -62,29 +63,39 @@ def gguf_hash(reader: GGUFReader, filename: str, disable_progress_bar) -> None:
|
62 | 63 | sum_weights_in_tensor *= dim
|
63 | 64 | bar.update(sum_weights_in_tensor)
|
64 | 65 |
|
65 |
| - sha1_layer = hashlib.sha1() |
66 |
| - sha1_layer.update(tensor.data.data) |
| 66 | + if not no_layer: |
| 67 | + sha1_layer = hashlib.sha1() |
| 68 | + sha1_layer.update(tensor.data.data) |
| 69 | + print("sha1 {0} {1}:{2}".format(sha1_layer.hexdigest(), filename, tensor.name)) # noqa: NP100 |
| 70 | + |
| 71 | + if not no_layer: |
| 72 | + sha256_layer = hashlib.sha256() |
| 73 | + sha256_layer.update(tensor.data.data) |
| 74 | + print("sha256 {0} {1}:{2}".format(sha256_layer.hexdigest(), filename, tensor.name)) # noqa: NP100 |
| 75 | + |
67 | 76 | sha1.update(tensor.data.data)
|
| 77 | + sha256.update(tensor.data.data) |
68 | 78 | uuidv5_sha1.update(tensor.data.data)
|
69 |
| - print("sha1 {0} {1}:{2}".format(sha1_layer.hexdigest(), filename, tensor.name)) # noqa: NP100 |
70 | 79 |
|
71 | 80 | # Flush Hash Progress Bar
|
72 | 81 | bar.close()
|
73 | 82 |
|
74 | 83 | # Display Hash Output
|
75 |
| - print("sha1 {0} {1}".format(sha1.hexdigest(), filename)) # noqa: NP100 |
76 |
| - print("UUIDv5 {0} {1}".format(uuid.UUID(bytes=uuidv5_sha1.digest()[:16], version=5), filename)) # noqa: NP100 |
| 84 | + print("sha1 {0} {1}".format(sha1.hexdigest(), filename)) # noqa: NP100 |
| 85 | + print("sha256 {0} {1}".format(sha256.hexdigest(), filename)) # noqa: NP100 |
| 86 | + print("UUIDv5 {0} {1}".format(uuid.UUID(bytes=uuidv5_sha1.digest()[:16], version=5), filename)) # noqa: NP100 |
77 | 87 |
|
78 | 88 |
|
79 | 89 | def main() -> None:
|
80 | 90 | parser = argparse.ArgumentParser(description="Dump GGUF file metadata")
|
81 | 91 | parser.add_argument("model", type=str, help="GGUF format model filename")
|
| 92 | + parser.add_argument("--no-layer", action="store_true", help="exclude per layer hash") |
82 | 93 | parser.add_argument("--verbose", action="store_true", help="increase output verbosity")
|
83 | 94 | parser.add_argument("--progressbar", action="store_true", help="enable progressbar")
|
84 | 95 | args = parser.parse_args(None if len(sys.argv) > 1 else ["--help"])
|
85 | 96 | logging.basicConfig(level=logging.DEBUG if args.verbose else logging.INFO)
|
86 | 97 | reader = GGUFReader(args.model, 'r')
|
87 |
| - gguf_hash(reader, args.model, not args.progressbar) |
| 98 | + gguf_hash(reader, args.model, not args.progressbar, args.no_layer) |
88 | 99 |
|
89 | 100 |
|
90 | 101 | if __name__ == '__main__':
|
|
0 commit comments