2. 基础知识

在动手搭建AI训练推理集群之前,必须先厘清一组基础概念:集群中的计算单元是什么、它们如何协同工作、推理与训练在工程上的差异,以及当前主流的硬件与软件生态。只有把这些概念映射到具体的物理设备和软件框架上,后续的部署操作才有依据。

2.1 核心计算单元:GPU、TPU 与加速器

AI集群的算力底座是各类加速器。虽然CPU也能运行AI模型,但面对大规模矩阵运算时效率极低。当前主流加速器分为三类:

  • GPU(图形处理器):由数千个CUDA核心(NVIDIA)或流处理器(AMD)组成,采用SIMT(单指令多线程)架构,特别适合并行矩阵乘法与卷积运算。NVIDIA数据中心GPU(如A100、H100、H200)通过NVLink与NVSwitch实现卡间高速互联,是当前AI集群最普遍的选择。
  • TPU(张量处理器):Google自研的ASIC芯片,专为TensorFlow/PyTorch的张量操作设计。TPU v4/v5通过ICI(Inter-Chip Interconnect)光互联组成Pod,单Pod算力可达ExaFlops级。TPU仅通过云服务提供,无法本地采购。
  • 其他加速器:包括AWS Trainium/Inferentia、华为昇腾910B、寒武纪思元590等。这些芯片在特定生态(如昇腾CANN、寒武纪Neuware)下性能优异,但通用性不如CUDA生态。
选型判断:若追求生态成熟度与调试便利性,NVIDIA GPU是首选;若预算受限且模型以自研架构为主,可考虑国产加速器;若完全使用Google Cloud且模型基于JAX/TensorFlow,TPU是性价比之选。

2.2 分布式训练与推理引擎

单卡显存有限(如H100为80GB),无法容纳大模型参数与中间激活值。分布式训练将模型切分到多卡/多节点上协同计算。根据并行策略,可分为:

并行策略 切分维度 典型场景 通信开销
数据并行(DP) 训练数据按batch切分 模型可放入单卡显存 梯度同步(AllReduce)
张量并行(TP) 权重矩阵按行/列切分 单层参数超过单卡显存 每层前向/反向各一次AllReduce
流水线并行(PP) 网络层按阶段切分 模型层数极深(如GPT-4) 仅阶段边界传输激活值
序列并行(SP) 序列长度维度切分 长序列输入(如文档级NLP) Ring Attention通信

实际训练中通常采用混合并行(如3D并行:DP+TP+PP)。而推理引擎则聚焦于模型部署阶段的优化,与训练框架不同,推理引擎更关注低延迟、高吞吐与显存效率。主流推理引擎包括:

  • vLLM:采用PagedAttention管理KV Cache,通过Continuous Batching提高吞吐,适合在线LLM服务。
  • TensorRT-LLM:NVIDIA官方推理引擎,支持FP8/INT4量化、In-Flight Batching,与CUDA深度绑定。
  • DeepSpeed-Inference:提供自动张量并行与内核融合,适合与DeepSpeed训练无缝衔接。
  • ONNX Runtime:跨平台通用推理引擎,适合CPU/GPU混合部署。
# 典型训练框架与推理引擎对应关系
训练阶段: PyTorch + DeepSpeed/FSDP → 产出模型权重
转换阶段: 权重转换脚本 → 导出为ONNX或TensorRT引擎
推理阶段: vLLM/TensorRT-LLM → 加载引擎文件 → 提供OpenAI兼容API

2.3 主流软件栈全景

AI集群软件栈自底向上分为五层,理解各层职责是排障的基础。下图展示了从硬件到应用层的完整栈结构:

