下面这套流程,我平均 4 分 37 秒就能把 30 份 JupyterHub + ROCm PyTorch 环境拉到「可运行」状态,学生扫码就能写代码。

1. 选镜像:用官方 ROCm 5.7 + Ubuntu 22.04

AMD 开发者云市场里直接搜 rocm/pytorch-jupyter:5.7-22.04,它已经装好:

  • ROCm 5.7.1 驱动
  • PyTorch 2.1 + torchvision 0.16(ROCm 版)
  • JupyterHub 4.0 + conda 23.9

点「一键复制到项目」即可,不用自己 build。

2. 拉共享数据盘

课程数据(ImageNet 子集、CIFAR-10、预训练权重)统一放在 /shared/data,挂 NFS 只读,学生机只读挂载,省 30 份重复拷贝。

sudo mkdir -p /shared/data
echo "10.0.0.10:/shared/data /shared/data nfs ro,nolock 0 0" | sudo tee -a /etc/fstab
sudo mount -a

3. 固化 conda 环境

把官方镜像里默认的 pytorch 环境导出,防止学生 conda install 把 ROCm 搞崩。

conda activate pytorch
conda env export | tee /shared/specs/rocm-pytorch.yml

学生开机脚本里加一行:

conda env create -f /shared/specs/rocm-pytorch.yml -n pytorch

这样每人拿到的是一模一样的二进制,版本漂移归零。

4. 用户隔离 & NCCL 配置

JupyterHub 用 SystemUserSpawner,宿主节点已装好 rocm-dev。为了让多卡 DDP 不互相踩脚,把下面三行写进 /etc/nccl.conf

NCCL_DEBUG=INFO
NCCL_IB_DISABLE=1
NCCL_P2P_DISABLE=0

再在 ~/.bashrc 里追加:

export NCCL_IB_DISABLE=1
export HIP_VISIBLE_DEVICES=0,1

学生登录后 source ~/.bashrc 即可。

5. 批量开机脚本

用云厂商 CLI(以 adc 为例):

for i in {01..30}; do
  adc instance create \
     --image rocm/pytorch-jupyter:5.7-22.04 \
     --name student-$i \
     --gpu 1 \
     --shared-data /shared/data \
     --user student$i \
     --ssh-key "ssh-rsa AAAAB3NzaC1yc2EA..."
done

30 台并发几乎并行创建,5 分钟内全部 Running


训练:ResNet50 128 张大图压满 MI100

实验课目标:让学生感受「大 batch + DDP」到底能跑多快,同时学会看 rocm-sminvidia-ml 以外的监控命令。

1. 数据 & 脚本

ImageNet 子集 120 类,单张 JPEG ~250 KB。训练脚本基于 torchvision.models.resnet50,只改三处:

model = torchvision.models.resnet50(weights=None)
model = torch.nn.parallel.DistributedDataParallel(model, device_ids=[local_rank])

启动命令:

torchrun --nproc_per_node=2 --nnodes=1 train.py \
         --data /shared/data/imagenet-120 --batch-size 128 \
         --epochs 5 --lr 0.1

2. 实测数据

卡型 batch=128 吞吐 (img/s) 功耗 (W) 显存占用 (GB)
MI100 32 GB 815 ± 12 208 19.3
RX 6800 XT 16 GB 510 ± 8 186 14.9

MI100 在 128 大图下还能留 40 % 显存余量,给学生加 mixup 或更大输入也扛得住。

3. 监控三板斧

  1. watch -n 1 rocm-smi 看温度、功耗、显存。
  2. perf record -g python train.py 抓 CPU 热点。
  3. rocprof --stats python train.py 导出 GPU kernel 耗时 CSV,直接扔给 Excel 画饼图。

学生必踩的坑 & 排查口诀

报错信息 根因 一句口诀
RuntimeError: HIP error 101 非法内存访问 「先降 batch,再查 index,最后看越界」
NCCL WARN Connect P2P 被禁 「IB 关掉,P2P 打开,网卡同子网」
hipDeviceSynchronize() failed 显存爆掉 「减半 batch,加 torch.cuda.empty_cache()
ImportError: librccl.so 环境漂移 「conda list 对不上,重装 ROCm 版」

把这张表贴实验手册,学生自助排障率能到 80 %。


把结果写进实验报告

我只给三个硬指标,学生截图贴报告即可:

  1. rocm-smi 峰值功耗截图
  2. 训练日志最后 50 行(含吞吐)
  3. rocprof 热点函数 Top5

既防止「复制粘贴代码」,也让他们学会「拿数据说话」。


一键清理:下课不烧钱

课程结束 30 台实例别忘了关,CLI 一行:

adc instance delete --filter "name~student-*" --yes

共享盘保留,下次开学继续用,真正「一次搭建,多届复用」。


助教也是人,把重复活交给脚本,把精力留给学生答疑。祝你下次实验课也能 5 分钟开完环境,学生全程不踩坑。

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

在这里插入图片描述

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