Skip to content

Commit 49be162

Browse files
committed
gguf-py : make use_temp_file always False
1 parent 08ef054 commit 49be162

File tree

4 files changed

+12
-38
lines changed

4 files changed

+12
-38
lines changed

convert-llama-ggml-to-gguf.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -221,10 +221,7 @@ def __init__(self, ggml_model, data, cfg, params_override = None, vocab_override
221221

222222
def save(self):
223223
print('* Preparing to save GGUF file')
224-
gguf_writer = gguf.GGUFWriter(
225-
self.cfg.output,
226-
gguf.MODEL_ARCH_NAMES[gguf.MODEL_ARCH.LLAMA],
227-
use_temp_file = False)
224+
gguf_writer = gguf.GGUFWriter(self.cfg.output, gguf.MODEL_ARCH_NAMES[gguf.MODEL_ARCH.LLAMA])
228225
self.add_params(gguf_writer)
229226
self.add_vocab(gguf_writer)
230227
if self.special_vocab is not None:

examples/finetune/convert-finetune-checkpoint-to-gguf.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -473,7 +473,7 @@ def main():
473473
# we should have read all available data
474474
assert(offset == len(data))
475475

476-
gguf_writer = gguf.GGUFWriter(cfg.output, gguf.MODEL_ARCH_NAMES[gguf.MODEL_ARCH.LLAMA], use_temp_file = False)
476+
gguf_writer = gguf.GGUFWriter(cfg.output, gguf.MODEL_ARCH_NAMES[gguf.MODEL_ARCH.LLAMA])
477477
chk.save_gguf(gguf_writer)
478478
print(" gguf: write header")
479479
gguf_writer.write_header_to_file()

examples/train-text-from-scratch/convert-train-checkpoint-to-gguf.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -485,7 +485,7 @@ def main():
485485
# we should have read all available data
486486
assert(offset == len(data))
487487

488-
gguf_writer = gguf.GGUFWriter(cfg.output, gguf.MODEL_ARCH_NAMES[gguf.MODEL_ARCH.LLAMA], use_temp_file = False)
488+
gguf_writer = gguf.GGUFWriter(cfg.output, gguf.MODEL_ARCH_NAMES[gguf.MODEL_ARCH.LLAMA])
489489
chk.save_gguf(gguf_writer)
490490
print(" gguf: write header")
491491
gguf_writer.write_header_to_file()

gguf-py/gguf/gguf_writer.py

Lines changed: 9 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ class WriterState(Enum):
3232

3333
class GGUFWriter:
3434
fout: BufferedWriter
35-
temp_file: tempfile.SpooledTemporaryFile[bytes] | None
3635
tensors: list[np.ndarray[Any, Any]]
3736
_simple_value_packing = {
3837
GGUFValueType.UINT8: "B",
@@ -48,10 +47,7 @@ class GGUFWriter:
4847
GGUFValueType.BOOL: "?",
4948
}
5049

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):
5551
self.fout = open(path, "wb")
5652
self.arch = arch
5753
self.endianess = endianess
@@ -61,8 +57,6 @@ def __init__(
6157
self.kv_data_count = 0
6258
self.ti_data = bytearray()
6359
self.ti_data_count = 0
64-
self.use_temp_file = use_temp_file
65-
self.temp_file = None
6660
self.tensors = []
6761
print("gguf: This GGUF file is for {0} Endian only".format(
6862
"Big" if self.endianess == GGUFEndian.BIG else "Little",
@@ -220,20 +214,11 @@ def add_tensor(
220214
) -> None:
221215
if self.endianess == GGUFEndian.BIG:
222216
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
227217

228218
shape: Sequence[int] = raw_shape if raw_shape is not None else tensor.shape
229219
self.add_tensor_info(name, shape, tensor.dtype, tensor.nbytes, raw_dtype = raw_dtype)
230220

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)
237222

238223
def write_padding(self, fp: IO[bytes], n: int, align: int | None = None) -> None:
239224
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:
255240

256241
self.write_padding(self.fout, self.fout.tell())
257242

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)
273250

274251
def flush(self) -> None:
275252
self.fout.flush()

0 commit comments

Comments
 (0)