5-LMDeploy量化部署 LLM 实践
本实践采用lmdeploy进行大模型部署,并与transformer库部署大模型进行比较,同时对模型部署时进行了KV cache占用的调整,比较显存的占用。
模型部署与优化
模型部署
模型微调后,需要面临着部署的过程,模型的部署就是将训练好的深度学习模型在特定环境中运行的过程。
大模型部署面临着如下几个挑战:
- 计算量巨大
- 显存开销大
- 数据交换量大
大模型部署的方法
针对以上大模型部署的问题,有一些方法,包括了:
- 模型剪枝
- 知识蒸馏
- 量化
LMDeploy简介
LMDeploy实践
同样,在https://studio.intern-ai.org.cn/console/instance上做实验,使用50%的A100来实验。
环境安装
# 创建虚拟环境
studio-conda -t lmdeploy -o pytorch-2.1.2
# 激活环境
conda activate lmdeploy
# 安装lmdeploy
pip install lmdeploy[all]==0.3.0
创建虚拟环境
激活并安装lmdeploy
准备模型
这里直接使用本次实验共享的模型,采用软链接方式
cd ~
mkdir 5demo
cd 5demo/
ln -s /root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b /root/5demo
使用transformer库运行模型
# 创建下空文件
touch /root/5demo/pipeline_transformer.py
直接将如下代码贴到上面创建的py文件中。
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("/root/5demo/internlm2-chat-1_8b", trust_remote_code=True)
# Set `torch_dtype=torch.float16` to load model in float16, otherwise it will be loaded as float32 and cause OOM Error.
model = AutoModelForCausalLM.from_pretrained("/root/5demo/internlm2-chat-1_8b", torch_dtype=torch.float16, trust_remote_code=True).cuda()
model = model.eval()
inp = "hello"
print("[INPUT]", inp)
response, history = model.chat(tokenizer, inp, history=[])
print("[OUTPUT]", response)
inp = "please provide three suggestions about time management"
print("[INPUT]", inp)
response, history = model.chat(tokenizer, inp, history=history)
print("[OUTPUT]", response)
使用Transformer库运行模型
python pipeline_transformer.py
使用lmdeploy运行模型
lmdeploy chat /root/5demo/internlm2-chat-1_8b
对话:
使用lmdeploy来部署同一个模型,明显比使用transformer库要快很多。
设置KV CACHE大小
lmdeploy chat /root/5demo/internlm2-chat-1_8b --cache-max-entry-count 0.4
显存在设置KV缓存大小后,占用大小明显差异:
—