9n-triton部署bert模型实战经验
内容提要
本文介绍了算法工程师解决Python部署线上服务性能问题的经验,使用Nvidia的triton部署框架将深度学习模型部署至九数中台,性能提升了337%。文章列举了Python后端部署问题,包括性能低、多线程困难、内存占用过多等。作者选择了使用triton部署算法模型来解决这些问题,摒弃传统镜像部署方式。文章详细介绍了部署流程和注意事项,并给出了代码示例。最后,作者总结了使用triton框架部署torchscript方式的优势。
延伸解读
性能提升的量化对比
文章提到,原Python后端服务单次推理时间约175ms,改用Triton部署后降至约40ms,性能提升近337%。这一数据基于同一Bert模型在相同任务下的测试,但需注意测试环境可能不同:原服务为CPU镜像部署,而Triton部署仅支持GPU推理。因此,性能差异不仅来自框架优化,也包含硬件差异。读者在评估时需结合自身硬件条件。
部署环境的关键限制
九数中台的Triton部署对环境有严格要求:仅支持GPU推理,且Torch版本需为1.10.0、CUDA 11.2。这意味着模型必须在该环境下转换为.pt文件,否则部署会失败。此外,转ONNX需额外安装transformers-onnx包并需要sudo权限,而九数平台无法执行,建议本地转换。这些限制可能影响部署效率,需提前规划。
模型封装与输入输出设计
文章选择将softmax和argmax封装进模型,使输出直接为分类标量,简化了后处理。但tokenizer未封装,因为TorchScript仅接受数组输入。因此,模型输入为input_ids和attention_mask,输出为类别。这种设计减少了服务端代码,但要求客户端完成tokenizer步骤。config.pbtxt中需明确输入输出维度与类型,如两个1x512的INT64输入和一个1x1的INT64输出。
部署流程中的注意事项
模型目录结构必须严格遵循要求,包含版本号目录(如1)下的model.pt和config.pbtxt。注册时需填写一级目录路径。部署后可通过POST接口测试,确保接口通畅后再转生产。文章建议使用torch.jit.trace而非script,以避免引擎兼容问题。这些细节虽小,但直接影响部署成功率,值得读者留意。
Q&A
使用triton框架部署模型有什么优势?
使用triton框架可以显著提升模型推理性能,本文提到性能提升达337%。
Python后端部署存在哪些主要问题?
主要问题包括性能低、多线程困难和内存占用过多。
如何将Bert模型转换为.pt文件?
可以使用torch.jit.trace方法,将训练好的模型保存为.pt文件格式。
triton部署模型时需要注意哪些目录格式?
模型目录需包含model.pt和config.pbtxt,格式需严格按照要求。
在triton中,如何测试模型是否成功部署?
可以通过post接口在notebook中测试接口通不通,确保模型正常工作。
转换onnx文件时需要注意什么?
需要额外安装transformers-onnx包,并建议在本地转换。