Llama3小白自学路(四、LMDeploy部署Llama3)

写在前面

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

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

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

LMDeploy:

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

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

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

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

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

机智流Llama3超级课堂

1、LMDeploy部署Llama3

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

# 创建镜像并下载依赖
conda create -n llama3 python=3.10
conda activate llama3
conda install pytorch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 pytorch-cuda=12.1 -c pytorch -c nvidia

# 安装git
mkdir -p ~/model
cd ~/model
apt install git git-lfs -y

# 获取权重模型
git clone https://code.openxlab.org.cn/MrCat/Llama-3-8B-Instruct.git Meta-Llama-3-8B-Instruct

安装 LMDeploy并运行

conda activate lmdeploy

# 安装
pip install -U lmdeploy[all]

# 运行
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。

显存使用查询

# 如果你是InternStudio 就使用
# studio-smi
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的量化:

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

参数说明:

/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模型:

lmdeploy serve api_server \
    /root/model/Meta-Llama-3-8B-Instruct_4bit \
    --model-format awq \
    --quant-policy 0 \
    --server-name 0.0.0.0 \
    --server-port 23333 \
    --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模块

conda activate lmdeploy

pip install gradio==3.50.2

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

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

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

# 安装依赖
pip install git+https://github.com/haotian-liu/LLaVA.git

# 新建一个py文件
vi pipeline_llava.py

之后复制代码进去

from lmdeploy import pipeline, ChatTemplateConfig, TurbomindEngineConfig
from lmdeploy.vl import load_image

# 图片分辨率较高时请调高session_len
backend_config = TurbomindEngineConfig(session_len=8192) 

pipe = pipeline('xtuner/llava-llama-3-8b-v1_1-hf',
                chat_template_config=ChatTemplateConfig(model_name='llama3'),
                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.text)

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

  • 20
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值