AI训练推理集群软件栈全景 L1 硬件层 NVIDIA GPU (A100/H100) · 国产加速器 (昇腾/寒武纪) · InfiniBand/RoCE网卡 · NVMe存储阵列 L2 驱动与固件层 NVIDIA Driver · CUDA Toolkit (nvcc, cuBLAS, cuDNN) · HPCX (集合通信库) · NPU驱动 (CANN) L3 容器与运行时层 Docker + NVIDIA Container Toolkit · Kubernetes (K8s) + Device Plugin · Singularity/Apptainer (HPC场景) L4 分布式训练/推理框架层 PyTorch + Distributed (NCCL/GLOO) · DeepSpeed · Megatron-LM · vLLM · TensorRT-LLM · Ray L5 应用与调度层 Slurm (作业调度) · KubeFlow · MLflow (实验管理) · 模型服务网关 (Triton/KServe) · 监控 (Prometheus+Grafana) 硬件抽象 资源虚拟化 分布式通信 模型并行策略 业务编排 ⚠ 关键点: NCCL版本必须与CUDA及网卡驱动严格兼容;容器运行时需暴露/dev/nvidia*设备;Slurm与K8s的GPU调度方式不同。

软件栈各层之间存在严格的依赖关系。例如,NCCL(NVIDIA Collective Communications Library)依赖CUDA运行时与驱动版本;vLLM要求CUDA≥11.8且GPU架构≥Ampere。部署集群时,建议使用NVIDIA官方提供的PyTorch容器镜像(如nvcr.io/nvidia/pytorch:24.01-py3),该镜像已预装匹配的CUDA、cuDNN、NCCL与常用框架,避免版本地狱。

2.4 案例:8卡A100集群的典型配置

以一个标准的单节点8卡A100(80GB)训练服务器为例,其软硬件配置如下:

硬件:
- 8 × NVIDIA A100 80GB PCIe (NVLink桥接为4对)
- 2 × Intel Xeon 8380 CPU (80核)
- 1TB DDR5 ECC内存
- 2 × 3.84TB NVMe SSD (RAID1,存数据集)
- 1 × ConnectX-6 HDR InfiniBand网卡 (200Gb/s)

软件:
- Ubuntu 22.04 LTS (内核5.15)
- NVIDIA Driver 535.104.05
- CUDA 12.2 (nvcc --version)
- cuDNN 8.9.4
- NCCL 2.19.3
- Python 3.10 + PyTorch 2.1.0
- DeepSpeed 0.12.0

验证集群通信是否正常,可使用以下命令:

# 检查GPU可见性
nvidia-smi -L
# 输出应列出8个GPU的UUID

# 测试NCCL通信(需在容器内)
python -c "import torch; torch.distributed.init_process_group('nccl', init_method='tcp://127.0.0.1:23456', world_size=8, rank=0); print('NCCL OK')"

# 检查NVLink拓扑
nvidia-smi topo -m

2.5 常见误区与复盘

误区1:混淆“训练框架”与“推理引擎”。PyTorch训练出的模型不能直接用于生产推理。训练框架关注反向传播与梯度更新,推理引擎关注算子融合与KV Cache管理。正确流程是:训练 → 导出(TorchScript/ONNX) → 编译优化(TensorRT) → 部署。
误区2:忽略NCCL版本兼容性。NCCL与CUDA小版本不匹配会导致AllReduce挂起或性能骤降。例如NCCL 2.18要求CUDA≥12.1。排查时使用nccl-tests工具验证带宽:all_reduce_perf -b 128M -e 8G -f 2,若带宽低于理论值50%,需检查网卡模式(IB vs RoCE)与路由设置。
复盘要点:在规划集群时,先画出软件栈依赖树,标注每个组件的版本号。建议使用容器化方案(Docker+K8s)锁定环境,避免因驱动升级导致集群不可用。对于多节点集群,务必提前规划IP地址、主机名映射与SSH免密登录,这些基础操作往往比模型调参更影响部署效率。

理解上述概念后,下一步即可进入实际环境准备:包括操作系统优化、GPU驱动安装、容器运行时配置与分布式通信验证。这些操作将直接建立在本文所述的软硬件栈之上。