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 最佳实践