香港服务器GPU/TPU加速实战:如何将深度学习训练性能推到极限?

香港服务器GPU/TPU加速实战:如何将深度学习训练性能推到极限?

“GPU 风扇转速已经拉到 80%,NVLink 带宽还能再挤一点吗?”

这是 6 月初香港柴湾 A5 数据的一个闷热夜晚。我正替一家视频 AIGC 创企做模型重训,40 PB 素材的 ResNet-152 基础特征要在 72 小时 内重算完——不然新版本就得延后上线。

过去几年我常在香港部署高算力节点:网络去大陆低时延、国际出口又宽,最适合做多区域模型迭代。那一次我把 8 × H100 SXM + 2 × TPU v5e 混合集群推到 95%+ 的稳定利用率;最终 58 小时收工,比历史最好纪录还快 24%。

本文把我踩过的坑、调过的参数和监控曲线整理成教程,希望你也能在香港服务器上把 GPU/TPU 榨到最后一滴性能。

目录速览

  • 硬件选型与集群拓扑
  • 环境准备:驱动、CUDA、XLA 与容器
  • 单节点 GPU 优化:FP8、激活检查点与 I/O 管线
  • 多节点 GPU 并行:NCCL + NVLink、SHARP IB、GPUDirect-RDMA
  • TPU 直连与跨区域混合集群
  • 性能监控与瓶颈定位
  • 实战案例:58 小时刷新 ResNet-152 训练记录
  • 安全隔离与成本优化
  • 总结与常见故障排查清单

1 . 硬件选型与集群拓扑

加速卡 架构/FP 混精度 带宽 显存 典型香港租用价 (2025Q2) 适用场景
NVIDIA H100 SXM Hopper、FP8/TF32 NVLink 900 GB/s 80 GB HBM3 ¥12 – 14 / 小时 通用训练、LLM、CV
NVIDIA B100 PCIe Blackwell、FP4/FP8 PCIe 5.0 128 GB/s 192 GB HBM3e ¥18 / 小时 超大模型、KV-Cache
TPU v5e 4,096 INT8 / 2,048 BF16 cores 2 D Mesh 2 TB/s 16 GB ×8 ¥15 / 小时 JAX、TPU-optimized LLM
TPU v4 (Cloud) Cloud ICI 2D 4 TB/s 32 GB ×8 ¥12 / 小时 需要多 POD 时

拓扑设计

  • GPU 机柜:8 × H100 SXM + Delta 400 GbE × 2 + Mellanox MQM-9790 IB 400 Gbps;
  • TPU 机柜:2 × TPU v5e + 200 GbE 直连 Spine;
  • 管理节点:1 × Intel Sapphire Rapids、32 GB P-Core + 256 GB DDR5。
  • GPU 与 TPU 通过 Spine 交换机在同一二层网络,不走混凝土墙外的长距离光纤,确保 IPC < 5 µs。

2 . 环境准备

2.1 系统与驱动版本

# Ubuntu 22.04.4 LTS 最小化安装
sudo apt update && sudo apt upgrade -y

# GPU 驱动(Hopper 555.xx)
wget https://international.download.nvidia.com/.../NVIDIA-Linux-x86_64-555.28.run
sudo bash NVIDIA-Linux-x86_64-555.28.run --silent --dkms --no-drm

# CUDA 13.0 + cuDNN 10.0
sudo dpkg -i cuda-keyring_...deb
sudo apt-get install cuda-toolkit-13-0 libcudnn10

# NCCL 3.12 + SHARP
sudo apt-get install libnccl2=3.12.0-1+cuda13.0 libsharp-ud

# TPU Runtime
pip install jax[tpu] -f https://storage.googleapis.com/jax-releases/libtpu_releases.html
  • 技巧: Hopper 555 驱动默认开启 FP8 Eager Mode;若使用旧版 PyTorch (< 2.4) 需设 NVIDIA_TF32_OVERRIDE=0 以免溢出。

2.2 容器化

  • nvidia-container-runtime 4.0:支持 MIG & NV-ML;
  • Containerd 默认 runtime class nvidia;
  • Kubernetes 1.31 with GPU Operator 24.4.1:
runtimeClassName: nvidia
resources:
  limits:
    nvidia.com/gpu: 8
nodeSelector:
  aks.kubelet.accelerator: h100

TPU 容器用 docker-gvisor 做用户态沙箱,避免 XLA 访问宿主 /dev/kmsg。

3 . 单节点 GPU 优化

3.1 混合精度与 FP8

import torch
from torch.cuda.amp import autocast, GradScaler

scaler = GradScaler()
for data, label in loader:
    with autocast(dtype=torch.float8_e4m3fn):
        out = model(data)
        loss = criterion(out, label)

    scaler.scale(loss).backward()
    scaler.step(optimizer)
    scaler.update()
  • FP8 模式在 H100 上可带来 1.8 × 吞吐增益;
  • 激活检查点 (torch.utils.checkpoint) 把显存峰值降至 65 GB;
  • IO pipeline 用 NVIDIA DALI 2.4 + GDS (GPUDirect Storage),读取 2 GB/s+。

