【书生大模型实战营】进阶岛 第3关 LMDeploy 量化部署进阶实践
任务
- 使用结合W4A16量化与kv cache量化的internlm2_5-1_8b-chat模型封装本地API并与大模型进行一次对话,作业截图需包括显存占用情况与大模型回复,参考4.1 API开发(优秀学员必做),请注意2.2.3节与4.1节应使用作业版本命令。
- 使用Function call功能让大模型完成一次简单的"加"与"乘"函数调用,作业截图需包括大模型回复的工具调用情况,参考4.2 Function call(选做)
1. LMDeploy与InternLM2.5
1.1 LMDeploy API部署InternLM2.5
启动API服务器
conda activate lmdeploy
lmdeploy serve api_server \
/root/models/internlm2_5-1_8b-chat \
--model-format hf \
--quant-policy 0 \
--server-name 0.0.0.0 \
--server-port 23333 \
--tp 1
此时的显存占用情况:
以命令行形式连接API服务器
lmdeploy serve api_client http://localhost:23333
1.2 LMDeploy Lite
1.2.1 设置最大kv cache缓存大小
lmdeploy chat /root/models/internlm2_5-1_8b-chat --cache-max-entry-count 0.4
此时的显存占用情况:
1.2.2 设置在线 kv cache int4/int8 量化
lmdeploy serve api_server \
/root/demo/model/internlm2_5-1_8b-chat \
--model-format hf \
--quant-policy 4 \
--cache-max-entry-count 0.4\
--server-name 0.0.0.0 \
--server-port 23333 \
--tp 1
此时的显存占用情况:
以命令行形式连接API服务器,并进行对话:
lmdeploy serve api_client http://localhost:23333
1.2.3 W4A16 模型量化和部署
准确说,模型量化是一种优化技术,旨在减少机器学习模型的大小并提高其推理速度。量化通过将模型的权重和激活从高精度(如16位浮点数)转换为低精度(如8位整数、4位整数、甚至二值网络)来实现。
因此,W4A16的量化配置意味着:
- 权重被量化为4位整数。
- 激活保持为16位浮点数。
lmdeploy lite auto_awq \
/root/models/internlm2_5-1_8b-chat \
--calib-dataset 'ptb' \
--calib-samples 128 \
--calib-seqlen 2048 \
--w-bits 4 \
--w-group-size 128 \
--batch-size 1 \
--search-scale False \
--work-dir /root/models/internlm2_5-1_8b-chat-w4a16-4bit
等终端输出如下时,说明正在推理中,稍待片刻。
查看当前的模型文件的大小:
lmdeploy chat /root/demo/model/internlm2_5-1_8b-chat-w4a16-4bit/ --model-format awq
此时的显存占用情况:
1.2.4 W4A16 量化+ KV cache+KV cache 量化
输入以下指令,让我们同时启用量化后的模型、设定kv cache占用和kv cache int4量化。
l