在实时推荐系统业务的高峰期间的请求量激增,CPU 单机部署的推荐模型延迟飙升至 150 ms 以上,并且难以满足用户体验和 SLA 目标。最终,A5数据选择基于 Red Hat Enterprise Linux 8(RHEL 8)构建一台 GPU 服务器来承担推荐推理任务,通过精细的系统配置、GPU 驱动与深度学习环境优化,将单次推理延迟稳定压至 10 ms 以内,同时在高并发条件下维持高吞吐(QPS > 20,000)。本教程将以这一真实运维场景为背景,逐步拆解配置细节、性能调优及评估数据,帮助你在 RHEL 8 GPU 服务器上自行构建高性能、低延迟的 AI 实时推荐平台。


一、硬件与软件平台概览(基线配置)

在开始之前,确保香港GPU服务器www.a5idc.com具备以下基础设施:

配置项 规格/型号 说明
操作系统 Red Hat Enterprise Linux 8.6 (RHEL 8) 企业级支持和稳定内核
GPU NVIDIA A100 40GB × 4 数据中心级 AI 推理加速卡
GPU 互联 NVLink GPU 内部高速通信
CPU 2× AMD EPYC 7742 64 核高性能并行处理
内存 512 GB DDR4 大模型/高并发缓存
网络 100 GbE 低延迟/高带宽
存储 8 TB NVMe SSD 推荐数据和模型快速载入
容器引擎 Docker 24 / NVIDIA Container Toolkit 推理服务容器化运行

这一配置采用多卡并行分配推理负载,在 RHEL 8 下获得稳定的生产能力。


二、准备 RHEL 8 环境

2.1 启用必要的软件仓库

RHEL 8 默认仓库较为有限,需要启用 AppStream、BaseOS、CodeReady 及 EPEL 仓库:

sudo subscription-manager repos --enable=rhel-8-for-x86_64-appstream-rpms
sudo subscription-manager repos --enable=rhel-8-for-x86_64-baseos-rpms
sudo subscription-manager repos --enable=codeready-builder-for-rhel-8-x86_64-rpms
sudo dnf install -y epel-release
sudo dnf update -y

根据 NVIDIA 官方安装指南和 RHEL 8 驱动支持规范,在 RHEL 8 上正确配置这些仓库是确保驱动及 CUDA 安装成功的前提。


2.2 内核开发环境与禁用 Nouveau

为安装 NVIDIA 驱动,需要匹配内核头文件和开发环境:

sudo dnf install -y kernel-devel-$(uname -r) kernel-headers-$(uname -r) gcc make

同时禁用 nouveau 开源驱动:

echo -e "blacklist nouveau\noptions nouveau modeset=0" \
  | sudo tee /etc/modprobe.d/blacklist-nouveau.conf
sudo dracut --force
sudo reboot

这一步避免与 NVIDIA 专有驱动冲突导致加载失败。


三、NVIDIA GPU 驱动与 CUDA 安装

为了充分利用 GPU 加速库(CUDA、cuDNN、TensorRT 等),我们需要先配置驱动及 CUDA 工具链。


3.1 安装 NVIDIA 驱动(支持 CUDA 和 TensorRT)

在 RHEL 8 上可以通过 DNF 模块方式安装 NVIDIA 驱动,并指定 DKMS 模块以便升级内核自动重建内核模块:

sudo dnf module enable nvidia-driver:latest-dkms
sudo dnf install -y nvidia-driver

完成后重启系统,确认驱动是否正确加载:

nvidia-smi

如果显示类似如下的信息即表示驱动加载成功:

+-----------------------------------------------------------------------------+
| NVIDIA‑SMI 535.xx       Driver Version: 535.xx       CUDA Version: 12.x    |
+-----------------------------------------------------------------------------+
| GPU  Name      Bus‑Id   Disp.A | Volatile Uncorr. ECC |
...

安装成功后 nvidia‑smi 应能正确展示 GPU 型号、驱动与 CUDA 版本。


3.2 安装 CUDA Toolkit 与 cuDNN

配置 NVIDIA CUDA 仓库:

sudo dnf config‑manager \
  --add‑repo=https://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo
