书生浦语第二期实战营——第五课_LMDeploy部署

第五课

——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 环境

  1. 创建开发
  2. cuda12.2 0.3.0的deploy
  3. 10% GPU
  4. 新建虚拟环境,激活。
  5. 安装deploy==0.3.0

2.2 模型对话——chat

  1. 模型托管社区:huggingface、MindScope、OpenXlab。HF格式

  2. TurboMind引擎,只支持TurboMind格式的模型。

  3. 下载模型(软链接模型,创建模型映射)

  4. transformer库(HF)运行模型。

    • 创建新文件——pipeline_transformer.py。(测试Huggingface模型的速度)
  5. LMDepoly的命令格式:

    lmdepoly chat [HF格式的模型路径/TurboMind格式的模型路径]

    lmdepoly chat /root/internlm2-chat-1_8b

  6. 查看命令:lmdepoly chat -h

2.3 模型量化——lite

KV Cache通过存储键值对的形式来复用计算结果,以达到提高性能和降低内存的目的。

占用的显存可分为三个部分:

  • 模型参数本身占用的显存
  • KV Cache占用的显存
  • 中间运算结果占用的显存

设计思路:用的时候放入显存,不用的时候放入内存。

先设置固定大小空间,默认0.8。控制KV缓存占剩余显存的最大比例,设置越小,显存的占用越小。

极限压缩:–cache-max-entry-count 0.01

W4A16量化

使用AWQ算法,实现4bit权重量化。

  1. 安装依赖:einops==0.7.0

  2. 执行命令

    在这里插入图片描述

​ lite:量化功能

​ 调用awq算法

  1. 对比测试。

以上是本地部署

2.4 LMDeploy服务器

将大模型封装成api的服务,供客户端访问

架构图如下:

在这里插入图片描述

  • 模型推理服务。提供模型本身的推理。
  • 中间协议层。把后端的推理/服务通过http,gRPC或其他形式的接口供前端使用。
  • Client。前端,与用户交互

启动服务:

  1. 命令:

    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数量
    
    # 
    
  2. 命令行客户端连接API服务器

    • 新建终端-激活环境

    • lmdepoly serve api_client http://localhost:23333

      在这里插入图片描述

      区别:有了一个中介服务器——api服务

  3. 网页客户端(gradio)

    lmdepoly server gradio http:localhost:23333 \  # 访问后端的接口
    --server-name 0.0.0.0 \
    --sever-port 6006
    

    在这里插入图片描述

  4. 本地端口转发

    ssh -CNg -L 6006:127.0.0.0.1:6006 root@ip -p

    本地的6006端口转发到开发机的6006端口

2.5 集成LMDeploy

将大模型推理代码集成到python代码里面

(1)pipeline 批处理

  1. 激活环境

  2. 新建文件pipeline.py

  3. 代码:

    from lmdepoly import pipiline
    # 示例
    # 批处理
    print()
    
  4. 运行:python /root/pipeline.py

(2)pipeline的KV设置:

在这里插入图片描述

(3)多模态

30% 的开发机

  1. LLaVA的依赖库

  2. 新建文件。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 配置环境

  1. 创建开发

  2. cuda12.2 0.3.0的deploy

  3. 10% GPU

    在这里插入图片描述

  4. 新建虚拟环境,激活。

    studio-conda -t lmdeploy -o pytorch-2.1.2
    
  5. 安装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

  • 30
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值