Triton推理服务器需要将Pytorch模型转换为TorchScript或ONNX格式,严格配置model_repository目录结构和config.pbtxt,确保输入输出名称、shape和dtype与模型一致,并正确设置客户端请求参数,避免INVALID_ARG错误。
直接用 Triton 推理服务器运行模型不是“安装飞行”——它默认不会帮助您加载 PyTorch 模型,不自动适应你的预处理逻辑,也不处理 batch 维度错位是一个低级但致命的问题。真正高性能的前提是模型格式正确,配置文件准确,客户端要求稳定。
如何把 PyTorch 模型转成 Triton 支持的格式(torchscript / onnx)Triton 本身不是本地执行的 torch.nn.Module,必须先固化为可序列化格式。PyTorch 最常用的模型有两种路径:
- 用
torch.jit.trace或torch.jit.script导出.pt(推荐 trace,更好的兼容性;注意 trace 时输入 shape 例如,要固定torch.randn(1, 3, 224, 224),否则 runtime 会报Input tensor shape mismatch) - 导出 ONNX 更通用,但需要确认 opset 版本(Triton 24.06 推荐用
opset_version=17),且避免使用torch.nonzero这类动态 shape 操作,否则 ONNX Runtime 推理正常、Triton 加载时报Unsupported node kind: NonZero - 一定要在导出后使用
torch.jit.load或onnxruntime.InferenceSession本地验证输出一致,不要等到部署 Triton 才发现 logits 差了 1e-3
Triton 不承认模型文件名称,只承认目录结构和 config.pbtxt。一般的翻车点是:模型可以加载,但是 infer 时返回 INVALID_ARG: input 'input__0' is not found —— 其实是 config 里 name 和实际 tensor name 对不上。
- 标准结构必须是:
model_repository/<model_name>/<version>/model.pt(或model.onnx),<version>它必须是纯数字目录,如1,不能是v1或latest -
config.pbtxt中platform填"pytorch_libtorch"(.pt)或"onnxruntime_onnx"(.onnx);max_batch_size设为 0 表示禁用 batching,设为 8 表示最大合批 8 条,但 client 端也得发batch_size=8请求,否则可能会被截断 - 输入输出
name当模型必须导出时 tensor name 严格一致(trace 模型可用model.graph.inputs()[0].debugName()查),shape 写[ -1, 3, 224, 224 ]表示动态 batch,但第一个维度必须是-1,写成[ 1, 3, 224, 224 ]就无法 batch
用 tritonclient.http 发请求,看似简单,但看似简单 np.array 错误类型的字节会触发 INVALID_ARG: unexpected datatype 或无声结果异常。
Python 3.14.2
Python 3.14.2是Python编程语言于2025年12月5日发布的稳定版本,属于3.14系列的第二次维护更新。该版本包含18个修复项目,重点解决多过程、数据和正则表达模块的回归问题,修复CVE-2025-12084等安全漏洞。这个版本标志着Python发展的一个重要里程碑,即自由线程模式(删除GIL)正式得到官方支持。
下载立即学习“Python免费学习笔记(深入);
- 必须使用输入数据
np.float32(即使模型是 float16),Triton 默认不自动 cast;假如模型真的想要 fp16,config 里得加dynamic_batching { max_queue_delay_microseconds: 100 }并在 client 显式指定dtype=np.float16,否则 server 会拒绝 - 特别注意图像模型的内存顺序:Triton 默认按 C-order 解析 buffer,如果你用 OpenCV 读图(BGR, HWC),又没 transpose 成 CHW,再没 reshape 成
(1, 3, 224, 224),喂的是错位像素 - 用
tritonclient.utils.serialize_byte_tensor处理 string 输入(如 tokenized text),别直接传 Python list,否则报invalid argument: unable to serialize string tensor
真正卡住性能的往往不是 GPU 相反,利用率 client 侧并发控制太松(连接池打满)、server 侧 instance_group 配太少(默认只起 1 个 model instance),或者 config 里漏写了 dynamic_batching —— 不管模型有多快,这些细节都是无用的。