准备环境与模型
- 环境配置
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 install -U lmdeploy[all]
- 模型准备:使用开发机软链接
mkdir -p ~/model
cd ~/model
ln -s /root/share/new_models/meta-llama/Meta-Llama-3-8B-Instruct ~/model/Meta-Llama-3-8B-Instruct
使用LMDeploy Chat CLI 工具
conda activate lmdeploy
lmdeploy chat /root/model/Meta-Llama-3-8B-Instruct
LMDeploy模型量化(lite)
1. 设置最大KV Cache缓存大小(30%A100)
模型在运行时,占用的显存可大致分为三部分:模型参数本身占用的显存、KV Cache占用的显存,以及中间运算结果占用的显存。LMDeploy的KV Cache管理器可以通过设置--cache-max-entry-count参数,控制KV缓存占用剩余显存的最大比例。默认的比例为0.8。
- 不加该参数(默认0.8),运行 Llama3-8b 模型
lmdeploy chat /root/model/Meta-Llama-3-8B-Instruct/
- 设为0.5
lmdeploy chat /root/model/Meta-Llama-3-8B-Instruct/ --cache-max-entry-count 0.5
- 参数设置为0.01,约等于禁止KV Cache占用显存
2. 使用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
- 使用Chat功能运行W4A16量化后的模型。
lmdeploy chat /root/model/Meta-Llama-3-8B-Instruct_4bit --model-format awq
- 将KV Cache比例再次调为0.01,查看显存占用情况。
LMDeploy服务(serve)
之前都是在本地直接推理大模型,这种方式成为本地部署。在生产环境下,我们有时会将大模型封装为 API 接口服务,供客户端访问。
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
2. 使用命令行客户端连接API服务器
lmdeploy serve api_client http://localhost:23333
- 运行后,可以通过命令行窗口直接与模型对话
3. 网页客户端连接API服务器
Gradio作为前端,启动网页客户端。
pip install gradio==3.50.2
lmdeploy serve gradio http://localhost:23333 \
--server-name 0.0.0.0 \
--server-port 6006
打开浏览器,访问地址http://127.0.0.1:6006 与模型进行对话
推理速度
使用 LMDeploy 在 A100(80G)推理 Llama3,每秒请求处理数(RPS)高达 25,是 vLLM 推理效率的 1.8+ 倍。
但是本文使用的是30%的A100(重在参与😕)
- 克隆仓库,下载数据
cd ~
git clone https://github.com/InternLM/lmdeploy.git
cd /root/lmdeploy
wget https://hf-mirror.com/datasets/anon8231489123/ShareGPT_Vicuna_unfiltered/resolve/main/ShareGPT_V3_unfiltered_cleaned_split.json
- 执行 benchmark 命令(显存较小,本文调低
--cache-max-entry-count至0.5
)
python benchmark/profile_throughput.py \
ShareGPT_V3_unfiltered_cleaned_split.json \
/root/model/Meta-Llama-3-8B-Instruct \
--cache-max-entry-count 0.8 \
--concurrency 256 \
--model-format hf \
--quant-policy 0 \
--num-prompts 10000
使用LMDeploy运行视觉多模态大模型Llava-Llama-3
安装依赖
pip install git+https://github.com/haotian-liu/LLaVA.git
运行模型
运行touch /root/pipeline_llava.py
新建一个文件,复制以下代码保存
from lmdeploy import pipeline, ChatTemplateConfig
from lmdeploy.vl import load_image
pipe = pipeline('xtuner/llava-llama-3-8b-v1_1-hf',
chat_template_config=ChatTemplateConfig(model_name='llama3'))
image = load_image('https://raw.githubusercontent.com/open-mmlab/mmdeploy/main/tests/data/tiger.jpeg')
response = pipe(('describe this image', image))
print(response.text)
使用python命令运行该文件