书生浦语实战营第二期之LMDeploy量化部署

lmdeploy

1.LMDeploy环境准备

1.1 Cuda环境问题

此处应该选择镜像Cuda12.2-conda。如果选择Cuda11.7-conda的镜像,新版本的lmdeploy会出现兼容性问题。

1.2 创建conda环境

studio-conda -t lmdeploy -o pytorch-2.1.2

1.3 安装LMDeploy

step1: conda activate lmdeploy
step2: pip install lmdeploy[all]==0.3.0

jieshu

等待安装结束。

2.LMDeploy模型对话

2.1 下载模型

> way1: ln -s /root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b /root/
> way2: cp -r /root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b /root/

2.2 使用Transformer库运行模型

step1: touch /root/pipeline_transformer.py

step2: conda activate lmdeploy

step3: python /root/pipeline_transformer.py

运行效果:

test2

2.3 使用LMDeploy与模型对话

step1: 激活环境 conda activate lmdeploy

step2: 进行chat,格式为 lmdeploy chat [HF格式模型路径/TurboMind格式模型路径]

step3: lmdeploy chat /root/internlm2-chat-1_8b

test4

3.LMDeploy模型量化(lite)

3.1 两个概念

  1. 计算密集(compute-bound): 指推理过程中,绝大部分时间消耗在数值计算上;针对计算密集型场景,可以通过使用更快的硬件计算单元来提升计算速度。
  2. 访存密集(memory-bound): 指推理过程中,绝大部分时间消耗在数据读取上;针对访存密集型场景,一般通过减少访存次数、提高计算访存比或降低访存量来优化。
    常见的 LLM 模型由于 Decoder Only 架构的特性,实际推理时大多数的时间都消耗在了逐 Token 生成阶段(Decoding 阶段),是典型的访存密集型场景。

3.2 设置最大KV Cache缓存大小

3.2.1 尝试不同的–cache-max-entry-count参数
lmdeploy chat /root/internlm2-chat-1_8b --cache-max-entry-count 0.4
3.2.2 效果展示

test6

3.3 使用W4A16量化

3.3.1 简介

LMDeploy使用AWQ算法,实现模型4bit权重量化。推理引擎TurboMind提供了非常高效的4bit推理cuda kernel,性能是FP16的2.4倍以上。

3.3.2 实操

运行前,首先安装一个依赖库。

step1: pip install einops==0.7.0

step2: 只需运行下面一条命令即可完成模型量化
		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

运行结果展示:
test19

3.3.3 效果展示

简单展示,如下所示:

lmdeploy chat /root/internlm2-chat-1_8b-4bit --model-format awq

为了更加明显体会到W4A16的作用,我们将KV Cache比例调为0.4,查看显存占用情况。

lmdeploy chat /root/internlm2-chat-1_8b-4bit --model-format awq --cache-max-entry-count 0.4

效果展示:
test7
非常的不错!!!速度非常快

4.LMDeploy服务

下面是架构图:
架构

4.1 启动API服务器

通过以下命令启动API服务器,推理internlm2-chat-1_8b模型:

step1: 启动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
step2: 端口转发
		ssh -CNg -L 23333:127.0.0.1:23333 root@ssh.intern-ai.org.cn -p 端口号
step3: 网页访问
		浏览器打开http://127.0.0.1:23333 

其中,model-format、quant-policy这些参数是与第三章中量化推理模型一致的;server-name和server-port表示API服务器的服务IP与服务端口;tp参数表示并行数量(GPU数量)。

效果展示:
test111

4.2 命令行客户端连接API服务器

在4.1节中,我们在终端里新开了一个API服务器。下面进行命令行链接API服务器:

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

效果展示:

test09

现在使用的架构为:

架构1

4.3 网页客户端连接API服务器

step1: 激活环境
		conda activate lmdeploy

step2: 使用Gradio作为前端,启动网页客户端。
	lmdeploy serve gradio http://localhost:23333 \
	    --server-name 0.0.0.0 \
	    --server-port 6006

step3: 配置端口转发
		ssh -CNg -L 6006:127.0.0.1:6006 root@ssh.intern-ai.org.cn -p 端口号

step4: 打开浏览器,访问地址http://127.0.0.1:6006

command
一不下心出了一个这个:
error
按照提示修改好即可

运行结果展示:

display

现在你使用的架构是这样的:
架构2

5.Python代码集成

在开发项目时,有时我们需要将大模型推理集成到Python代码里面。

5.1 Python代码集成运行1.8B模型

首先激活conda环境。

conda activate lmdeploy
新建Python源代码文件pipeline.py。

touch /root/pipeline.py
打开pipeline.py,填入以下内容。

from lmdeploy import pipeline

pipe = pipeline('/root/internlm2-chat-1_8b')
response = pipe(['Hi, pls intro yourself', '上海是'])
print(response)

代码解读:

第1行,引入lmdeploy的pipeline模块
第3行,从目录“./internlm2-chat-1_8b”加载HF模型
第4行,运行pipeline,这里采用了批处理的方式,用一个列表包含两个输入,lmdeploy同时推理两个输入,产生两个输出结果,结果返回给response
第5行,输出response

5.2 向TurboMind后端传递参数

在第3章,我们通过向lmdeploy传递附加参数,实现模型的量化推理,及设置KV Cache最大占用比例。在Python代码中,可以通过创建TurbomindEngineConfig,向lmdeploy传递参数。

以设置KV Cache占用比例为例,新建python文件pipeline_kv.py。

如下图所示:
python

得到输出结果:

test111

6.拓展部分

6.1 使用LMDeploy运行视觉多模态大模型llava

最新版本的LMDeploy支持了llava多模态模型,下面演示使用pipeline推理llava-v1.6-7b。

6.1.1 命令行使用
step1: 激活环境
		conda activate lmdeploy

step2: 安装llava依赖库。
		pip install git+https://github.com/haotian-liu/LLaVA.git@4e2277a060da264c4f21b364c867cc622c945874
step3: 新建pipeline_llava.py
		touch /root/pipeline_llava.py
step4: 运行pipeline_llava.py

| 依赖安装完毕:
aaa

| 运行结果截图
在这里插入图片描述

6.1.2 Gradio运行llava模型
step1: 创建gradio_llava.py文件
step2: python /root/gradio_llava.py
step3: 配置端口转发(同上)

终端展示:

a

运行效果展示:
b

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值