9n-triton部署bert模型实战经验

💡 原文中文,约3700字,阅读约需9分钟。
📝

内容提要

本文介绍了算法工程师解决Python部署线上服务性能问题的经验,使用Nvidia的triton部署框架将深度学习模型部署至九数中台,性能提升了337%。文章详细介绍了Python部署的性能和复杂性问题,并分享了使用triton部署算法模型的实例,以Bert模型为例介绍了模型保存、转换为.pt文件、配置和注册等步骤。最后,总结了使用triton框架部署torchscript方式的经验。

🔎

延伸解读

性能提升的量化依据

文章指出,原Python后端服务单次推理约175ms,改用Triton部署后降至约40ms,性能提升近337%。这一数据基于同一Bert模型在相同任务下的对比,但需注意测试环境差异:原服务可能运行在CPU环境,而Triton部署使用GPU推理。因此,实际提升幅度可能受硬件配置影响,读者应结合自身环境评估。

部署环境的关键限制

文章强调,九数平台的Triton部署对.pt文件有严格版本要求:torch必须为1.10.0,CUDA 11.2,且仅支持GPU推理,不支持CPU。这意味着模型转换必须在指定环境下完成,否则部署会失败。此外,转ONNX需额外安装transformers-onnx包并需要sudo权限,在九数上无法执行,建议本地转换。这些限制直接影响部署可行性。

模型封装与输入输出设计

作者选择将softmax和argmax包装进模型,使输出直接为分类类别,但未将tokenizer纳入TorchScript,因为TorchScript仅接受数组输入。最终模型输入为input_ids和attention_mask,输出为标量。这种设计简化了服务端逻辑,但要求调用方自行完成tokenization。配置文件中需明确输入输出维度与数据类型,如输入为[1,512]的INT64,输出为[1,1]的INT64。

部署流程中的易错点

文章提醒,模型文件需按指定目录结构存放,如pytorch-model/1/model.pt,并配置config.pbtxt。注册时需填写一级目录路径,部署后可通过POST接口测试连通性。作者建议使用torch.jit.trace而非script,后者常出现引擎不兼容问题。这些细节若忽略,可能导致部署失败或推理异常,读者应严格参照九数帮助文档操作。

❓

Q&A

为什么直接用Python部署线上服务性能差?

直接用Python部署线上服务性能差主要是因为Python是一种解释语言,执行速度慢,且存在GIL限制和内存占用过多的问题。

Nvidia的triton框架如何提升模型部署性能?

Nvidia的triton框架通过优化模型推理过程,使得在九数中台上部署的模型性能提升了337%。

如何将Bert模型保存为.pt文件?

可以使用torch.jit.trace将训练好的Bert模型保存为.pt文件,输入为input_ids和attention_mask,输出为分类结果。

部署Bert模型时需要注意哪些坑点?

在部署Bert模型时,需要注意torch版本要求、.pt文件的生成环境,以及onnx转换时的额外依赖问题。

triton框架的模型注册步骤是什么?

模型注册步骤包括将模型文件存放在指定目录、填写模型注册表信息,然后在注册好的模型下进行部署和测试。

使用triton框架部署模型的最终测试如何进行?

可以通过post接口在notebook中测试模型的接口通不通,确保测试没有问题后即可转生产。

🏷️

标签

➡️

继续阅读