samai-8b-M8 / artifacts /r13_scripts /patch_imx_adapter.py
tchbcb's picture
r13: imatrix in_sum2 diag adapter patch for chain/refine
5ac6fe3 verified
Raw History Blame Contribute Delete
2.53 kB
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""patch_imx_adapter.py — 远端 r13_chain/r13_refine 的 imatrix 新格式适配补丁
新 llama.cpp imatrix = <name>.weight.in_sum2 (1-D f32 列激活能量) + .counts
S3/S5 原代码只认 (in,in) 全矩阵 → 全部落 identity, imatrix 加权失效。
补丁: 查找链加 .in_sum2 候选 + 1-D→torch.diag 对角矩阵 (数学上等价 GPTQ 对角 Hessian)。
锚点断言 count==1 + compile 语法验证, 双保险。
"""
A_OLD = ''' hk = base if base in imx else (base + ".weight" if base + ".weight" in imx else None)
if hk is not None:
hn = np.ascontiguousarray(imx[hk].data).astype(np.float32)
H = None
if hn.shape == (shape[1], shape[1]):
H = torch.from_numpy(hn).to(dev)'''
A_NEW = ''' hk = None
for cd in (base, base + ".weight", base + ".weight.in_sum2", base + ".in_sum2"):
if cd in imx:
hk = cd
break
if hk is not None:
hn = np.ascontiguousarray(imx[hk].data).astype(np.float32)
H = None
if hn.ndim == 1 and hn.shape[0] == shape[1]:
H = torch.diag(torch.from_numpy(hn).to(dev) + 1e-8)
elif hn.shape == (shape[1], shape[1]):
H = torch.from_numpy(hn).to(dev)'''
B_OLD = ''' hn = np.ascontiguousarray(imx_t.data).astype(np.float32)
if hn.shape != (in_dim, in_dim):
return None'''
B_NEW = ''' hn = np.ascontiguousarray(imx_t.data).astype(np.float32)
if hn.ndim == 1 and hn.shape[0] == in_dim:
hn = np.diag(hn + 1e-8)
if hn.shape != (in_dim, in_dim):
return None'''
C_OLD = ''' hk = base if base in imx else (base + ".weight" if base + ".weight" in imx else None)'''
C_NEW = ''' hk = None
for cd in (base, base + ".weight", base + ".weight.in_sum2", base + ".in_sum2"):
if cd in imx:
hk = cd
break'''
def main():
for path, olds, news in (
("/tmp/k8b/r13_chain.py", [A_OLD], [A_NEW]),
("/tmp/k8b/r13_refine.py", [B_OLD, C_OLD], [B_NEW, C_NEW]),
):
src = open(path).read()
for o, n in zip(olds, news):
cnt = src.count(o)
assert cnt == 1, "anchor not unique in %s: count=%d" % (path, cnt)
src = src.replace(o, n, 1)
compile(src, path, "exec")
open(path, "w").write(src)
print("PATCHED", path)
print("PATCH_OK imx in_sum2 diag adapter")
main()