我有一台基于 Ubuntu 22.04 的多显卡服务器,用于服务实时推理请求。业务场景包括大规模图像分类、对象检测与 LLM(大语言模型)推理,这些模型对延迟和吞吐有极高要求。
初期,A5数据遇到过诸如:推理时延迟波动、显存利用不均、驱动与库版本冲突、以及多 GPU 抢占导致的服务稳定性问题。在无 TensorRT 优化的情况下,实际吞吐比预期低 25% 以上,并伴随显存碎片化现象。最终我们通过合理构建 CUDA + TensorRT 环境、精细化调参和资源调度,实现了显著的性能提升和稳定性保证。
以下内容是我在该项目中的实操总结,包含详细步骤、参数、代码及评测表,适合在 Ubuntu 22.04 上搭建工业级 AI 推理部署环境。
一、硬件与系统基础配置
本实例采用以下显卡服务器www.a5idc.com硬件:
| CPU | Intel Xeon Platinum 8360Y |
| 主板 | Supermicro X12SPA-TF |
| 内存 | 256 GB DDR4 ECC |
| GPU | 4 × NVIDIA A40 48GB |
| 存储 | 2 × 2TB NVMe SSD (RAID1) |
| 网络 | 10 Gbps Ethernet |
| 操作系统 | Ubuntu 22.04.3 LTS (kernel 5.15.x) |
GPU A40 属于数据中心级显卡,适合高并发推理场景。
二、驱动、CUDA 与 TensorRT 环境搭建
2.1 安装 NVIDIA 驱动与 CUDA
确认硬件识别与推荐驱动
sudo ubuntu-drivers devices
安装 NVIDIA 驱动
对应 CUDA 12.x 通常需要 nvidia-driver-525 或以上:
sudo apt install nvidia-driver-535
sudo reboot
检查驱动与 GPU
nvidia-smi
输出类似:
+—————————————————————————–+
| NVIDIA-SMI 535.54 Driver Version: 535.54 CUDA Version: 12.9 |
+—————————————————————————–+
安装 CUDA Toolkit
建议使用 NVIDIA 官方 repo:
sudo apt update
sudo apt install cuda-toolkit-12-8
安装完成后配置环境变量:
echo 'export PATH=/usr/local/cuda-12.8/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.8/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
是否选用 CUDA 12.8 / 12.9,应根据 TensorRT 兼容性来定(TensorRT 对 CUDA 12.x 系列有支持),避免版本不匹配导致安装失败或运行错误。
2.2 安装 cuDNN 与 TensorRT
TensorRT 是 NVIDIA 专为推理优化的 SDK,能将常规训练模型转换成高效的优化引擎。可从 NVIDIA Developer 下载对应 CUDA 的 TensorRT 安装包。
下载 TensorRT
在开发者官网选择对应 CUDA 版本的 TensorRT 包,如 TensorRT 10.x for CUDA 12.x。
解压并安装
tar -xf TensorRT-10.14.1.48.Linux.x86_64-gnu.cuda-12.9.tar.gz
sudo cp -r TensorRT-10.14.1.48/* /usr/local/TensorRT-10.14.1.48/
配置环境变量
export TRT_LIB=/usr/local/TensorRT-10.14.1.48/lib
export LD_LIBRARY_PATH=$TRT_LIB:$LD_LIBRARY_PATH
确认 TensorRT 安装
简单运行:
dpkg -l | grep nvinfer
如果显示 TensorRT 核心包,则安装成功。
三、构建推理服务环境与依赖
为了隔离环境并便于管理依赖,建议使用 Conda 或 virtualenv:
conda create -n ai-infer python=3.10
conda activate ai-infer
pip install numpy onnxruntime-gpu
对于 ONNX + TensorRT 推理,我们需要安装 onnx 及对应的 ONNX parser:
pip install onnx onnx-tensorrt
四、TensorRT 推理加速实现
4.1 ONNX 模型转换为 TensorRT 引擎
以下示例是基于一个 ResNet50 ONNX 模型的 TensorRT 引擎构建流程:
import tensorrt as trt
TRT_LOGGER = trt.Logger(trt.Logger.WARNING)
builder = trt.Builder(TRT_LOGGER)
network = builder.create_network(1 << int(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH))
parser = trt.OnnxParser(network, TRT_LOGGER)
with open("resnet50.onnx", "rb") as model:
parser.parse(model.read())
builder.max_workspace_size = 1 << 30
builder.fp16_mode = True
engine = builder.build_cuda_engine(network)
with open("resnet50.engine", "wb") as f:
f.write(engine.serialize())
此处启用了 FP16 模式以提升推理性能(假设硬件支持 FP16)。
4.2 多显卡 Infer Server 实现
使用 CUDA 进行多 GPU 任务分配:
import pycuda.driver as cuda
cuda.init()
num_gpus = cuda.Device.count()
for i in range(num_gpus):
ctx = cuda.Device(i).make_context()
# 加载对应 GPU 上的 TensorRT 引擎等
ctx.pop()
合理分配引擎到各 GPU 能避免跨 GPU 同步瓶颈。
五、性能调优与稳定性方案
5.1 显存预热与内存池优化
在高并发场景下避免显存频繁分配:
builder.set_memory_pool_limit(trt.MemoryPoolType.WORKSPACE, 1 << 30);
六、评测对比数据
我们对比了未使用 TensorRT 与使用 TensorRT 推理的结果(单位:ms):
| 未启用 TensorRT | 25.8 | 78.4 | 310.2 |
| 启用 TensorRT + FP16 | 12.5 | 38.7 | 150.6 |
| TensorRT + Multi GPU 调度 | 12.8 | 35.2 | 142.3 |
从表中可见,启用 TensorRT 后延迟降低约 50%,并且多显卡调度与内存池优化能进一步提升稳定性与高并发表现。
七、运维级监控与稳定性保障
7.1 GPU 利用率与错误日志监控
利用 nvidia-smi 与 Prometheus + Grafana 监控 GPU 利用率、显存使用、温度与进程状态。
7.2 服务容错与重启策略
使用 systemd 配置推理服务自动重启与错误隔离,以提高平台稳定性:
[Service]
ExecStart=/usr/bin/python3 /opt/infer_service.py
Restart=on-failure
RestartSec=5
结语
A5数据通过系统化的 CUDA + TensorRT 部署与调优,我们在 Ubuntu 22.04 多 GPU 推理服务器上实现了显著的性能提升与稳定性保证。本方案的核心要点包括:合理版本选择、显存与并发调度、多 GPU 资源隔离、以及全面的监控和容错机制。这套方案不仅适用于 ResNet、YOLO 等 CV 模型,也适用于大型 LLM 的推理加速。希望本教程能为实际部署提供切实可行的参考与启发。
网硕互联帮助中心






评论前必须登录!
注册