internlm2-chat-1_8B模型量化部署与llava多模态模型llava-v1.6-7b部署实践。实践教程来源于:https://github.com/InternLM/Tutorial/blob/camp2/。 基础作业 1.创建conda环境,输入如下命令创建一个名为lmdeploy的环境: studio-conda -t lmdeploy -o pytorch-2.1.2 创建中创建成功
2.安装LMDeploy
激活刚才安装的环境,输入如下命令激活环境
conda activate lmdeploy
激活成功,左边括号中为lmdeploy字样表示激活成功
输入以下命令安装0.3.0版本的lmdeploy pip install lmdeploy[all]==0.3.0 lmdeploy安装成功,包含各类库与依赖库
3.LMDeploy模型对话
输入以下命令查看已经放在服务器上的预训练模型。 如果是本地部署的话,从官方仓库下载模型,开发机部署通过共享目录软链接方式安装模型。命令如下:
cd ~
ln -s /root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b /root/
ls命令查看已经链接internlm2-chat-1_8b模型目录
4.使用Transformer库运行模型
点击左上角的图标,打开VSCode,输入以下命令,新建pipeline_transformer.py
touch /root/pipeline_transformer.py
pipeline_transformer.py添加以下内容终端输入命令python /root/pipeline_transformer.py运行代码,得到以下输出
5.使用LMDeploy与模型对话
使用LMDeploy与模型进行对话的通用命令格式为:lmdeploy chat [HF格式模型路径/TurboMind格式模型路径]
lmdeploy chat /root/internlm2-chat-1_8b提示输入:“请给我讲一个小故事吧”后按两下回车键
速度明显要快
进阶作业
6.LMDeploy模型量化
通过KV Cache管理器设置--cache-max-entry-count参数,控制缓存大小,首先默认0.8参数,运行1.8模型,查看现存占用情况。
显存占 用7856,输入以下命令设置参数为0.5,查看显存占用情况。
lmdeploy chat /root/internlm2-chat-1_8b --cache-max-entry-count 0.5
显存降低道6608.
输入参数设置为0.01
lmdeploy chat /root/internlm2-chat-1_8b --cache-max-entry-count 0.01,显存明显降到4552.
7.使用W4A16量化
LMDeploy使用AWQ算法,实现模型4bit权重量化,先安装依赖库。
pip install einops==0.7.0
执行以下命令完成量化工作,新的HF模型被保存到internlm2-chat-1_8b-4bit
目录。
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-4bitKV Cache比例再次调为0.01,查看显存占用情况 lmdeploy chat /root/internlm2-chat-1_8b-4bit --model-format awq --cache-max-entry-count 0.01显存占用明显降到2472.
8.LMDeploy服务(server)
将大模型封装为API接口服务,供客户端访问。服务流程分为模型推理/服务、API Server、Client。
通过以下命令启动API服务器,推理internlm2-chat-1_8b
模型。model-format、quant-policy这些参数是与量化推理模型一致的;server-name和server-port表示API服务器的服务IP与服务端口;tp参数表示并行数量(GPU数量)。
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本地需要ssh转发访问。本地打开一个cmd窗口,输入命令如下: ssh -CNg -L 23333:127.0.0.1:23333 root@ssh.intern-ai.org.cn -p <你的ssh端口号> ssh端口号在ssh连接中查看。浏览器
命令行客户端连接API服务器
通过VS Code新建一个终端。在终端中激活环境:conda activate lmdeploy ,运行以下命令:
lmdeploy serve api_client http://localhost:23333
与模型对话
网页客户端连接API服务器
新建一个VSCode终端,激活conda环境,conda activate lmdeploy,使用Gradio作为前端,启动网页客户端。执行以下命令:
lmdeploy serve gradio http://localhost:23333 \
--server-name 0.0.0.0
--server-port 6006
运行命令后,网页客户端启动。在电脑本地新建一个cmd终端,新开一个转发端口。
ssh -CNg -L 6006:127.0.0.1:6006 root@ssh.intern-ai.org.cn -p <你的ssh端口号>打开浏览器,访问地址http://127.0.0.1:6006
9.Python代码集成
首先激活conda环境,conda activate lmdeploy。
新建Python源代码文件pipeline.py,文件中输入以下内容保存
from lmdeploy import pipeline
pipe = pipeline('/root/internlm2-chat-1_8b')
response = pipe(['Hi, pls intro yourself', '上海是'])
print(response)
运行代码:python /root/pipeline.py后输出response 向TurboMind后端传递参数
通过向lmdeploy传递附加参数,实现模型的量化推理,及设置KV Cache最大占用比例。在Python代码中,可以通过创建TurbomindEngineConfig,向lmdeploy传递参数。设置KV Cache占用比例为例。
touch /root/pipeline_kv.py。新建python文件pipeline_kv.py,输入以下内容保存: from lmdeploy import pipeline, TurbomindEngineConfig
# 调低 k/v cache内存占比调整为总显存的 20%
backend_config = TurbomindEngineConfig(cache_max_entry_count=0.2)
pipe = pipeline('/root/internlm2-chat-1_8b',backend_config=backend_config)
response = pipe(['Hi, pls intro yourself', '上海是'])
print(response)
保存后运行python代码:python /root/pipeline_kv.py
10.LMDeploy运行视觉多模态大模型llava
支持了llava多模态模型,使用pipeline推理llava-v1.6-7b
。
激活conda环境:conda activate lmdeploy
安装llava依赖库:
pip install git+https://github.com/haotian-liu/LLaVA.git@4e2277a060da264c4f21b364c867cc622c945874
新建一个python文件,pipeline_llava.py
。
touch /root/pipeline_llava.py
输入以下内容
from lmdeploy.vl import load_image
from lmdeploy import pipeline, TurbomindEngineConfig
backend_config = TurbomindEngineConfig(session_len=8192) # 图片分辨率较高时请调高session_len
# pipe = pipeline('liuhaotian/llava-v1.6-vicuna-7b', backend_config=backend_config) 非开发机运行此命令
pipe = pipeline('/share/new_models/liuhaotian/llava-v1.6-vicuna-7b', backend_config=backend_config)
image = load_image('https://raw.githubusercontent.com/open-mmlab/mmdeploy/main/tests/data/tiger.jpeg')
response = pipe(('describe this image', image))
print(response)
- 第1行引入了lmdeploy的pipeline模块,第2行引入用于载入图片的load_image函数 \
- 第5行创建了pipeline实例 \
- 第7行从github下载了一张关于老虎的图片,如下:
第8行运行pipeline,输入提示词“describe this image”,和图片,结果返回至response \ - 第9行输出response
保存运行python /root/pipeline_llava.py后结果:
通过Gradio来运行llava模型。新建python文件gradio_llava.py
:
touch /root/gradio_llava.py 文件输入以下内容保存: import gradio as gr from lmdeploy import pipeline, TurbomindEngineConfig backend_config = TurbomindEngineConfig(session_len=8192) # 图片分辨率较高时请调高session_len # pipe = pipeline('liuhaotian/llava-v1.6-vicuna-7b', backend_config=backend_config) 非开发机运行此命令 pipe = pipeline('/share/new_models/liuhaotian/llava-v1.6-vicuna-7b', backend_config=backend_config) def model(image, text): if image is None: return [(text, "请上传一张图片。")] else: response = pipe((text, image)).text return [(text, response)] demo = gr.Interface(fn=model, inputs=[gr.Image(type="pil"), gr.Textbox()], outputs=gr.Chatbot()) demo.launch() 运行python /root/gradio_llava.py 程序:
本地powershell终端运行如下命令:
ssh -CNg -L 7860:127.0.0.1:7860 root@ssh.intern-ai.org.cn -p <你的ssh端口>
上传一张图片: