书生浦语-第五课作业

本文介绍了如何在配置环境中使用LMDeploy进行模型量化,重点关注了KV8和W4A16量化策略,以及它们在LLM模型尤其是访存密集场景中的应用。作者还演示了如何使用Gradio作为前端启动网页客户端与量化后的模型进行交互对话。
摘要由CSDN通过智能技术生成

配置环境

studio-conda -t lmdeploy -o pytorch-2.1.2
在这里插入图片描述
打开VSCode。
在这里插入图片描述
在左边栏空白区域单击鼠标右键,点击Open in Intergrated Terminal。
在这里插入图片描述终端中输入touch /root/pipeline_transformer.py,新建pipeline_transformer.py
在这里插入图片描述
按Ctrl+S键保存(Mac用户按Command+S)
返回terminal ,运行程序
在这里插入图片描述
使用LMDeploy与模型进行对话的通用命令格式为:
lmdeploy chat [HF格式模型路径/TurboMind格式模型路径]
运行1_8b模型,lmdeploy chat /root/internlm2-chat-1_8b
中间会有一些参数值的输出
在这里插入图片描述
输入你想问的问题
在这里插入图片描述
LMDeploy 模型量化
量化方式主要包括 KV8量化和W4A16量化。总的来说,量化是一种以参数或计算中间结果精度下降换空间节省(以及同时带来的性能提升)的策略。

正式介绍 LMDeploy 量化方案前,需要先介绍两个概念:

计算密集(compute-bound): 指推理过程中,绝大部分时间消耗在数值计算上;针对计算密集型场景,可以通过使用更快的硬件计算单元来提升计算速。
访存密集(memory-bound): 指推理过程中,绝大部分时间消耗在数据读取上;针对访存密集型场景,一般通过减少访存次数、提高计算访存比或降低访存量来优化。
常见的 LLM 模型由于 Decoder Only 架构的特性,实际推理时大多数的时间都消耗在了逐 Token 生成阶段(Decoding 阶段),是典型的访存密集型场景。

那么,如何优化 LLM 模型推理中的访存密集问题呢? 我们可以使用KV8量化和W4A16量化。KV8量化是指将逐 Token(Decoding)生成过程中的上下文 K 和 V 中间结果进行 INT8 量化(计算时再反量化),以降低生成过程中的显存占用。W4A16 量化,将 FP16 的模型权重量化为 INT4,Kernel 计算时,访存量直接降为 FP16 模型的 1/4,大幅降低了访存成本。Weight Only 是指仅量化权重,数值计算依然采用 FP16(需要将 INT4 权重反量化)。
实操:
设置KV Cache最大占用比例为0.4,开启W4A16量化
lmdeploy chat /root/internlm2-chat-1_8b --cache-max-entry-count 0.4
在这里插入图片描述
结果并不是很理想,出现了大象,但是也出现了猴子,松鼠等动物,但是显存的占用已经降低了。

使用W4A16量化

LMDeploy使用AWQ算法,实现模型4bit权重量化。推理引擎TurboMind提供了非常高效的4bit推理cuda kernel,性能是FP16的2.4倍以上。它支持以下NVIDIA显卡:

图灵架构(sm75):20系列、T4
安培架构(sm80,sm86):30系列、A10、A16、A30、A100
Ada Lovelace架构(sm90):40 系列
运行前,首先安装一个依赖库。

pip install einops==0.7.0
仅需执行一条命令,就可以完成模型量化工作。

lmdeploy lite auto_awq
/root/internlm2-chat-1_8b
–calib-dataset ‘ptb’
–calib-samples 128
–calib-seqlen 1024
–w-bits 4
–w-group-size 128
–work-dir /root/internlm2-chat-1_8b-4bit
其中 w-bits 4代表W4,因为模型本身就是fp16,所以这个量化也被成为W4A16
量化时间有点长(大概几分钟),这是中间过程
在这里插入图片描述
再次执行kv-cache=0.4,查看对应的缓存占用以及模型效果
lmdeploy chat /root/internlm2-chat-1_8b-4bit --model-format awq --cache-max-entry-count 0.4
可以看到缓存已经降了下来,并且任务完成的也不算太差
在这里插入图片描述
这一步由于Server在远程服务器上,所以本地需要做一下ssh转发才能直接访问。在你本地打开一个cmd窗口,输入命令如下:

ssh -CNg -L 23333:127.0.0.1:23333 root@ssh.intern-ai.org.cn -p <你的ssh端口号>
在这里插入图片描述
在这里插入图片描述
然后打开浏览器,访问http://127.0.0.1:23333
在这里插入图片描述
我们可以看到终端里新开了一个API服务器。
现在要新建一个命令行客户端去连接API服务器。首先通过VS Code新建一个终端,在终端里激活环境并运行命令行客户端:

lmdeploy serve api_client http://localhost:23333:
在这里插入图片描述

2 使用Gradio作为前端,启动网页客户端。
lmdeploy serve gradio http://localhost:23333
–server-name 0.0.0.0
–server-port 6006
同样的方式,新建cmd窗口,输入ssh -CNg -L 6006:127.0.0.1:6006 root@ssh.intern-ai.org.cn -p <你的ssh端口号>,
与模型进行交互对话。
在这里插入图片描述

  • 24
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值