欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > LMDeploy 量化部署实践

LMDeploy 量化部署实践

2025/5/9 14:12:14 来源:https://blog.csdn.net/weixin_42112760/article/details/141337178  浏览:    关键词:LMDeploy 量化部署实践

一、环境配置见:https://github.com/InternLM/Tutorial/blob/camp3/docs/L2/LMDeploy/readme.md
验证LMDeploy启动InternLM2_5-7b-chat

conda activate lmdeploy
lmdeploy chat /root/models/internlm2_5-7b-chat

二、量化显存计算
参数计算:
在这里插入图片描述在这里插入图片描述
LMDeploy 提供了权重量化和 k/v cache两种策略。

k/v cache

InternLM2.5正常运行时占用显存23G:
1、在 BF16 精度下,7B模型权重占用14GB:70×10^9 parameters×2 Bytes/parameter=14GB
2、kv cache占用8GB:剩余显存24-14=10GB,kv cache默认占用80%,即10*0.8=8GB
3、其他项1GB

是故23GB=权重占用14GB+kv cache占用8GB+其它项1GB
在这里插入图片描述
lmdeploy chat /root/models/internlm2_5-7b-chat --cache-max-entry-count 0.4 这个参数是控制kv缓存占用剩余显存的最大比例。默认的比例为0.8,设置缓存的最大条目数量为 0.4 。缓存的作用通常是为了提高数据的访问速度,减少重复计算或读取数据的时间。通过设置这个参数,可以控制缓存的大小和使用效率,以平衡性能和资源消耗。
在这里插入图片描述
修改kv cache占用之后的显存占用情况(19GB, 减少4G):
1、与减少KV chache之前一样,在 BF16 精度下,7B模型权重占用14GB
2、kv cache占用4GB:剩余显存24-14=10GB,kv cache修改为占用40%,即100.4=4GB
3、其他项1GB
是故19GB=权重占用14GB+kv cache占用4GB+其它项1GB
而此刻减少的4GB显存占用就是从10GB
0.8-10GB*0.4=4GB

在线量化

由于都使用BF16精度下的internlm2.5 7B模型,故剩余显存均为10GB,且 cache-max-entry-count 均为0.4,这意味着LMDeploy将分配40%的剩余显存用于kv cache,即10GB*0.4=4GB。但quant-policy 设置为4时,意味着使用int4精度进行量化。因此,LMDeploy将会使用int4精度提前开辟4GB的kv cache。

相比使用BF16精度的kv cache,int4的Cache可以在相同4GB的显存下只需要4位来存储一个数值,而BF16需要16位。这意味着int4的Cache可以存储的元素数量是BF16的四倍。
int4 的cache采用auto_awq方法进行量化:

lmdeploy lite auto_awq \/root/models/internlm2_5-7b-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-7b-chat-w4a16-4bit

W4:这通常表示权重量化为4位整数(int4)。这意味着模型中的权重参数将从它们原始的浮点表示(例如FP32、BF16或FP16,Internlm2.5精度为BF16)转换为4位的整数表示。这样做可以显著减少模型的大小。
A16:这表示激活(或输入/输出)仍然保持在16位浮点数(例如FP16或BF16)。激活是在神经网络中传播的数据,通常在每层运算之后产生。
因此,W4A16的量化配置意味着:

权重被量化为4位整数。
激活保持为16位浮点数。

命令解释:

lmdeploy lite auto_awq: lite这是LMDeploy的命令,用于启动量化过程,而auto_awq代表自动权重量化(auto-weight-quantization)。
/root/models/internlm2_5-7b-chat: 模型文件的路径。
–calib-dataset ‘ptb’: 这个参数指定了一个校准数据集,这里使用的是’ptb’(Penn Treebank,一个常用的语言模型数据集)。
–calib-samples 128: 这指定了用于校准的样本数量—128个样本
–calib-seqlen 2048: 这指定了校准过程中使用的序列长度—2048
–w-bits 4: 这表示权重(weights)的位数将被量化为4位。
–work-dir /root/models/internlm2_5-7b-chat-w4a16-4bit: 这是工作目录的路径,用于存储量化后的模型和中间结果。

基础任务
使用结合W4A16量化与kv cache量化的internlm2_5-7b-chat模型封装本地API并与大模型进行一次对话:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

使用Function call功能让大模型完成一次简单的"加"与"乘"函数调用,作业截图需包括大模型回复的工具调用情况:
在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词