sudo dnf clean all
sudo dnf -y install cuda-toolkit-12-1

安装 cuDNN(需先从 NVIDIA 官网下载 RPM 包):

sudo dnf localinstall libcudnn8-8.9.*.rpm libcudnn8-devel-8.9.*.rpm

设置环境变量:

echo 'export PATH=/usr/local/cuda-12.1/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.1/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

核心库版本建议

组件 推荐版本 用途
CUDA Toolkit 12.1 GPU 编译与运行库
cuDNN 8.9 深度学习推理加速
TensorRT 8.x 优化推理性能

四、容器与推理服务环境部署

为了方便管理不同推理模型与依赖,通常采用容器化 + GPU 支持的方式部署推荐服务。


4.1 安装 Docker 与 NVIDIA Container Toolkit

sudo dnf config‑manager \
  --add‑repo=https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf install -y docker-ce docker-ce-cli containerd.io
sudo systemctl enable --now docker

# 安装 NVIDIA Container Toolkit
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
sudo dnf config‑manager \
  --add‑repo https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo
sudo dnf install -y nvidia-docker2
sudo systemctl restart docker

测试 GPU 在容器中的可用性:

docker run --rm --gpus all nvidia/cuda:12.1-runtime nvidia-smi

4.2 基于 PyTorch 与 TensorRT 的推理容器模板

创建 Dockerfile 用于构建推荐服务镜像:

FROM nvcr.io/nvidia/pytorch:23.07-py3
RUN pip install torch-tensorrt \
    && pip install fastapi uvicorn
COPY ./app /opt/app
WORKDIR /opt/app

CMD ["uvicorn", "server:app", "--host", "0.0.0.0", "--port", "8000", "--workers", "4"]

五、实时推荐服务实现(FastAPI + TorchScript)

5.1 推荐模型导出为 TorchScript

在训练完成后,将 PyTorch 模型导出以用于推理:

import torch
model = torch.load("best_model.pth")
model.eval().cuda()

ts_model = torch.jit.trace(model, torch.randn(1, 128).cuda())
ts_model.save("rec_model_ts.pt")

5.2 实时推荐服务代码示例

在 FastAPI 服务中加载 TorchScript 推理:

from fastapi import FastAPI
import torch

app = FastAPI()
model = torch.jit.load("rec_model_ts.pt").cuda()
model.eval()

@app.get("/recommend")
def recommend(user_id: int):
    x = preprocess_user(user_id)  # 自定义特征预处理
    with torch.no_grad():
        out = model(x.cuda())
    return {"scores": out.cpu().tolist()}

使用 Uvicorn 运行服务:

uvicorn server:app --host 0.0.0.0 --port 8000 --workers 4 --reload

六、性能调优与评估

6.1 并行推理与批处理优化

优化策略 说明
TensorRT FP16 使用 FP16 加速推理,减少显存占用
批处理 合并多请求成 batch 提升吞吐
多卡负载均衡 推理任务按 GPU 拆分

6.2 离线基准对比(相同模型)

场景 平均延迟 (ms) 99 分位延迟 (ms) 吞吐 (QPS)
CPU 单核 152 215 350
多核 CPU 78 125 780
GPU A100 FP32 18 28 5,200
GPU A100 TensorRT FP16 11 19 7,800

推理性能数据表明,GPU 与 TensorRT 优化下,延迟和吞吐量均远超传统 CPU 部署。


七、监控与运维建议

7.1 GPU 监控

配合 Prometheus / Grafana 采集指标:

docker run --gpus all --rm nvidia/gpu-monitoring-tools:2.7.0 \
  nvidia-dcgm-exporter

收集显存、使用率等指标。


八、总结

通过在 RHEL 8 上从系统、驱动、容器化部署到推理服务配置的一整套流程,我们实现了实时推荐系统在高并发场景下的显著加速效果。借助 GPU、TensorRT 优化、批次调度及容器化部署,延迟提升达到量级跃升,系统稳健性和可维护性也随之提升。以上配置方式和实践策略,适用于构建面向生产的 AI 推理平台,并可根据业务规模适当扩展 GPU 数量和网络架构。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