Llma3大模型----五一共学笔记-2

LMDeploy 高效部署 Llama3 实践---如何使用LMDeploy来部署Llama3

Llama3-Tutorial/docs/lmdeploy.md at main · SmartFlowAI/Llama3-Tutorial · GitHub

如,同栏目的上-1笔记一样,机智流github仓库笔记如上链接

1.环境,模型准备

1.1 环境配置

在这一节中需要配置新的环境

# 如果你是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

这里可能出现报错,下载超时,若是下载太慢或超时,可以切换清华大学的镜像源

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

接着安装Imdeploy最新版

pip install -U lmdeploy[all]

注意:安装Imdeploy最新版这里是是在imdeploy环境下的,下载最新版的时候别配错了,因为我是直接运行第一条代码,还没激活环境,就下了,下完了才发现下错了(哭了),使用以下代码进入环境

conda activate lmdeploy

配置完可运行以下命令列出所有可发现的conda环境

conda info --envs

1.2 Llama3 的下载

直接复制即可,

# 新建文件夹
mkdir -p ~/model
cd ~/model
# 软链接 InternStudio 中的模型,这一步骤我们在之前的学习中已经完成,因此InternStudio 中不建议执行这一步
ln -s /root/share/new_models/meta-llama/Meta-Llama-3-8B-Instruct ~/model/Meta-Llama-3-8B-Instruct

# 执行会以下错误,因此在InternStudio中直接略过这一步
ln: failed to create symbolic link '/root/model/Meta-Llama-3-8B-Instruct/Meta-Llama-3-8B-Instruct': Read-only file system

2.LMDeploy chat CLI工具

下面代码直接运行即可

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

得出结果

3.LMDeploy模型量化(lite)

主要包括 KV8量化和W4A16量化

3.1设置最大KV Cache缓存大小

LMDeploy的KV Cache管理器可以通过设置--cache-max-entry-count参数,来控制KV缓存占用剩余显存的最大比例。默认比例为0.8。在模型运行时,显存的占用主要包括模型参数本身、KV Cache以及中间运算结果所占用的显存。通过调整--cache-max-entry-count参数,可以影响KV Cache对显存的利用率。

接下来通过几个例子来说明调整--cache-max-entry-count参数的效果。首先,保持参数不变(默认为0.8),运行Llama3-8b模型。通过观察实际运行情况,了解不同参数设置对显存利用的影响。这样可以优化显存的利用,提升模型的性能和效率。

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

新建一个终端运行ctrl+shift+~、

# 如果你是InternStudio 就使用
studio-smi

# 如果不是请使用下面命令
nvidia-smi 

得到结果

此时模型的占用为36232MiB。下面改变--cache-max-entry-count参数,设为0.5。

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

看到显存占用明显降低,变为28680MiB。

取“极限”位置,将参数设置为0.01,相当于禁止KV Cache占用显存。

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

可以看到,此时显存占用仅为16176M,代价是会降低模型推理速度

注意:新建了终端,查看显存占用情况需要在另一个终端中使用studio-smi查看

3.2使用W4A16量化

直接cv以下命令,就可以完成模型量化

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

运行时间较长,请耐心等待。

下面使用Chat功能运行W4A16量化后的模型。

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

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

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

可以看到是明显降低的

3.3 在线量化 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 规定 qant_policy=4表示 kv int4 量化,quant_policy=8 表示 kv int8 量化。

4.LMDeploy服务(serve)

前面的章节,我们都是在本地直接推理大模型,称为本地部署。而通常我们会将大模型封装为 API 接口服务,供客户端访问。

4.1 启动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服务器,请勿关闭该窗口,后面我们要新建客户端连接该服务。 你也可以直接打开http://{host}:23333查看接口的具体使用说明,如下图所示。

这一步由于Server在远程服务器上,所以本地需要做一下ssh转发才能直接访问。在你本地打开一个cmd窗口,输入命令如下:

ssh -CNg -L 23333:127.0.0.1:23333 root@ssh.intern-ai.org.cn -p 你的ssh端口号

ssh 端口号就是下面图片里的 47304,请替换为你自己的。

然后打开浏览器,访问http://127.0.0.1:23333。

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

上述目的是在终端中开了一个API服务器。而现在我们要新建一个命令行客户端去连接API服务器。

首先通过VS Code新建一个终端: 激活conda环境,运行命令行客户端

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

运行后,可以通过命令行窗口直接与模型对话

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

关闭刚刚的VSCode终端,但服务器端的终端不要关闭。 运行之前确保自己的gradio版本低于4.0.0。

pip install gradio==3.50.2

新建一个VSCode终端,激活conda环境。

conda activate lmdeploy

使用Gradio作为前端,启动网页客户端。

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

打开浏览器,访问地址http://127.0.0.1:6006 然后就可以与模型进行对话了!

恭喜你,又完成了本节课的学习!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值