AMD 开发者云秒开 JupyterHub,ROCm 版 PyTorch 训练 ResNet50 全流程
下面这套流程,我平均 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-smi 和 nvidia-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. 监控三板斧
watch -n 1 rocm-smi看温度、功耗、显存。perf record -g python train.py抓 CPU 热点。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 %。
把结果写进实验报告
我只给三个硬指标,学生截图贴报告即可:
rocm-smi峰值功耗截图- 训练日志最后 50 行(含吞吐)
rocprof热点函数 Top5
既防止「复制粘贴代码」,也让他们学会「拿数据说话」。
一键清理:下课不烧钱
课程结束 30 台实例别忘了关,CLI 一行:
adc instance delete --filter "name~student-*" --yes
共享盘保留,下次开学继续用,真正「一次搭建,多届复用」。
助教也是人,把重复活交给脚本,把精力留给学生答疑。祝你下次实验课也能 5 分钟开完环境,学生全程不踩坑。
200小时GPU算力已就位,快来领取:https://marketing.csdn.net/questions/Q2604140858304426315?utm_source=AIpaper

更多推荐


所有评论(0)