LMDeploy 提供了使用 8 bit 整数对神经网络模型进行量化和推理的功能。
在开始推理前,需要确保已经正确安装了 lmdeploy 和 openai/triton。可以通过以下命令进行安装:
pip install lmdeploy
pip install triton>=2.1.0
如果你需要进行 8 bit 权重模型推理,可以直接从 LMDeploy 的 model zoo 下载已经量化好的 8bit 权重模型。以8bit 的 Internlm-chat-7B 模型为例,可以从 model zoo 直接下载:
git-lfs install
git clone https://huggingface.co/lmdeploy/internlm-chat-7b-w8 (coming soon)
你也可以参考"8bit 权重量化"章节的内容手动将原 16bit 权重量化为 8bit,并保存至 internlm-chat-7b-w8
目录下,操作命令如下:
lmdeploy lite smooth_quant internlm/internlm-chat-7b --work-dir ./internlm-chat-7b-w8
然后,执行以下命令,即可在终端与模型对话:
lmdeploy chat ./internlm-chat-7b-w8 --backend pytorch
Coming soon...
Coming soon...
进行 8bit 权重量化需要经历以下三步:
- 权重平滑:首先对语言模型的权重进行平滑处理,以便更好地进行量化。
- 模块替换:使用
QRSMNorm
和QLinear
模块替换原模型DecoderLayer
中的RSMNorm
模块和nn.Linear
模块。lmdeploy/pytorch/models/q_modules.py
文件中定义了这些量化模块。 - 保存量化模型:完成上述必要的替换后,我们即可保存新的量化模型。
我们在lmdeploy/lite/api/smooth_quantity.py
脚本中已经实现了以上三个步骤。例如,可以通过以下命令得到量化后的 Internlm-chat-7B 模型的模型权重:
lmdeploy lite smooth_quant internlm/internlm-chat-7b --work-dir ./internlm-chat-7b-w8
保存之后,你就可以通过调用from_pretrained接口来实例化你的量化模型。