import numpy as np import pandas as pd import torch from hqq.core.quantize import Quantizer as hQuant from lm_quant_toolkit.utils.hub import get_hf_model_storge_base_dir from lm_quant_toolkit.utils.safetensors import get_tensor def quant_hqq(tensor, nbits, group_size=64, lp_norm=0.7, optimize=True): opt_params = { "lp_norm": lp_norm, "iters": 100, "early_stop": False, } wq, meta = hQuant.quantize( tensor, nbits=nbits, group_size=group_size, optimize=optimize, **opt_params ) return hQuant.dequantize(wq, meta) if __name__ == "__main__": model_id = "meta-llama/Llama-2-7b-hf" base_dir = get_hf_model_storge_base_dir(model_id) layer = 31 module = "self_attn.o_proj" matrix_name = f"model.layers.{layer}.{module}.weight" w = get_tensor(matrix_name, base_dir) dick = [] for lp_norm in np.linspace(0.1, 0.9, 9): for b in [3, 4, 8]: for g in [32, 64, 128]: wq_hqq = quant_hqq(w, nbits=b, lp_norm=lp_norm, group_size=g) norm_hqq = torch.norm(w - wq_hqq) dick.append( { "model": model_id.split("/")[1], "layer": layer, "module": module, "lp_norm": lp_norm, "b": b, "g": g, "fnorm": norm_hqq.item(), } ) print(f"FNorm HQQ(lp_norm={lp_norm:.2f}): {norm_hqq}") df = pd.DataFrame(dick) df.to_csv("lp_norm_tuning.csv", index=False)