LMDeploy 量化部署 LLM 实践+进阶

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 ServerClient

   通过以下命令启动API服务器,推理internlm2-chat-1_8b模型。model-formatquant-policy这些参数是与量化推理模型一致的;server-nameserver-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端口>

浏览器访问http://127.0.0.1:7860

上传一张图片:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值