【AI大模型开发者指南】llama3命令行部署、量化、作为服务——lmdeploy实战

【AI大模型开发者指南】llama3命令行部署、量化、作为服务——lmdeploy实战

核心三要素

lmdeploy

  • 测试/演示(命令行)
  • 模型量化
  • 后端服务

环境配置不在此再赘述,相关内容可以查看往期内容
lmdeploy介绍

命令行互动(一键启动)

lmdeploy chat /root/model/Meta-Llama-3-8B-Instruct

如果遇到Engine main loop stopped报错,考虑切换启动命令

lmdeploy chat turbomind /root/model/Meta-Llama-3-8B-Instruct

lmdeploy1
命令行部署可能会因为lmdeploy版本不同导致效果不一样,如以上使用了旧版本deploy,模型推理牛头不对马嘴

以下使用最新版lmdeploy

lmdeploy2
推理正常

模型量化

通过最大kv缓存大小来控制显存占用

--cache-max-entry-count默认为0.8,设置越小,模型占用显存越小,但是非线性

设置为0.01时,模型显存占用约为初始50%,但推理速度显著降低

W4A16量化

一键启动量化

lmdeploy lite auto_awq \
   /root/model/Meta-Llama-3-8B-Instruct \
  --calib-dataset 'ptb' \
  --calib-samples 128 \
  --calib-seqlen 1024 \
  --w-bits 4 \
  --w-group-size 128 \
  --work-dir /root/model/Meta-Llama-3-8B-Instruct_4bit

quat

量化完成,启动量化后的模型

lmdeploy chat /root/model/Meta-Llama-3-8B-Instruct_4bit --model-format awq

4bit输出如下

4b

比较量化效果

原始模型

nvi-orikv0.5

nvi-ori-kv0.5
kv0.01

nvi-ori-kv0.01
在这个程度上推理速度下降并不明显,和满血状态差别不大

kv0.0001

nvi-ori-kv0.0001
kv0.0001-chat
kv太过小时,没有输出

4b量化

nvi-4b
kv0.5

nvi-4b-kv0.5
kv0.01

nvi-4b-kv0.01
此时显存仅占有约7g,推理效果依然相当可观,速度并没有明显下降

nvi-4b-kv0,01-chatkv0.0001

nvi-4b-kv0.0001
nvi-4b-kv0.0001
kv0.0001的4b同样不会说话了

量化总结
0.80.50.010.0001
origin68g/80g48g/80g16g/80g16g/80g
4bit66g/80g43g/80g7g/80g6g/80g

注意,当kv0.0001时模型均不会输出,最小可用模型为4bit+kv0.01,简单问答效果和origin+kv0.8相当

后端服务

一键启动

lmdeploy serve api_server \
    /root/model/Meta-Llama-3-8B-Instruct \
    --model-format hf \
    --quant-policy 0 \
    --server-name 0.0.0.0 \
    --server-port 23333 \
    --tp 1

转发到本地端口(本地terminal打开,输入以下)

ssh -CNg -L 23333:127.0.0.1:23333 root@ssh.intern-ai.org.cn -p {你的ssh端口号}

转发成功后,打开本地23333端口,可以看到swagger UI

转发成功
除此之外,还可以回到远程服务器

lmdeploy serve api_client http://localhost:23333

23333-cli-chat
cli chat

lmdeploy serve gradio http://localhost:23333 \
    --server-name 0.0.0.0 \
    --server-port 6006

gradio chat

当vscode跳出以下提示

自动转发
这意味着端口已经转发到本地,无需再手动转发

gradio-error
lmdeploy的gradio demo有些跟不上版本了,所以text区域的更新出错了

此外,还可能遇到如下报错

error-gradio-concurrency
这种情况需要删除原有的concurrency参数

remove-concurrencytextbox的报错

textbox-error调整源代码中的update函数为postprogress,self为txtbox即可

fix
正常的样子

  • 35
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值