【书生·浦语大模型实战营】第5节:LMDeploy量化部署实践(笔记及作业)
笔记
视频:https://www.bilibili.com/video/BV1tr421x75B/?spm_id_from=333.788&vd_source=724260feabc8c4fa14ba533aaff72464
文档:Tutorial/lmdeploy/README.md at camp2 · InternLM/Tutorial (github.com)
主要介绍了大模型的部署背景、大模型部署方法,并且简单介绍了LMDeploy
个人感觉LMDeploy和XTuner都是非常实用的工具,不过LMDeploy更偏向应用层面
大模型部署大多都是把训练好的模型部署到本地或者服务器上,但是大模型部署一般对资源要求比较高
大模型部署方法分为模型剪枝、知识蒸馏、量化
LMDeploy简介
作业
配置LMDeploy运行环境
环境要求cunda12.2和0.3.0版本的imdeploy
studio-conda -t lmdeploy -o pytorch-2.1.2
安装LMDeploy
conda activate lmdeploy
pip install lmdeploy[all]==0.3.0
以命令行方式与InternLM2-Chat-1.8B模型对话
从开发机的共享目录获取模型
构建pipeline_transformer.py文件并运行
通过以下指令实现与模型的对话
lmdeploy chat /root/internlm2-chat-1_8b
很显然internlm2-chat-1_8b不喜欢抓蟑螂吓老头
设置KV Cache最大占用比例为0.4,开启W4A16量化,以命令行方式与模型对话。
量化模型
lmdeploy lite auto_awq \
/root/internlm2-chat-1_8b \
--calib-dataset 'ptb' \
--calib-samples 128 \
--calib-seqlen 1024 \
--w-bits 4 \
--w-group-size 128 \
--work-dir /root/internlm2-chat-1_8b-4bit
运行
lmdeploy chat /root/internlm2-chat-1_8b-4bit --model-format awq --cache-max-entry-count 0.04
很显然internlm2-chat-1_8b-4bit也不太喜欢读研
显存占用
以API Server方式启动 lmdeploy,开启 W4A16量化,调整KV Cache的占用比例为0.4,分别使用命令行客户端与Gradio网页客户端与模型对话。
启动API Server
lmdeploy serve api_server \
/root/internlm2-chat-1_8b-4bit \
--model-format hf \
--quant-policy 0 \
--server-name 0.0.0.0 \
--server-port 23333 \
--tp 1 \
--cache-max-entry-count 0.4
-
命令行客户端对话
-
网页客户端对话
显然,internlm2-chat-1_8b也回答不上来是更喜欢爸爸还是更喜欢妈妈
使用W4A16量化,调整KV Cache的占用比例为0.4,使用Python代码集成的方式运行internlm2-chat-1.8b模型。
pipeline.py内容修改kv cache内存占比,并把模型改为w4a16量化后的模型
from lmdeploy import pipeline, TurbomindEngineConfig
# 调低 k/v cache内存占比调整为0.4
backend_config = TurbomindEngineConfig(cache_max_entry_count=0.4)
pipe = pipeline('internlm2-chat-1_8b-4bit',
backend_config=backend_config)
response = pipe(['Hi, pls intro yourself', '上海是','蟑螂是'])
print(response)
运行
使用 LMDeploy 运行视觉多模态大模型 llava gradio demo。
运行结果1
运行结果2