Llama 3 五一超级课堂 笔记 ==> 第四节、Llama 3 高效部署实践(LMDeploy 版)

这一节需要准备一个心的环境lmdeploy。

环境准备

老师提供两种方案

# 如果你是InternStudio 可以直接使用
# studio-conda -t lmdeploy -o pytorch-2.1.2
# 初始化环境
conda create -n lmdeploy python=3.10
conda activate lmdeploy
conda install pytorch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 pytorch-cuda=12.1 -c pytorch -c nvidia

我使用studio-conda -t lmdeploy -o pytorch-2.1.2 这个方案。
安装lmdeploy最新版。

pip install -U lmdeploy[all]

class-4-1.png
超时了,重试就好了。
软链接 InternStudio 中的模型。

mkdir -p ~/model
cd ~/model
ln -s /root/share/new_models/meta-llama/Meta-Llama-3-8B-Instruct ~/model/Meta-Llama-3-8B-Instruct

LMDeploy Chat CLI

终端直接运行下面命令就好

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

随便问几个问题看看
class-4-2.png

LMDeploy模型量化(lite)

目的:减小显存占用,提升运行速度

本部分内容主要介绍如何对模型进行量化。主要包括 KV8量化和W4A16量化。
模型在运行时,占用的显存可大致分为三部分:模型参数本身占用的显存、KV Cache占用的显存,以及中间运算结果占用的显存。LMDeploy的KV Cache管理器可以通过设置–cache-max-entry-count参数,控制KV缓存占用剩余显存的最大比例。默认的比例为0.8。

设置最大KV Cache缓存大小

默认(0.8)
命令

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

class-4-3.png
class-4-4.png
改成0.5
命令

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

class-4-5.png
class-4-6.png
极限0.1
命令

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

class-4-7.png
class-4-8.png
从上面可以看出来,参数--cache-max-entry-count值越小,占用显存越少。
通过聊天也发现,值越小,推理速度也降低了,回复也变慢了。

使用W4A16量化

运行老师准备好的命令

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

等待量化完成后,我们直接运行下面命令

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

class-4-9.pngclass-4-10.png
可以看出,显存占用明显降低。

在线量化 KV

自 v0.4.0 起,LMDeploy KV 量化方式有原来的离线改为在线。并且,支持两种数值精度 int4、int8。量化方式为 per-head per-token 的非对称量化。它具备以下优势:

  1. 量化不需要校准数据集
  2. kv int8 量化精度几乎无损,kv int4 量化精度在可接受范围之内
  3. 推理高效,在 llama2-7b 上加入 int8/int4 kv 量化,RPS 相较于 fp16 分别提升近 30% 和 40%
  4. 支持 volta 架构(sm70)及以上的所有显卡型号:V100、20系列、T4、30系列、40系列、A10、A100 等等 通过 LMDeploy 应用 kv 量化非常简单,只需要设定 quant_policy 参数。LMDeploy 规定 quant_policy=4表示 kv int4 量化,quant_policy=8 表示 kv int8 量化。

更多请看 lmdeploy/docs/en/get_started.md at main · InternLM/lmdeploy

LMDeploy服务(serve)

启动API服务器

通过以下命令启动API服务器,推理Meta-Llama-3-8B-Instruct模型:

lmdeploy serve api_server \
    /root/model/Meta-Llama-3-8B-Instruct \
    --model-format hf \
    --quant-policy 0 \
    --server-name 0.0.0.0 \
    --server-port 23333 \
    --tp 1

其中,model-format、quant-policy这些参数是与第三章中量化推理模型一致的;server-name和server-port表示API服务器的服务IP与服务端口;tp参数表示并行数量(GPU数量)。 通过运行以上指令,我们成功启动了API服务器,请勿关闭该窗口,后面我们要新建客户端连接该服务。
运行命令
class-4-11.png
点击下图的小地球,就能访问了
在这里插入图片描述

class-4-13.png

命令行客户端链接服务器

打开一个新的终端,运行下面命令

conda activate lmdeploy
lmdeploy serve api_client http://localhost:23333

聊两句
class-4-14.png

网页客户端连接API服务器

再新开一个终端,切换环境

conda activate lmdeploy

安装gradio,确保自己的gradio版本低于4.0.0。

pip install gradio==3.50.2

我开发机已经有了所以我没有下载,查看命令

pip list

运行下面命令启动网页客户端

lmdeploy serve gradio http://localhost:23333 \
    --server-name 0.0.0.0 \
    --server-port 6006

class-4-15.png
点击小地球访问
class-4-16.png
聊两句
class-4-17.png

拓展

推理速度

克隆仓库

cd ~
git clone https://github.com/InternLM/lmdeploy.git

下载测试数据

cd /root/lmdeploy
wget https://hf-mirror.com/datasets/anon8231489123/ShareGPT_Vicuna_unfiltered/resolve/main/ShareGPT_V3_unfiltered_cleaned_split.json

运行命令

python benchmark/profile_throughput.py \
    ShareGPT_V3_unfiltered_cleaned_split.json \
    /root/model/Meta-Llama-3-8B-Instruct \
    --cache-max-entry-count 0.8 \
    --concurrency 256 \
    --model-format hf \
    --quant-policy 0 \
    --num-prompts 10000

展示
class-4-18.png
没跑起来,看报错是ArgumentHelper没有enable_prefix_caching 属性
去改下脚本,注释掉下面代码
class-4-19.png
运行命令
class-4-20.png
又没跑起来,老师建议(如果你的显存较小,可以调低–cache-max-entry-count)
调成0.5跑
class-4-21.png
起来了,结果如下:
class-4-22.png

使用LMDeploy运行视觉多模态大模型Llava-Llama-3

安装依赖

pip install git+https://github.com/haotian-liu/LLaVA.git

创建脚本文件

touch /root/pipeline_llava.py

编写脚本内容

from lmdeploy import pipeline, ChatTemplateConfig
from lmdeploy.vl import load_image
pipe = pipeline('xtuner/llava-llama-3-8b-v1_1-hf',
                chat_template_config=ChatTemplateConfig(model_name='llama3'))

image = load_image('https://raw.githubusercontent.com/open-mmlab/mmdeploy/main/tests/data/tiger.jpeg')
response = pipe(('describe this image', image))
print(response.text)

运行脚本

python pipeline_llava.py

class-4-23.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值