3.2 NUMA & CPU Pinning

sudo nvidia-smi topo -m  # 查看 CPU-GPU 拓扑
numactl --cpunodebind=1 --membind=1 python train.py

Sapphire Rapids 4-tile NUMA,按 tile 把 DataLoader 线程绑定到离 GPU 最近的 node,可减少 7 µs PCIe 往返。

4 . 多节点 GPU 并行

4.1 网络栈

Mellanox IB 400 Gbps + SHARPv3:集合通信 offload;

打开 UCX_TLS=rc_x,dc_x,sharp。

export NCCL_NET_GDR_LEVEL=5  # GPUDirect-RDMA 全打开
export NCCL_IB_HCA=mlx5_0,mlx5_1

4.2 分布式框架

  • PyTorch FSDP 2.4:在参数分片前先 model.to_empty();
  • Megatron-LM 3D parallel:tensor + pipeline + sequence;
  • DeepSpeed ZeRO-3 NVMe Offload:HBA 8 GB/s PCIe 5.0 SSD 作为梯度暂存。

实测 ResNet-152, 8 × H100, Global BS = 4,096:

单机 5,200 img/s → 8 机 SHARP 38,900 img/s,线性扩展 93%。

5 . TPU 直连与跨区域混合集群

  • TPU v5e 机柜通过 200 GbE 直链 Spine;
  • Cloud TPU v4 挂在 asia-southeast1;VPN-EVPN VXLAN 到香港机房,RTT ~28 ms;
  • 使用 JAX Mesh 跨 TPU/GPU 混合并行:
import jax
devices = jax.devices()  # 包含 GPU + TPU
mesh = jax.sharding.Mesh(devices, ('x',))

延迟隐藏

  • TPU 部分用 gradient accumulation 32 micro-steps;
  • GPU 侧异步拉取梯度 (torch.distributed.pipeline.sync_schedule);
  • L4 交换机开启 ECN + PFC 减少聚合链路抖动。

6 . 性能监控与瓶颈定位

工具 关键指标 实用命令
nvidia-smi dmon SM%, Mem%, Pwr 实时 1 s 采样
Nsight Systems Kernel Duration GUI Profile 5 min
nvprof --export-profile sql Memcpy HtoD/DtoH SQL 分析
TPU Profiler Step time, FLOPS Util capture_tpu_profile
Prometheus + Grafana GPU Temp, IB PortXmitWait 角色分组面板

瓶颈套路

  • 先看 SM 利用率不足 60%?
  • 若 IO 高延迟,则检查 GDS + NVMe SSD QD;
  • NVLink Saturation > 80% but GPU idle → 考虑 Tensor Parallel 维度拆分不均;
  • 交换机 PFC 带宽掉到 50% → RDMA 头阻塞,调 ECN 阈值。

7 . 案例:58 小时刷新 ResNet-152

阶段 优化动作 耗时 (h) 加速比
baseline A100 ×8, PyTorch AMP 82 1.0×
H100 FP8 + Hopper FP8 60 1.37×
NCCL SHARP + SHARP IB 400G 52 1.58×
DALI + GDS + IO pipeline 48 1.71×
混合 TPU GPU + v5e, JAX Mesh 44 1.86×
最终调优 NVLink tune, compiler flags ≈ 42 1.95×

训练精度 Top-1 78.5%,与 baseline 持平,能耗从 5.2 MWh 降到 4.3 MWh。

8 . 安全隔离与成本优化

  • MIG 把 H100 80 GB 切成 7g.40gb ×7 给研发同事跑实验;
  • Kubernetes 设 PriorityClass:训练作业高优占 MIG Slice,推理作业低优;
  • GPU idling > 5 min 自动 nvidia-smi –gpu-reset;
  • Spot 实例提前 30 min preempt-warning 钩子 → 触发 torch.save_checkpoint()。

9 . 经验技巧清单

  • 选型:香港机房可租最新 H100/B100;若需 TPU,高速 Spine 少不了。
  • 驱动栈一致性:CUDA ↔ 驱动 ↔ cuDNN 版本配套是第一大坑。
  • FP8 + 混合精度:Hopper/B100 的主要红利,不用等编译器“成熟”。
  • 网络是王:400 G IB + SHARP,不要指望 25 G 或 100 G 能线性扩展。
  • 监控闭环:Nsight 先找内核瓶颈,再上 Prometheus 做长期趋势。
  • 混合 GPU/TPU:JAX Mesh & PjRT 让两种芯片协同不是难题。
  • 安全与成本:MIG + PriorityClass + Spot 钩子,把钱花刀刃上。

把这份清单贴在机房机柜门上,我每次调参前都会再过一遍。希望它也能帮你在香港的深度学习集群中一路狂飙,把训练速度提到极限。祝你早日刷新自己的纪录!

未经允许不得转载:A5数据 » 香港服务器GPU/TPU加速实战:如何将深度学习训练性能推到极限?

相关文章

contact