
继上一篇《部署在香港服务器上的AI推理服务宕机:容器资源竞争与NVIDIA驱动冲突排查》发布后,许多工程师反馈希望进一步了解推理服务的部署配置模板、监控脚本设计与容器化部署实践。本文基于真实项目环境,记录了我们在部署 NVIDIA Triton 推理服务过程中所使用的配置方案与监控体系构建细节,具有较强实操性与可复用性,适用于大多数使用 GPU 进行深度学习推理的企业或研发团队。
部署环境说明
- 数据中心位置:香港A5数据机房
- 服务器型号:Supermicro SYS-420GP-TNAR+
- CPU:2 × Intel Xeon Gold 6338 (32-core)
- 内存:512GB DDR4 ECC
- GPU:2 × NVIDIA A100 40GB PCIe
- 操作系统:Ubuntu 22.04 LTS
- 内核版本:5.15.0-91-generic
- Docker:24.0.7
- Kubernetes:v1.28.3
- NVIDIA Driver:525.147.05
- CUDA:12.1
- 容器运行时:containerd + NVIDIA container toolkit
容器部署配置模板(以Triton为例)
1. Pod YAML模板(GPU资源限定 + 显式模型加载)
apiVersion: apps/v1
kind: Deployment
metadata:
name: triton-inference
namespace: ai-inference
spec:
replicas: 1
selector:
matchLabels:
app: triton-inference
template:
metadata:
labels:
app: triton-inference
spec:
runtimeClassName: nvidia
containers:
- name: triton-server
image: nvcr.io/nvidia/tritonserver:23.08-py3
args: [
"tritonserver",
"--model-repository=/models",
"--model-control-mode=explicit"
]
ports:
- containerPort: 8000 # HTTP
- containerPort: 8001 # gRPC
- containerPort: 8002 # Metrics
resources:
limits:
nvidia.com/gpu: 1
memory: "10Gi"
cpu: "6"
requests:
memory: "8Gi"
cpu: "4"
volumeMounts:
- name: model-repo
mountPath: /models
volumes:
- name: model-repo
persistentVolumeClaim:
claimName: triton-models-pvc
2. Persistent Volume(PVC)配置
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: triton-models-pvc
namespace: ai-inference
spec:
accessModes:
- ReadOnlyMany
resources:
requests:
storage: 100Gi
storageClassName: nfs-client
3. GPU Plugin 安装(DaemonSet)
使用 NVIDIA 提供的 device plugin:
kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.13.0/nvidia-device-plugin.yml
模型控制与管理接口
启用 explicit model control mode 后,使用如下 API 控制模型加载:
加载模型
curl -X POST localhost:8000/v2/repository/models/resnet50/load
卸载模型
curl -X POST localhost:8000/v2/repository/models/resnet50/unload
模型配置模板(config.pbtxt)
name: "resnet50"
platform: "onnxruntime_onnx"
max_batch_size: 16
input [
{
name: "input_tensor"
data_type: TYPE_FP32
dims: [3, 224, 224]
}
]
output [
{
name: "output_tensor"
data_type: TYPE_FP32
dims: [1000]
}
]
instance_group [
{
count: 1
kind: KIND_GPU
gpus: [0]
}
]
dynamic_batching {
max_queue_delay_microseconds: 100
preferred_batch_size: [4, 8, 16]
}
Prometheus + Grafana 监控集成
1. Triton Metrics 暴露端口
Triton 默认在 8002 端口暴露 Prometheus 格式的指标数据:
curl localhost:8002/metrics
包含如下关键指标:
- nv_inference_request_success
- nv_inference_compute_infer_duration_us
- nv_gpu_utilization
- nv_memory_used_bytes
2. Prometheus配置片段
- job_name: 'triton-inference'
static_configs:
- targets: ['triton-inference.ai-inference.svc.cluster.local:8002']
3. Grafana Dashboard建议模块
- GPU利用率趋势(来自 DCGM Exporter)
- 每秒推理请求数
- 各模型加载状态与推理耗时
- GPU显存占用图表
容器日志与诊断脚本样例
1. 获取容器日志
kubectl logs -n ai-inference deploy/triton-inference
建议结合如下命令快速排查推理失败:
kubectl logs -n ai-inference deploy/triton-inference | grep -i "error"
2. GPU监控脚本
#!/bin/bash
while true; do
echo "Timestamp: $(date)"
nvidia-smi --query-gpu=index,name,utilization.gpu,memory.used,memory.total --format=csv,noheader,nounits
echo "------------------------"
sleep 5
done
实践建议
- 避免容器并发加载多个大模型:建议按需动态加载,结合调用频率优化加载优先级。
- 分离模型仓库与运行容器:模型托管在NFS或S3,可独立更新,不影响容器运行。
- 显式绑定GPU资源:避免资源争抢,保障关键模型服务稳定运行。
- 结合Node Affinity部署GPU Pod:避免GPU node被误调度其他业务。
- 定期校验驱动版本与内核兼容性:建议在上线前建立Driver Compatibility Matrix。
通过本文提供的部署模板、资源配置、模型管理方法和监控脚本,AI推理服务可以实现更高的稳定性与可维护性。实践证明,在生产环境中,良好的资源隔离、动态模型管理和GPU调度策略是避免服务宕机的关键。希望本实录能帮助更多团队构建可持续运行的高性能推理服务平台。











