LMDeploy 高效部署 Llama3 实践---如何使用LMDeploy来部署Llama3
Llama3-Tutorial/docs/lmdeploy.md at main · SmartFlowAI/Llama3-Tutorial · GitHub
如,同栏目的上-1笔记一样,机智流github仓库笔记如上链接
1.环境,模型准备
1.1 环境配置
在这一节中需要配置新的环境
# 如果你是InternStudio 可以直接使用
studio-conda -t lmdeploy -o pytorch-2.1.2
# 如果不是则使用以下命令,初始化环境
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
这里可能出现报错,下载超时,若是下载太慢或超时,可以切换清华大学的镜像源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
接着安装Imdeploy最新版
pip install -U lmdeploy[all]
注意:安装Imdeploy最新版这里是是在imdeploy环境下的,下载最新版的时候别配错了,因为我是直接运行第一条代码,还没激活环境,就下了,下完了才发现下错了(哭了),使用以下代码进入环境
conda activate lmdeploy
配置完可运行以下命令列出所有可发现的conda环境
conda info --envs
1.2 Llama3 的下载
直接复制即可,
# 新建文件夹
mkdir -p ~/model
cd ~/model
# 软链接 InternStudio 中的模型,这一步骤我们在之前的学习中已经完成,因此InternStudio 中不建议执行这一步
ln -s /root/share/new_models/meta-llama/Meta-Llama-3-8B-Instruct ~/model/Meta-Llama-3-8B-Instruct
# 执行会以下错误,因此在InternStudio中直接略过这一步
ln: failed to create symbolic link '/root/model/Meta-Llama-3-8B-Instruct/Meta-Llama-3-8B-Instruct': Read-only file system
2.LMDeploy chat CLI工具
下面代码直接运行即可
conda activate lmdeploy
lmdeploy chat /root/model/Meta-Llama-3-8B-Instruct
得出结果
3.LMDeploy模型量化(lite)
主要包括 KV8量化和W4A16量化
3.1设置最大KV Cache缓存大小
LMDeploy的KV Cache管理器可以通过设置--cache-max-entry-count参数,来控制KV缓存占用剩余显存的最大比例。默认比例为0.8。在模型运行时,显存的占用主要包括模型参数本身、KV Cache以及中间运算结果所占用的显存。通过调整--cache-max-entry-count参数,可以影响KV Cache对显存的利用率。
接下来通过几个例子来说明调整--cache-max-entry-count参数的效果。首先,保持参数不变(默认为0.8),运行Llama3-8b模型。通过观察实际运行情况,了解不同参数设置对显存利用的影响。这样可以优化显存的利用,提升模型的性能和效率。
lmdeploy chat /root/model/Meta-Llama-3-8B-Instruct/
新建一个终端运行ctrl+shift+~、
# 如果你是InternStudio 就使用
studio-smi
# 如果不是请使用下面命令
nvidia-smi
得到结果
此时模型的占用为36232MiB。下面改变--cache-max-entry-count参数,设为0.5。
lmdeploy chat /root/model/Meta-Llama-3-8B-Instruct/ --cache-max-entry-count 0.5
看到显存占用明显降低,变为28680MiB。
取“极限”位置,将参数设置为0.01,相当于禁止KV Cache占用显存。
lmdeploy chat /root/model/Meta-Llama-3-8B-Instruct/ --cache-max-entry-count 0.01
可以看到,此时显存占用仅为16176M,代价是会降低模型推理速度
注意:新建了终端,查看显存占用情况需要在另一个终端中使用studio-smi查看
3.2使用W4A16量化
直接cv以下命令,就可以完成模型量化
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
运行时间较长,请耐心等待。
下面使用Chat功能运行W4A16量化后的模型。
lmdeploy chat /root/model/Meta-Llama-3-8B-Instruct_4bit --model-format awq
为了更加明显体会到W4A16的作用,我们将KV Cache比例再次调为0.01,查看显存占用情况。
lmdeploy chat /root/model/Meta-Llama-3-8B-Instruct_4bit --model-format awq --cache-max-entry-count 0.01
可以看到是明显降低的
3.3 在线量化 KV
自v0.4.0 起,LMDeploy KV 量化方式有原来的离线改为在线。并且,支持两种数值精度 int4、int8。量化方式为 per-head per-token 的非对称量化。它具备以下优势:
- 量化不需要校准数据集
- kv int8 量化精度几乎无损,kv int4 量化精度在可接受范围之内
- 推理高效,在 llama2-7b 上加入 int8/int4 kv 量化,RPS 相较于 fp16 分别提升近 30% 和 40%
- 支持 volta 架构(sm70)及以上的所有显卡型号:V100、20系列、T4、30系列、40系列、A10、A100 等等 通过 LMDeploy 应用 kv 量化非常简单,只需要设定 quant_policy 参数。LMDeploy 规定 qant_policy=4表示 kv int4 量化,quant_policy=8 表示 kv int8 量化。
4.LMDeploy服务(serve)
前面的章节,我们都是在本地直接推理大模型,称为本地部署。而通常我们会将大模型封装为 API 接口服务,供客户端访问。
4.1 启动API服务器
通过以下命令启动API服务器,推理Meta-Llama-3-8B-Instruct模型
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
其中,model-format、quant-policy这些参数是与第三章中量化推理模型一致的;server-name和server-port表示API服务器的服务IP与服务端口;tp参数表示并行数量(GPU数量)。 通过运行以上指令,我们成功启动了API服务器,请勿关闭该窗口,后面我们要新建客户端连接该服务。 你也可以直接打开http://{host}:23333查看接口的具体使用说明,如下图所示。
这一步由于Server在远程服务器上,所以本地需要做一下ssh转发才能直接访问。在你本地打开一个cmd窗口,输入命令如下:
ssh -CNg -L 23333:127.0.0.1:23333 root@ssh.intern-ai.org.cn -p 你的ssh端口号
ssh 端口号就是下面图片里的 47304,请替换为你自己的。
然后打开浏览器,访问http://127.0.0.1:23333。
4.2 命令行客户端连接API服务器
上述目的是在终端中开了一个API服务器。而现在我们要新建一个命令行客户端去连接API服务器。
首先通过VS Code新建一个终端: 激活conda环境,运行命令行客户端
conda activate lmdeploy
lmdeploy serve api_client http://localhost:23333
运行后,可以通过命令行窗口直接与模型对话
4.3 网页客户端连接API服务器
关闭刚刚的VSCode终端,但服务器端的终端不要关闭。 运行之前确保自己的gradio版本低于4.0.0。
pip install gradio==3.50.2
新建一个VSCode终端,激活conda环境。
conda activate lmdeploy
使用Gradio作为前端,启动网页客户端。
lmdeploy serve gradio http://localhost:23333 \
--server-name 0.0.0.0 \
--server-port 6006
打开浏览器,访问地址http://127.0.0.1:6006 然后就可以与模型进行对话了!
恭喜你,又完成了本节课的学习!!!