@@ -32,7 +32,6 @@ class WriterState(Enum):
32
32
33
33
class GGUFWriter :
34
34
fout : BufferedWriter
35
- temp_file : tempfile .SpooledTemporaryFile [bytes ] | None
36
35
tensors : list [np .ndarray [Any , Any ]]
37
36
_simple_value_packing = {
38
37
GGUFValueType .UINT8 : "B" ,
@@ -48,10 +47,7 @@ class GGUFWriter:
48
47
GGUFValueType .BOOL : "?" ,
49
48
}
50
49
51
- def __init__ (
52
- self , path : os .PathLike [str ] | str , arch : str , use_temp_file : bool = True ,
53
- endianess : GGUFEndian = GGUFEndian .LITTLE ,
54
- ):
50
+ def __init__ (self , path : os .PathLike [str ] | str , arch : str , endianess : GGUFEndian = GGUFEndian .LITTLE ):
55
51
self .fout = open (path , "wb" )
56
52
self .arch = arch
57
53
self .endianess = endianess
@@ -61,8 +57,6 @@ def __init__(
61
57
self .kv_data_count = 0
62
58
self .ti_data = bytearray ()
63
59
self .ti_data_count = 0
64
- self .use_temp_file = use_temp_file
65
- self .temp_file = None
66
60
self .tensors = []
67
61
print ("gguf: This GGUF file is for {0} Endian only" .format (
68
62
"Big" if self .endianess == GGUFEndian .BIG else "Little" ,
@@ -220,20 +214,11 @@ def add_tensor(
220
214
) -> None :
221
215
if self .endianess == GGUFEndian .BIG :
222
216
tensor .byteswap (inplace = True )
223
- if self .use_temp_file and self .temp_file is None :
224
- fp = tempfile .SpooledTemporaryFile (mode = "w+b" , max_size = 256 * 1024 * 1024 )
225
- fp .seek (0 )
226
- self .temp_file = fp
227
217
228
218
shape : Sequence [int ] = raw_shape if raw_shape is not None else tensor .shape
229
219
self .add_tensor_info (name , shape , tensor .dtype , tensor .nbytes , raw_dtype = raw_dtype )
230
220
231
- if self .temp_file is None :
232
- self .tensors .append (tensor )
233
- return
234
-
235
- tensor .tofile (self .temp_file )
236
- self .write_padding (self .temp_file , tensor .nbytes )
221
+ self .tensors .append (tensor )
237
222
238
223
def write_padding (self , fp : IO [bytes ], n : int , align : int | None = None ) -> None :
239
224
pad = GGUFWriter .ggml_pad (n , align if align is not None else self .data_alignment ) - n
@@ -255,21 +240,13 @@ def write_tensors_to_file(self) -> None:
255
240
256
241
self .write_padding (self .fout , self .fout .tell ())
257
242
258
- if self .temp_file is None :
259
- while True :
260
- try :
261
- tensor = self .tensors .pop (0 )
262
- except IndexError :
263
- break
264
- tensor .tofile (self .fout )
265
- self .write_padding (self .fout , tensor .nbytes )
266
- return
267
-
268
- self .temp_file .seek (0 )
269
-
270
- shutil .copyfileobj (self .temp_file , self .fout )
271
- self .flush ()
272
- self .temp_file .close ()
243
+ while True :
244
+ try :
245
+ tensor = self .tensors .pop (0 )
246
+ except IndexError :
247
+ break
248
+ tensor .tofile (self .fout )
249
+ self .write_padding (self .fout , tensor .nbytes )
273
250
274
251
def flush (self ) -> None :
275
252
self .fout .flush ()
0 commit comments