当前位置:   article > 正文

Llama3小白自学路(四、LMDeploy部署Llama3)_from lmdeploy import pipeline, pytorchengineconfig

from lmdeploy import pipeline, pytorchengineconfig, chattemplateconfig, turb

写在前面

大模型的特点:
显存开销大、需要缓存大量的kv、数据长度不统一(动态shape)、请求数量不固定,token逐个生成

因此,对应的大模型部署挑战有:

硬件设备巨大的存储开销
训练推理token的加速生成、内存的有效管理利用、动态shape的处理
服务系统响应时间的降低、系统吞吐量的提升

LMDeploy:

是一个用于压缩、部署、服务 LLM 的工具包,由 MMRazor 和 MMDeploy 团队开发,英伟达设备上部署的全流程解决方案,其包括模型轻量化、推理和服务。

它具有以下核心功能:高效的推理引擎、交互式推理模式、量化

主要说一下量化,因为后面主要有对量化进行课程实践。

量化的主要目的是减小显存占用,提升运行速度。

这里附上机智流的Llama3教程链接:

机智流Llama3超级课堂

1、LMDeploy部署Llama3

按照之前的章节,下载配置好必要的环境、权重等。

  1. # 创建镜像并下载依赖
  2. conda create -n llama3 python=3.10
  3. conda activate llama3
  4. conda install pytorch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 pytorch-cuda=12.1 -c pytorch -c nvidia
  5. # 安装git
  6. mkdir -p ~/model
  7. cd ~/model
  8. apt install git git-lfs -y
  9. # 获取权重模型
  10. git clone https://code.openxlab.org.cn/MrCat/Llama-3-8B-Instruct.git Meta-Llama-3-8B-Instruct

安装 LMDeploy并运行

  1. conda activate lmdeploy
  2. # 安装
  3. pip install -U lmdeploy[all]
  4. # 运行
  5. lmdeploy chat /root/model/Meta-Llama-3-8B-Instruct

 之后就可以在终端界面进行对话:

2、LMDeploy量化

1)KV8量化

通过设置KV Cache得以实现。

模型在运行时,占用的显存可大致分为三部分:模型参数本身占用的显存、KV Cache占用的显存,以及中间运算结果占用的显存。KV Cache便是以空间换时间,当输入序列非常长的时候,需要缓存非常多K和V。

LMDeploy的KV Cache管理器可以通过设置--cache-max-entry-count参数,控制KV缓存占用剩余显存的最大比例。默认的比例为0.8。

显存使用查询

  1. # 如果你是InternStudio 就使用
  2. # studio-smi
  3. nvidia-smi

当不设置参数时(默认0.8)

lmdeploy chat /root/model/Meta-Llama-3-8B-Instruct/

 

当设置参数为0.5时

lmdeploy chat /root/model/Meta-Llama-3-8B-Instruct/ --cache-max-entry-count 0.5

当设置参数为0.1时

lmdeploy chat /root/model/Meta-Llama-3-8B-Instruct/ --cache-max-entry-count 0.1

显存占用降低,代价就是模型推理速度的降低。

2)W4A16量化

激活感知的量化,属于weight-only仅权重量化方法。通过保护更“重要”的权重不进行量化,从而在不进行训练的情况下提高准确率。

W4A16的含义是参数4bit量化,激活时是16bit。(后续会开章节进一步学习LMDeploy)

只需要一个命令便可以进行W4A16的量化:

  1. lmdeploy lite auto_awq \
  2. /root/model/Meta-Llama-3-8B-Instruct \
  3. --calib-dataset 'ptb' \
  4. --calib-samples 128 \
  5. --calib-seqlen 1024 \
  6. --w-bits 4 \
  7. --w-group-size 128 \
  8. --work-dir /root/model/Meta-Llama-3-8B-Instruct_4bit

参数说明:

/root/model/Meta-Llama-3-8B-Instruct为待量化的模型所在的路径

calib-dataset指定用于校准量化模型的数据集
calib-samples从校准数据集中使用的样本数量
calib-seqlen校准时序列的长度
w-bits权重量化的位宽。这里的4表示模型的权重将被量化为4位表示
w-group-size参数指定了权重分组的大小
work-dir量化后的模型和相关文件将被保存的位置

之后使用chat功能运行量化后的模型:

lmdeploy chat /root/model/Meta-Llama-3-8B-Instruct_4bit --model-format awq

 

值得说明的是,KV量化和W4A16量化可以同步进行,对比之前单单的0.1的KV量化:

lmdeploy chat /root/model/Meta-Llama-3-8B-Instruct_4bit --model-format awq --cache-max-entry-count 0.1

 

效果拔群!

3、LMDeploy服务

封装API接口服务,供客户端使用。

1)启动API服务器

使用以下命令启动API服务器,使用量化后的Meta-Llama-3-8B-Instruct_4bit模型:

  1. lmdeploy serve api_server \
  2. /root/model/Meta-Llama-3-8B-Instruct_4bit \
  3. --model-format awq \
  4. --quant-policy 0 \
  5. --server-name 0.0.0.0 \
  6. --server-port 23333 \
  7. --tp 1

参数说明:

model-format模型的格式,这里使用的是awq,之前原模型的话是hf
quant-policy量化策略,优化模型的大小和精度
server-name服务器主机名
server-port监听端口号
tp并行数量(GPU数量)

打开http://localhost:23333便可以查看接口的具体使用说明:

但因为服务端在远端,想要真正使用对应服务,本地需要做SSH端口转发,即本地打开cmd窗口,输入命令;

ssh -CNg -L 23333:127.0.0.1:23333 {username}@{hostname} -p {远程服务器端口号}
2)命令行客户端连接API服务器

在客户端运行命令:

lmdeploy serve api_client http://localhost:23333

之后可以直接在窗口进行对话

3)网页客户端连接API服务器

这里使用python的gradio模块

  1. conda activate lmdeploy
  2. pip install gradio==3.50.2
  3. lmdeploy serve gradio http://localhost:23333 \
  4. --server-name 0.0.0.0 \
  5. --server-port 6006

之后访问地址http://localhost:6006,就可以与模型进行对话:

4、LMDeploy运行视觉多模态大模型Llava-Llama-3

  1. # 安装依赖
  2. pip install git+https://github.com/haotian-liu/LLaVA.git
  3. # 新建一个py文件
  4. vi pipeline_llava.py

之后复制代码进去

  1. from lmdeploy import pipeline, ChatTemplateConfig, TurbomindEngineConfig
  2. from lmdeploy.vl import load_image
  3. # 图片分辨率较高时请调高session_len
  4. backend_config = TurbomindEngineConfig(session_len=8192)
  5. pipe = pipeline('xtuner/llava-llama-3-8b-v1_1-hf',
  6. chat_template_config=ChatTemplateConfig(model_name='llama3'),
  7. backend_config=backend_config)
  8. # 加载图片,这里替换想要分析的图片链接
  9. image = load_image('https://raw.githubusercontent.com/open-mmlab/mmdeploy/main/tests/data/tiger.jpeg')
  10. response = pipe(('describe this image', image))
  11. print(response.text)

运行py文件可以得到结果:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/914882
推荐阅读
相关标签
  

闽ICP备14008679号