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)'
model_repo/resnet50/model.plan 不会被识别。config.pbtxt 的输入维度不包含 batch;max_batch_size 为 0 表示不支持批处理。--load-model 就不会加载任何模型;配合 --strict-readiness 让故障实例退出流量。instance_group.count 每个实例都占一份模型显存;实例翻倍可能直接 OOM。max_queue_delay_microseconds 太大伤 P99;按延迟目标压测。/v2/health/ready,并给大模型留足 startupProbe 时间。合上页面,先回答,再展开对照。
--strict-readiness 解决什么问题?latest。非数字目录名会被忽略,表现为模型不存在。nv_inference_queue_duration_us 和请求延迟分位数:队列时间上升说明批次等待过久,计算时间上升则要加实例或换更快的后端。