ewin-reg's picture
Apply weight edit (patch on official f16 GGUF), add results
346511f verified
Raw History Blame Contribute Delete
1.48 kB
"""Apply a sparse weight patch (edited down_proj columns) to an f16 GGUF.
The patch is a .npz with, for each edited layer L, `L{L}_cols` (column indices of the MLP down projection) and
`L{L}_vals` (the new column values, shape [hidden, n_cols]). The patched file is a copy; the input is never modified.
"""
import re
import shutil
from pathlib import Path
import numpy as np
def apply_patch(gguf_in: Path, patch_npz: Path, gguf_out: Path) -> list[int]:
"""Copy gguf_in to gguf_out, write the patched columns into it, and return the patched layer numbers."""
from gguf import GGUFReader # lazy: only the patch step needs it
shutil.copyfile(gguf_in, gguf_out)
patch = np.load(patch_npz)
layers = sorted({int(m.group(1)) for k in patch.files if (m := re.fullmatch(r"L(\d+)_cols", k))})
reader = GGUFReader(str(gguf_out), "r+")
by_name = {t.name: t for t in reader.tensors}
for layer in layers:
tensor = by_name[f"blk.{layer}.ffn_down.weight"]
cols, vals = patch[f"L{layer}_cols"], patch[f"L{layer}_vals"]
data = tensor.data # row-major [hidden, intermediate], f16
if data.dtype != np.float16 or data.shape[0] != vals.shape[0] or cols.max() >= data.shape[1]:
raise ValueError(f"layer {layer}: tensor {data.dtype}{data.shape} does not fit the patch {vals.shape}")
data[:, cols] = vals.astype(np.float16)
if hasattr(reader.data, "flush"):
reader.data.flush()
return layers