目录
第五课
——LMDepoly的量化和部署
课程文档:https://github.com/InternLM/Tutorial/blob/camp2/lmdeploy/README.md
课程作业:https://github.com/InternLM/Tutorial/blob/camp2/lmdeploy/homework.md
项目:https://github.com/InternLM/LMDeploy
1 课程
时间花费在数据交换上面
部署方法
模型存储时是32位,通过量化能够降低访存,提升了效率。
LMDepoly
2 实践
安装、部署、量化、
2.1 环境
- 创建开发
- cuda12.2
0.3.0的deploy
- 10% GPU
- 新建虚拟环境,激活。
- 安装deploy==0.3.0
2.2 模型对话——chat
-
模型托管社区:huggingface、MindScope、OpenXlab。HF格式
-
TurboMind引擎,只支持TurboMind格式的模型。
-
下载模型(软链接模型,创建模型映射)
-
transformer库(HF)运行模型。
- 创建新文件——pipeline_transformer.py。(测试Huggingface模型的速度)
-
LMDepoly的命令格式:
lmdepoly chat [HF格式的模型路径/TurboMind格式的模型路径]
lmdepoly chat /root/internlm2-chat-1_8b
-
查看命令:
lmdepoly chat -h
2.3 模型量化——lite
KV Cache通过存储键值对的形式来复用计算结果,以达到提高性能和降低内存的目的。
占用的显存可分为三个部分:
- 模型参数本身占用的显存
- KV Cache占用的显存
- 中间运算结果占用的显存
设计思路:用的时候放入显存,不用的时候放入内存。
先设置固定大小空间,默认0.8。控制KV缓存占剩余显存的最大比例,设置越小,显存的占用越小。
极限压缩:–cache-max-entry-count 0.01
W4A16量化
使用AWQ算法,实现4bit权重量化。
-
安装依赖:
einops==0.7.0
-
执行命令
lite:量化功能
调用awq算法
- 对比测试。
以上是本地部署
2.4 LMDeploy服务器
将大模型封装成api的服务,供客户端访问
架构图如下:
- 模型推理服务。提供模型本身的推理。
- 中间协议层。把后端的推理/服务通过http,gRPC或其他形式的接口供前端使用。
- Client。前端,与用户交互
启动服务:
-
命令:
lmdepoly serve api_serve \ /root/internlm2-chat-1_8b \ --model-format hf \ # 量化推理 --quant-policy 0 \ # 量化推理 --server-name 0.0.0.0 \ --server-port 23333 \ --tp 1 # 并行数量——GPU数量 #
-
命令行客户端连接API服务器
-
新建终端-激活环境
-
lmdepoly serve api_client http://localhost:23333
区别:有了一个中介服务器——api服务
-
-
网页客户端(gradio)
lmdepoly server gradio http:localhost:23333 \ # 访问后端的接口 --server-name 0.0.0.0 \ --sever-port 6006
-
本地端口转发
ssh -CNg -L 6006:127.0.0.0.1:6006 root@ip -p
本地的6006端口转发到开发机的6006端口
2.5 集成LMDeploy
将大模型推理代码集成到python代码里面
(1)pipeline 批处理
-
激活环境
-
新建文件pipeline.py
-
代码:
from lmdepoly import pipiline # 示例 # 批处理 print()
-
运行:
python /root/pipeline.py
(2)pipeline的KV设置:
(3)多模态
30% 的开发机
-
LLaVA的依赖库
-
新建文件。pipeline_llava.py
python
gradio大模型:
补充:
# Launch inference server
python3 -m lmdeploy.serve.openai.api_server ./workspace server_ip server_port --instance_num 32 --tp 1
# restful_api_url is what printed in api_server.py, e.g. http://localhost:23333
python -m lmdeploy.serve.openai.api_client restful_api_url
# restful_api_url is what printed in api_server.py, e.g. http://localhost:23333
# server_ip and server_port here are for gradio ui
# example: python -m lmdeploy.serve.gradio.app http://localhost:23333 localhost 6006 --restful_api True
python -m lmdeploy.serve.gradio.app restful_api_url server_ip --restful_api True
3 作业
- 配置 LMDeploy 运行环境
- 以命令行方式与 InternLM2-Chat-1.8B 模型对话
- 置KV Cache最大占用比例为0.4,开启W4A16量化,以命令行方式与模型对话。(优秀学员必做)
- 以API Server方式启动 lmdeploy,开启 W4A16量化,调整KV Cache的占用比例为0.4,分别使用命令行客户端与Gradio网页客户端与模型对话。(优秀学员必做)
- 使用W4A16量化,调整KV Cache的占用比例为0.4,使用Python代码集成的方式运行internlm2-chat-1.8b模型。(优秀学员必做)
- 使用 LMDeploy 运行视觉多模态大模型 llava gradio demo。(优秀学员必做)(显存资源不够)
3.1 配置环境
-
创建开发
-
cuda12.2
0.3.0的deploy
-
10% GPU
-
新建虚拟环境,激活。
studio-conda -t lmdeploy -o pytorch-2.1.2
-
安装deploy==0.3.0
conda activate lmdeploy
pip install lmdeploy[all]==0.3.0
3.1 命令行方式对话
软链接模型:ln -s /root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b /root/
conda activate lmdeploy
lmdepoly chat /root/internlm2-chat-1_8b
3.3 配置置KV Cache,开启W4A16量化,以命令行方式对话
KV Cache最大占用比例为0.4。压缩:–cache-max-entry-count
量化
pip install einops==0.7.0
- 模型量化指令:
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
lmdeploy chat /root/internlm2-chat-1_8b-4bit --model-format awq --cache-max-entry-count 0.4
3.4 API Server+量化+KV—命令行+gradio
以API Server方式启动 lmdeploy,开启 W4A16量化,调整KV Cache的占用比例为0.4,分别使用命令行客户端与Gradio网页客户端与模型对话。
-
启动API服务器
lmdeploy serve api_server \ /root/internlm2-chat-1_8b \ --model-format hf \ --quant-policy 0 \ --server-name 0.0.0.0 \ --server-port 23333 \ --tp 1 lmdeploy serve api_server \ /root/internlm2-chat-1_8b-4bit \ --model-format awq \ --cache-max-entry-count 0.4 \ --quant-policy 0 \ --server-name 0.0.0.0 \ --server-port 23333 \ --tp 1
-
命令行
conda activate lmdeploy lmdeploy serve api_client http://localhost:23333
徽京实锤了233333
-
gradio
lmdeploy serve gradio http://localhost:23333 \ --server-name 0.0.0.0 \ --server-port 6006
ssh:ssh -CNg -L 6006:127.0.0.1:6006 root@ssh.intern-ai.org.cn -p <你的ssh端口号>
3.5 量化-KV-集成
使用W4A16量化,调整KV Cache的占用比例为0.4,使用Python代码集成的方式运行internlm2-chat-1.8b模型。
conda activate lmdeploy
touch /root/pipeline_kv.py
from lmdeploy import pipeline, TurbomindEngineConfig
# 调低 k/v cache内存占比调整为总显存的 40%
backend_config = TurbomindEngineConfig(cache_max_entry_count=0.4, model_format='awq')
pipe = pipeline('/root/internlm2-chat-1_8b-4bit',
backend_config=backend_config)
response = pipe(['Hi, pls intro yourself', '南京是安徽的省会吗?'])
print(response)
由此看来,模型会受人为引导得到错误的结果,大模型的安全问题值得考虑。
lmdeploy 可以用在win系统上部署!!!
参考资料:
课程文档:https://github.com/InternLM/Tutorial/blob/camp2/lmdeploy/README.md
课程作业:https://github.com/InternLM/Tutorial/blob/camp2/lmdeploy/homework.md
项目:https://github.com/InternLM/LMDeploy