lightllm icon indicating copy to clipboard operation
lightllm copied to clipboard

希望支持静态量化模型(AWQ/GPTQ,配合llmc)的加载与推理

Open poisonwine opened this issue 7 months ago • 4 comments

Hi LightLLM 团队, 感谢你们提供高效、轻量的推理框架。希望未来可以支持以下feature

  • 支持HuggingFace 上常见的 AWQ/GPTQ 静态量化模型推理(例如qwen系列的awq模型)。
  • 支持你们团队 LLMC 量化模型的原生加载和推理

这两个特性对于部署是非常节省时间和友好的,再次感谢你们的工作。

poisonwine avatar May 14 '25 09:05 poisonwine

@poisonwine 一直都想完善这个特性,分布式推理框架的稳定性需要花很多时间,后续会逐步重构权重加载部分。不过一般情况下,你可以用llmc导出量化后恢复成bf16的权重,然后走lightllm的在线权重量化,虽然加载速度可能慢些,但是精度是一样有保证的。

hiworldwzj avatar May 15 '25 09:05 hiworldwzj

@hiworldwzj 理解理解,推理框架完善确实是很耗时。

不过我看了一下,框架内似乎还是留了一些支持静态量化加载的接口,比如quantizationMethod 预留了weight scale suffix/act_scale_suffix,quantcfg中也有 self.quantized_weight = True。

逻辑看起来是根据quantize config决定是否是静态量化权重,然后加载权重时根据是否是静态量化权重,走 QuantizationMethod(比如vllmw8a8)的quantize(weight)方法或者直接加载,推理时使用的是QuantizationMethod的apply方法,根据权重shape选择动态激活或者静态激活,然后由vllm kernel计算,是这么理解吧。如果是这样,好像自己稍微改改也是比较方便的。

( if len(weights) == 3:
    qweight, weight_scale, input_scale = weights
elif len(weights) == 2:
    qweight, weight_scale = weights)
x_q, x_scale, x_zp = ops.scaled_int8_quant(input_tensor, scale=input_scale, azp=None, symmetric=True)

poisonwine avatar May 16 '25 06:05 poisonwine

@poisonwine 是这样的,不过这部分代码目前感觉写得可读性上还是差了点味道,后续还会继续重构。

hiworldwzj avatar May 19 '25 02:05 hiworldwzj

@hiworldwzj 可以可以,期待下一次更新。

poisonwine avatar May 19 '25 03:05 poisonwine