import struct import torch import numpy as np class HGSFormat: MAGIC = b'HGS1' @staticmethod def quantize_tensor(tensor: torch.Tensor, bits=8): tensor_cpu = tensor.detach().cpu() min_val = tensor_cpu.min() max_val = tensor_cpu.max() scale = (max_val - min_val) / (2**bits - 1) if scale == 0: scale = 1e-8 q_tensor = ((tensor_cpu - min_val) / scale).round().clamp(0, 2**bits - 1).to(torch.uint8) return q_tensor.numpy(), float(min_val), float(scale) @staticmethod def dequantize_tensor(q_data, min_val, scale): return torch.tensor(q_data, dtype=torch.float32) * scale + min_val @staticmethod def save_hgs(model_state_dict, filepath): layers = list(model_state_dict.items()) with open(filepath, 'wb') as f: f.write(HGSFormat.MAGIC) f.write(struct.pack('