6
6
7
7
from pathlib import Path
8
8
import re
9
+ import logging
9
10
10
11
import numpy as np
11
12
import torch
17
18
def main ():
18
19
from ..utils import cli
19
20
21
+ # Set up logging
22
+ logger = logging .getLogger (__name__ )
23
+
20
24
parser = cli .create_parser ()
21
25
cli .add_input_dataset_options (parser )
22
26
parser .add_argument (
@@ -28,63 +32,79 @@ def main():
28
32
parser .add_argument (
29
33
"--save" , type = Path , help = "Save the GGUF dataset to an IRPA file"
30
34
)
35
+ parser .add_argument (
36
+ "--verbose" , "-v" , action = "store_true" , help = "Enable verbose output"
37
+ )
31
38
args = cli .parse (parser )
39
+
40
+ # Configure logging based on verbosity
41
+ if args .verbose :
42
+ logging .basicConfig (level = logging .DEBUG )
43
+ else :
44
+ logging .basicConfig (level = logging .INFO )
45
+
32
46
config = cli .get_input_dataset (args )
33
47
34
48
if args .save is not None :
35
49
36
50
def report (s ):
37
- print (f"Save: { s } " )
51
+ logger . info (f"Save: { s } " )
38
52
39
- print (f"Saving to: { args .save } " )
53
+ logger . info (f"Saving to: { args .save } " )
40
54
config .save (args .save , io_report_callback = report )
41
55
return
42
56
43
- print ( f "Properties:" )
57
+ logger . debug ( "Properties:" )
44
58
for key , value in config .properties .items ():
45
- print (f" { key } = { value } (of { type (value )} )" )
46
- print ("Tensors:" )
59
+ logger .debug (f" { key } = { value } (of { type (value )} )" )
60
+
61
+ logger .debug ("Tensors:" )
47
62
for tensor in config .root_theta .flatten ().values ():
48
63
if args .tensor_regex is not None :
49
64
if not re .search (args .tensor_regex , tensor .name ):
50
65
continue
51
- print (f" { tensor } " )
66
+
67
+ logger .debug (f" { tensor } " )
52
68
if isinstance (tensor , PrimitiveTensor ):
53
69
torch_tensor = tensor .as_torch ()
54
- print (
70
+ logger . debug (
55
71
f" : torch.Tensor({ list (torch_tensor .shape )} , "
56
72
f"dtype={ torch_tensor .dtype } ) = { tensor .as_torch ()} "
57
73
)
58
74
elif isinstance (tensor , QuantizedTensor ):
59
- print (f" : QuantizedTensor({ tensor .layout_type .__name__ } )" )
75
+ logger . debug (f" : QuantizedTensor({ tensor .layout_type .__name__ } )" )
60
76
try :
61
77
unpacked = tensor .unpack ()
62
- print (f" { unpacked } " )
78
+ logger . debug (f" { unpacked } " )
63
79
except NotImplementedError :
64
- print (f" NOT IMPLEMENTED" )
80
+ logger . warning (f" Unpacking NOT IMPLEMENTED for { tensor . name } " )
65
81
elif isinstance (tensor , ShardedTensor ):
66
82
for i , pt in enumerate (tensor .shards ):
67
- print (f" { i } : { pt } " )
83
+ logger . debug (f" { i } : { pt } " )
68
84
69
- _maybe_dump_tensor (args , tensor )
85
+ _maybe_dump_tensor (args , tensor , logger )
70
86
71
87
72
- def _maybe_dump_tensor (args , t : InferenceTensor ):
88
+ def _maybe_dump_tensor (args , t : InferenceTensor , logger : logging . Logger ):
73
89
if not args .dump_tensor_dir :
74
90
return
75
91
dir : Path = args .dump_tensor_dir
76
92
dir .mkdir (parents = True , exist_ok = True )
77
- print (f" (Dumping to { dir } )" )
78
-
79
- if isinstance (t , PrimitiveTensor ):
80
- torch_tensor = t .as_torch ()
81
- np .save (dir / f"{ t .name } .npy" , torch_tensor .detach ().numpy ())
82
- elif isinstance (t , QuantizedTensor ):
83
- layout : QuantizedLayout = t .unpack ()
84
- dq = layout .dequant ()
85
- np .save (dir / f"{ t .name } .dequant.npy" , dq .detach ().numpy ())
86
- else :
87
- raise AssertionError (f"Unexpected tensor type: { type (t )} " )
93
+ logger .info (f"Dumping tensor { t .name } to { dir } " )
94
+
95
+ try :
96
+ if isinstance (t , PrimitiveTensor ):
97
+ torch_tensor = t .as_torch ()
98
+ np .save (dir / f"{ t .name } .npy" , torch_tensor .detach ().numpy ())
99
+ elif isinstance (t , QuantizedTensor ):
100
+ layout : QuantizedLayout = t .unpack ()
101
+ dq = layout .dequant ()
102
+ np .save (dir / f"{ t .name } .dequant.npy" , dq .detach ().numpy ())
103
+ else :
104
+ logger .error (f"Unexpected tensor type: { type (t )} " )
105
+ raise AssertionError (f"Unexpected tensor type: { type (t )} " )
106
+ except Exception as e :
107
+ logger .error (f"Failed to dump tensor { t .name } : { str (e )} " )
88
108
89
109
90
110
if __name__ == "__main__" :
0 commit comments