【AMD ROCm 实战】云端 AI 开发系列(一):在 ModelScope 上部署 MI300X 并运行第一个 PyTorch 程序

摘要: 本文详细记录在魔搭创空间(ModelScope)申请 AMD Instinct MI300X 云实例、配置 ROCm 6.2 环境、安装 PyTorch for ROCm 并运行第一个 GPU 加速程序的完整流程。包含详细的截图、命令输出和性能基准测试数据。


🎯 1. 为什么选择 AMD ROCm 云端开发?

作为一名后端架构师,我在企业级 AI 部署中一直面临三大痛点:

企业 AI 部署痛点

NVIDIA 算力成本高

显存瓶颈限制大模型

CUDA 生态锁定

AMD MI300X
成本降低 50-60%

192GB HBM3 显存
轻松部署 70B+ 模型

ROCm 开源生态
避免厂商锁定

AMD ROCm 的核心优势:

  1. 性价比: 同等算力下,云端费用比 NVIDIA A100 低 50-60%
  2. 大显存: MI300X 提供 192GB HBM3,是 A100(80GB)的 2.4 倍
  3. 开放性: ROCm 开源生态,避免被 CUDA 绑定

但很多开发者担心:ROCm 真的成熟了吗?迁移成本高吗?

带着这些问题,我决定通过真实的云端实测来验证。


🛠️ 2. 环境准备:在 ModelScope 申请 AMD 实例

2.1 注册与登录

访问 魔搭创空间,使用阿里云账号或手机号注册。

ModelScope 登录页面

2.2 创建 Notebook 实例

点击"创建实例",选择以下配置:

配置项 推荐值 说明
实例类型 AMD Instinct MI300X 192GB HBM3 显存
镜像 ROCm 6.2 + PyTorch 2.3 官方预装镜像
系统盘 100 GB SSD 存放模型与数据
区域 华北-北京 低延迟访问
时长 按需计费 测试阶段建议按小时

在这里插入图片描述

💡 提示: 首次用户可申请 AMD 提供的免费算力券(通常 50-100 小时),足够完成本系列所有实验。

2.3 启动实例并连接

点击"启动"后,等待 2-3 分钟,实例状态变为"运行中"。点击"打开 JupyterLab"进入开发环境。

实例

🔍 3. 验证 ROCm 环境

3.1 检查 ROCm 版本

打开 JupyterLab 的终端(Terminal),执行:

# 查看 ROCm 版本信息
rocminfo | grep "Version"

# 预期输出:
# Version: 6.2.0

3.2 查看 GPU 状态

# 显示 GPU 详细信息
rocm-smi --showproductname
rocm-smi --showmeminfo vram
rocm-smi --showuse

# 预期输出:
# ======================== ROCm System Management Interface ========================
# ================================= Product Info ==================================
# GPU[0] : Card series:        AMD Instinct MI300X
# GPU[0] : Card model:         0x74a1
# GPU[0] : Card vendor:        Advanced Micro Devices, Inc. [AMD/ATI]
# 
# ================================== Memory Info ==================================
# GPU[0] VRAM Total Memory: 196608 MB
# GPU[0] VRAM Used Memory: 512 MB
# 
# =================================== Utilization =================================
# GPU[0] GPU Use (%): 0

关键指标解读:

  • GPU 型号: AMD Instinct MI300X
  • 总显存: 196608 MB (192 GB)
  • 已用显存: 512 MB (系统占用)
  • GPU 利用率: 0% (空闲状态)

🚀 4. Hello World:运行第一个 PyTorch ROCm 程序

4.1 验证 PyTorch ROCm 支持

在 JupyterLab 中创建一个新的 Python Notebook,执行:

import torch

print("=" * 60)
print("PyTorch ROCm Environment Check")
print("=" * 60)

# 1. 检查 CUDA (ROCm) 是否可用
print(f"\n✅ CUDA (ROCm) available: {torch.cuda.is_available()}")

# 2. 查看 GPU 数量
print(f"📊 Device count: {torch.cuda.device_count()}")

# 3. 查看 GPU 名称
if torch.cuda.is_available():
    print(f"🎯 Current device: {torch.cuda.get_device_name(0)}")
    print(f"💾 Total memory: {torch.cuda.get_device_properties(0).total_memory / 1e9:.2f} GB")
    print(f"💾 Used memory: {torch.cuda.memory_allocated(0) / 1e9:.2f} GB")
else:
    print("❌ ROCm not available! Please check your installation.")

print("\n" + "=" * 60)

预期输出:

============================================================
PyTorch ROCm Environment Check
============================================================

✅ CUDA (ROCm) available: True
📊 Device count: 1
🎯 Current device: AMD Instinct MI300X
💾 Total memory: 196.61 GB
💾 Used memory: 0.00 GB

============================================================

💡 关键发现: PyTorch 中依然使用 torch.cuda 接口调用 AMD GPU,这是 ROCm 的兼容层设计,代码几乎无需修改


4.2 矩阵乘法性能测试

接下来,我们运行一个标准的矩阵乘法 benchmark,对比 CPU 与 GPU 的性能差异:

import torch
import time

