triton-inference-server

NVIDIA Triton 生产运维:显式模型控制、版本、批处理与压测。

补充说明

Triton Inference Server 支持 TensorRT、ONNX、PyTorch、Python 等多种后端,通过 HTTP/gRPC 暴露统一推理接口。生产运维重点是模型仓库布局、显式加载、实例数、动态批处理和指标。

基础用法见 triton;本页聚焦多模型、版本和容量管理。

安装与启动

docker run --gpus all --rm -p 8000:8000 -p 8001:8001 -p 8002:8002 \
  -v "$PWD/model_repo:/models" \
  nvcr.io/nvidia/tritonserver:"$TRITON_VERSION" \
  tritonserver --model-repository=/models \
    --model-control-mode=explicit --load-model=resnet50 \
    --strict-readiness=true

版本标签按官方发布选择,不要用 latest;TensorRT 后端版本要与构建 plan 时一致。

常用示例

模型仓库按 <model>/<数字版本>/model.plan 组织:

mkdir -p model_repo/resnet50/1
cp resnet50.plan model_repo/resnet50/1/model.plan

cat > model_repo/resnet50/config.pbtxt <<'EOF'
name: "resnet50"
platform: "tensorrt_plan"
max_batch_size: 8
input [{ name: "input" data_type: TYPE_FP32 dims: [3, 224, 224] }]
output [{ name: "output" data_type: TYPE_FP32 dims: [1000] }]
instance_group [{ kind: KIND_GPU count: 2 }]
dynamic_batching {
  preferred_batch_size: [4, 8]
  max_queue_delay_microseconds: 2000
}
EOF

健康检查与模型状态:

curl -s localhost:8000/v2/health/ready
curl -s localhost:8000/v2/models/resnet50/ready
curl -s localhost:8000/v2/repository/index

显式加载、卸载和查询统计:

curl -X POST localhost:8000/v2/repository/models/resnet50/load
curl -X POST localhost:8000/v2/repository/models/resnet50/unload

用 perf_analyzer 找并发拐点:

perf_analyzer -m resnet50 -i grpc -u localhost:8001 \
  --concurrency-range 1:32 --input-data zero

查看队列、计算和成功请求指标:

curl -s localhost:8002/metrics \
  | grep -E 'nv_inference_(request_success|queue_duration|compute_infer)'

易错点与排错

读完自测

合上页面,先回答,再展开对照。

  1. 为什么模型目录里的版本号必须是数字?
  2. --strict-readiness 解决什么问题?
  3. 动态批处理调优看哪两个指标?
答案
  1. Triton 用数字目录表示模型版本并据此排序和选择 latest。非数字目录名会被忽略,表现为模型不存在。
  2. 默认 readiness 只反映服务器进程状态,模型加载失败也可能返回 200。开启后只要有模型未就绪就返回 503,Kubernetes 不会把流量转入坏实例。
  3. 看 nv_inference_queue_duration_us 和请求延迟分位数:队列时间上升说明批次等待过久,计算时间上升则要加实例或换更快的后端。

相关条目