LMDeploy 高效部署 Llama3 实践

本文参考Llama3-Tutorial(Llama 3 超级课堂),感谢机智流提供的教程,感谢书生*浦语社区提供的免费算力!

介绍

官方介绍

LMDeploy是一个用于压缩、部署和服务LLM的工具包,由MMRazor和MMDeploy团队开发。具有高效推理、有效量化和轻松分发的特性。

性能对比

开始部署

准备环境

InternStudio 平台已经提供了环境,但是为了更好的学习效果,建议大家手敲一遍,加深印象
conda create -n lmdeploy python=3.10
conda activate lmdeploy
conda install pytorch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 pytorch-cuda=12.1 -c pytorch -c nvidia

安装lmdeploy

pip install -U lmdeploy[all]

下载Llama3

因为磁盘空间有限,超出数据会丢失,我们就直接引用已经下载的模型就可以了。首先要创建~/model目录,避免开发机停止后被删除

mkdir -p ~/model
cd ~/model
# 引用已经存在的模型
ln -s /root/share/new_models/meta-llama/Meta-Llama-3-8B-Instruct ~/model/Meta-Llama-3-8B-Instruct

使用Ldeploy运行Llama3

# 切换到指定环境
conda activate lmdeploy 
# 运行llama3
lmdeploy chat /root/model/Meta-Llama-3-8B-Instruct

运行结果如图所示:

资源消耗

LMDeploy模型量化(lite)

设置最大KV Cache缓存大小

模型在运行时,占用的显存大致分为三部分:

  1. 模型参数本身占用的显存
  2. KV Cache占用的显存
  3. 中间运算结果占用的显存

LMDeploy的KV Cache管理器可以通过设置 --cache-max-entry-count参数,控制值KV缓存占用剩余显存的最大比例。默认0.8。调小此参数的代价是会降低模型推理速度。

在InternStudio中执行

studio-smi

查看显存占用

可以看到,默认情况下模型占用了23120M的显存,为了方便比较,我们改成0.01,重新使用下面的命令运行

lmdeploy chat /root/model/Meta-Llama-3-8B-Instruct/ --cache-max-entry-count 0.01

再次查看显存占用,可以看到显存明显降低!

使用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

执行过程:

运行时间比较长。量化结束后,新的HF模型保存到Meta-Llama-3-8b-Instruct_4bit目录。运行量化后的模型:

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

再次查看显存占用

将KV Cache调整为0.01后运行

lmdeploy chat /root/model/Meta-Llama-3-8B-Instruct_4bit --model-format awq --cache-max-entry-count 0.01

显存占用只有6546M。

数据对比:

在线量化

自v0.4.0开始,LMDeploy KV量化改为在线,并且支持int4、int8两种数值精读,量化方式为per-head per-token的非对称量化。它具备以下优势:

  1. 量化不需要校准数据集
  2. kv int8量化精度几乎无损,kv int4量化,RPS相较于fp16分别提升30%和40%
  3. 支持volta架构(sm70)及以上的所有显卡:V100、20系列、T4、30系列、40系列、A10、A100等通过LMDeploy应用kv量化非常简单,只需要设定quant_policy参数。LMdeploy规定,quant_policy=4表示kv int4量化,quant_policy=8表示kv int8 量化。

LMDeploy服务(API Server)

部署API Server

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

其中,server-name和server-port表示api服务的服务于端口号,tp表示并行数量(GPU数量)。

参考VScode 远程连接开发机,将端口2333映射出来,访问效果如下:

命令行连接API Server

新建一个中端,运行以下命令

# 切换环境
conda activate lmdeploy
# 连接ApiServer
lmdeploy serve api_client http://localhost:23333

效果如图:

WebUI连接API Server

退出刚才的命令行client,确保gradio的版本低于4.0.0

pip install gradio==3.50.2

使用Gradio作为前端,启动网页客户端:

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

运行效果如图:

最后

LLM的门槛当下还是很高,个人玩家很难入门,在这里再次感谢大佬们的无私奉献!另外书生浦语举办的大模型实战营第二期开班了,免费学、免费提供算力!欢迎大佬萌新加入交流!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值