书生·浦语大模型实战营第五节课堂笔记(LMDeploy 大模型量化部署实践)

本文详细介绍了如何通过LMDeploy进行环境配置,包括激活环境、安装包,以及如何进行模型转换(在线和离线)、TurboMind推理服务的部署和命令行交互。重点讲解了KVCache和W4A16量化在降低显存占用和提升精度方面的应用。
摘要由CSDN通过智能技术生成

1 环境配置

# 激活环境
conda activate lmdeploy
# 进入家目录 (~的意思是 “当前用户的home路径”)
cd ~
conda env list
结果如下所示

然后激活环境

进入Python检查一下 PyTorch 和 lmdeploy 的版本。

# 安装lmdeploy包

 基础环境到这里就配置好了。

 2 服务部署

2.1 模型转换

使用 TurboMind 推理模型需要先将模型转化为 TurboMind 的格式,目前支持在线转换和离线转换两种形式。在线转换可以直接加载 Huggingface 模型,离线转换需需要先保存模型再加载。

2.1.1 在线转换

以上命令都会启动一个本地对话界面,通过 Bash 可以与 LLM 进行对话。 

结果如下所示

2.1.2 离线转换

本条命令:

lmdeploy convert internlm-chat-7b  /root/share/temp/model_repos/internlm-chat-7b/

利用lmdeploy 工具,对存储在/root/share/temp/model_repos/internlm-chat-7b/路径的

internlm-chat-7b模型进行TurboMind格式的转换,并在执行完成后,在当前目录生成一个 workspace 的文件夹。

结果如下所示

上述步骤的操作为后续模型推理加速提前做好准备工作。

2.2 TurboMind 推理+命令行本地对话

模型转换完成后,我们就具备了使用模型推理的条件,接下来就可以进行真正的模型推理环节。

我们先尝试本地对话(Bash Local Chat),下面用(Local Chat 表示)在这里其实是跳过 API Server 直接调用 TurboMind。简单来说,就是命令行代码直接执行 TurboMind。这里和前面架构图中的调用方式是有区别的。

不过这里支持多种方式运行,比如Turbomind、PyTorch、DeepSpeed。但 PyTorch 和 DeepSpeed 调用的其实都是 Huggingface 的 Transformers 包,PyTorch表示原生的 Transformer 包,DeepSpeed 表示使用了 DeepSpeed 作为推理框架。Pytorch/DeepSpeed 目前功能都比较弱,不具备生产能力,不推荐使用。

执行命令如下:

输入后两次回车,退出时输入exit 回车两次即可。此时,Server 就是本地跑起来的模型(TurboMind),命令行可以看作是前端。

2.3 TurboMind推理+API服务

在上面的部分我们尝试了直接用命令行启动 Client,接下来我们尝试如何运用 lmdepoy 进行服务化。

”模型推理/服务“目前提供了 Turbomind 和 TritonServer 两种服务化方式。此时,Server 是 TurboMind 或 TritonServer,API Server 可以提供对外的 API 服务。我们推荐使用 TurboMind,TritonServer 使用方式详见《附录1》。

首先,通过下面命令启动服务。

上面的参数中 server_name 和 server_port 分别表示服务地址和端口,tp 参数我们之前已经提到过了,表示 Tensor 并行。还剩下一个 instance_num 参数,表示实例数,可以理解成 Batch 的大小。执行后如下图所示。

如下图所示: 

启动 API Server之后,自然也有相应的接口。可以直接打开 http://{host}:23333 查看。

如下图所示:

PS:注意,这一步由于 Server 在远程服务器上,所以本地需要做一下 ssh 转发才能直接访问(与第一部分操作一样),命令如下:

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

而执行本命令需要添加本机公钥,公钥添加后等待几分钟即可生效。

PS:执行本命令需要添加本机公钥以及如何查看ssh 端口号已在之前的课程教程中详细介绍并练习操作过,故不再此处再次重复赘述。

这里一共提供了 4 个 HTTP 的接口,任何语言都可以对其进行调用

如下图所示:

 我们以 v1/chat/completions 接口为例,简单试一下。

接口请求参数如下:

请求结果如下:

 

 

2.4 网页 Demo 演示

这一部分主要是将 Gradio 作为前端 Demo 演示。在上一节的基础上,我们不执行后面的 api_client 或 triton_client,而是执行 gradio

2.4.1 TurboMind 提供的api server服务作为后端

首先再次执行如下命令,启动基于TurboMind的API Server服务

结果如下图所示:

2.4.2 TurboMind 推理作为后端

Gradio 也可以直接和 TurboMind 连接,如下所示:

可以直接启动 Gradio,此时没有 API Server,TurboMind 直接与 Gradio 通信。如下图所示:

2.5 TurboMind 推理 + Python 代码集成

 2.6 最佳实践

 

 2.6.2 模型配置实践

 3.1 KV Cache 量化

接下来就可以正常运行前面的各种服务了,只不过咱们现在可是用上了 KV Cache 量化,能更省(运行时)显存了。

可以看出,精度不仅没有明显下降,相反在不少任务上还有一定的提升。可能得原因是,量化会导致一定的误差,有时候这种误差可能会减少模型对训练数据的拟合,从而提高泛化性能。量化可以被视为引入轻微噪声的正则化方法。或者,也有可能量化后的模型正好对某些数据集具有更好的性能。

总结一下,KV Cache 量化既能明显降低显存占用,还有可能同时带来精准度(Accuracy)的提升。

3.2 W4A16 量化

  

3.3 最佳实践

  • 27
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值