print("=" * 60)
print("Matrix Multiplication Benchmark")
print("=" * 60)

# 定义矩阵大小
matrix_size = 10000
num_iterations = 10

# CPU 测试
print(f"\n🖥️  Testing on CPU ({matrix_size}x{matrix_size})...")
cpu_a = torch.randn(matrix_size, matrix_size)
cpu_b = torch.randn(matrix_size, matrix_size)

start_time = time.time()
for _ in range(num_iterations):
    cpu_c = torch.matmul(cpu_a, cpu_b)
cpu_time = (time.time() - start_time) / num_iterations * 1000

print(f"   Average time: {cpu_time:.2f} ms")

# GPU (ROCm) 测试
if torch.cuda.is_available():
    device = torch.device("cuda:0")
    print(f"\n🎮 Testing on GPU ({matrix_size}x{matrix_size})...")
    
    gpu_a = torch.randn(matrix_size, matrix_size, device=device)
    gpu_b = torch.randn(matrix_size, matrix_size, device=device)
    
    # 预热
    for _ in range(5):
        torch.matmul(gpu_a, gpu_b)
    torch.cuda.synchronize()
    
    # 正式测试
    start_event = torch.cuda.Event(enable_timing=True)
    end_event = torch.cuda.Event(enable_timing=True)
    
    start_event.record()
    for _ in range(num_iterations):
        gpu_c = torch.matmul(gpu_a, gpu_b)
    end_event.record()
    
    torch.cuda.synchronize()
    gpu_time = start_event.elapsed_time(end_event) / num_iterations
    
    print(f"   Average time: {gpu_time:.2f} ms")
    print(f"   Speedup: {cpu_time / gpu_time:.2f}x")
    
    # 计算 TFLOPS
    operations = 2 * matrix_size ** 3
    tflops = (operations / gpu_time / 1e9) * 1000
    print(f"   Performance: {tflops:.2f} TFLOPS")

print("\n" + "=" * 60)

实测结果(MI300X):

============================================================
Matrix Multiplication Benchmark
============================================================

🖥️  Testing on CPU (10000x10000)...
   Average time: 8523.45 ms

🎮 Testing on GPU (10000x10000)...
   Average time: 125.67 ms
   Speedup: 67.82x
   Performance: 15.92 TFLOPS

============================================================

性能对比分析:

平台 平均耗时 加速比 理论峰值 实测性能 效率
CPU (Intel Xeon) 8523 ms 1x - - -
GPU (MI300X) 125.67 ms 67.82x 362 TFLOPS 15.92 TFLOPS 4.4%

💡 说明: 简单矩阵乘法无法充分利用 MI300X 的计算单元,实际深度学习任务中效率可达 30-50%。


⚠️ 5. 常见问题与解决方案

Q1: torch.cuda.is_available() 返回 False

可能原因:

  1. PyTorch 未正确安装 ROCm 版本
  2. 用户权限不足

解决方案:

# 1. 确认安装了 ROCm 版 PyTorch
pip list | grep torch

# 应该看到:
# torch                   2.3.0+rocm6.2

# 2. 如果安装的是 CPU 版本,重新安装:
pip uninstall torch torchvision torchaudio
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm6.2

# 3. 检查用户组权限
groups $USER

# 确保包含 video 和 render 组
sudo usermod -aG video,render $USER

# 4. 重启 JupyterLab

Q2: rocm-smi 命令找不到

可能原因: ROCm 工具未加入 PATH

解决方案:

# 临时添加
export PATH=/opt/rocm/bin:$PATH

# 永久添加(写入 ~/.bashrc)
echo 'export PATH=/opt/rocm/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

Q3: 显存占用异常高

可能原因: 之前的进程未释放显存

解决方案:

# Python 中清理显存
import torch
torch.cuda.empty_cache()

# 或者重启 Jupyter Kernel

📊 6. 阶段性总结

通过本次环境搭建,我确认了:

ModelScope 的 AMD 实例开箱即用,ROCm 6.2 预装完善
PyTorch 对 ROCm 的支持非常成熟torch.cuda 接口完全兼容
MI300X 性能强劲,矩阵乘法加速比达 67x
192GB 大显存优势明显,可轻松加载 70B+ 参数大模型


🔜 7. 下一篇预告

在《第二部分:CUDA 到 ROCm 迁移实战》中,我将:

  1. 迁移 YOLOv8 目标检测模型: 从 NVIDIA A100 到 AMD MI300X
  2. 性能对标测试: FPS、延迟、显存占用全面对比
  3. 算子兼容性排查: 记录 3-5 个典型报错及修复方案
  4. 成本效益分析: 计算 MI300X vs A100 的性价比

👍 如果本文对你有帮助,欢迎点赞、收藏、转发!
💬 如果你在 ROCm 环境搭建中遇到问题,请在评论区留言,我会逐一回复!
✍️ 行文仓促,定有不足之处,欢迎各位朋友在评论区批评指正,不胜感激!

专栏导航:

  • 📖 上一篇: -
  • 📖 下一篇: CUDA 到 ROCm 迁移实战:YOLOv8(内容准备中)

参考资料:

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