从“不可能”到“真香”:我们团队迁移 MI300X 的实战复盘

半年前,当老板提出要把核心推理集群从 Nvidia H100 部分切换到 AMD MI300X 时,团队内部的第一反应几乎是统一的抗拒。在那个时间点,"CUDA 生态护城河”是我们心中的铁律,大家普遍担心这会是一场无休止的修 Bug 之旅,甚至可能让原本稳定的服务雪崩。然而,面对算力成本的巨大压力和供应链的不确定性,我们最终还是硬着头皮启动了这次迁移。如今回头看,这段从焦虑到释然,再到惊喜的历程,不仅让我们省下了真金白银,更打破了对单一硬件厂商的路径依赖。

踩坑初期:环境适配与“水土不服”

迁移的第一步就给了我们一个下马威。习惯了 cuda:0 的我们,在初次部署 ROCm 7.x 环境时,发现很多想当然的操作都失效了。最典型的就是设备识别问题,起初我们的代码在 MI300X 上直接报错,提示后端不可用。排查半天才发现,虽然 PyTorch 新版做了兼容,但在严谨的生产环境中,必须显式处理环境变量和架构识别。

我们写了一个简单的检测脚本来“破冰”:

import torch
import os

# 关键一步:确认架构映射,避免 illegal instruction
if "HSA_OVERRIDE_GFX_VERSION" not in os.environ:
    # 针对 MI300X (gfx942) 进行强制映射,防止版本不匹配
    os.environ["HSA_OVERRIDE_GFX_VERSION"] = "9.4.2"

if not torch.cuda.is_available():
    raise RuntimeError("ROCm backend not detected. Check your installation.")

device = torch.device("cuda:0")
print(f"Device Name: {torch.cuda.get_device_name(0)}")
# 输出应包含 "AMD Instinct MI300X"

这只是冰山一角。更大的挑战来自自定义算子。我们模型中有一个为了优化注意力机制而手写的 CUDA C++ 扩展,在 H100 上跑得飞快,但在 HIP 编译器下直接抛出了一堆线程块配置错误。死磕 C++ 移植效率极低,且容易引入新的数值误差。最终,我们决定拥抱 Triton,用 Python 重写了这个算子。没想到,这不仅解决了编译问题,在 MI300X 上的吞吐反而提升了约 15%。这件事彻底改变了团队对“性能损失”的预设偏见。

心态转折:从怀疑开源到信任生态

随着迁移深入,团队的心态发生了微妙变化。起初大家是带着“找茬”的眼光去审视 ROCm 的,任何一个小报错都会被放大成“生态不成熟”的证据。但当我们将 vLLM 成功部署并跑通 Llama 3.1 405B 模型时,这种怀疑开始动摇。

特别是在显存调优环节,MI300X 的大内存优势展露无遗。在 H100 (80GB) 上需要两台八卡服务器才能勉强塞下的 FP16 权重,在 MI300X (192GB) 上单台八卡系统就能轻松容纳,甚至还能留出充裕的空间给 KV Cache。我们通过调整 --gpu-memory-utilization 参数,将显存占用控制在 90%,成功避免了 OOM 问题,同时保持了极低的延迟。

vllm serve /path/to/llama-3.1-405b \
  --host 0.0.0.0 \
  --port 8000 \
  --gpu-memory-utilization 0.9 \
  --dtype bfloat16 \
  --quantization fp8

当我们看到监控面板上稳定的 GPU 利用率和符合预期的 QPS 时,大家意识到:开源生态的进步速度远超想象,所谓的“壁垒”更多是心理上的惯性。

成本与性能的真实账本

迁移完成后,我们算了一笔实在的账。仅从硬件采购成本来看,构建同等显存容量的集群,MI300X 方案比纯 H100 方案节省了约 30% 的预算。这还没算上因显存容量大而减少的服务器节点数量所带来的机房空间和电力成本节约。

在性能表现上,虽然峰值浮点运算能力上 Nvidia 依然强势,但在我们实际的大模型推理场景中,内存带宽和容量往往是更关键的瓶颈。MI300X 凭借更高的 HBM 带宽和容量,在运行大参数模型时表现出了极强的竞争力。特别是在 FP8 精度下,其推理吞吐量完全能够满足生产需求,甚至在某些长上下文场景下优于 H100。

给后来者的几点建议

回顾这半年的“迁徙”之路,有几点经验值得分享给正在考虑硬件多元化的团队:

  1. 文档沉淀重于代码修改:遇到的每一个坑(如 DKMS 编译失败、权限组配置、架构代码映射),都要形成内部 Wiki。这些看似琐碎的细节,是后续自动化运维的基石。
  2. 自动化测试是安全感来源:建立一套跨硬件平台的 CI/CD 流程,每次代码提交都在 H100 和 MI300X 上同时运行单元测试和精度比对,确保数值误差控制在 1e-6 以内。
  3. 不要迷信“一键迁移”:HIPify 工具能解决大部分语法转换,但核心算子的优化和特定硬件特性的利用,仍需人工介入。做好“部分重写”的心理准备,这往往是性能提升的契机。

这次迁移不仅是一次技术升级,更是一次思维破局。它证明了在 AI 基础设施领域,选择权始终应该掌握在自己手中。当你真正跨出第一步,会发现那片曾经被视为“荒原”的开源天地,其实早已繁花似锦。

200 小时 GPU 算力已就位,快来领取:https://marketing.csdn.net/questions/Q2604140858304426315?utm_source=AIpaper

Logo

免费领 200 小时云算力,进群参与显卡、AI PC 幸运抽奖

更多推荐