ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

AMD ROCm 完整实践指南:从装好环境到跑通第一个 GPU 核函数

AMD ROCm 完整实践指南:从装好环境到跑通第一个 GPU 核函数 AMD ROCm 完整实践指南从装好环境到跑通第一个 GPU 核函数【免费下载链接】legacy-rocm-buildAMD ROCm™ Software - GitHub Home项目地址: https://gitcode.com/GitHub_Trending/ro/legacy-rocm-buildROCm 是 AMD 的开源 GPU 加速计算平台。如果你的训练任务长期被 CPU 卡住、云上算力成本越算越高可以把同一份工作负载搬到 AMD GPU 上跑。这篇文章带你把环境装好、跑通第一个程序再把性能调出余量。先问自己我的机器能不能用 ROCm装之前花 30 秒确认两件事比装完再返工省事得多。硬件门槛Instinct 系列MI100 / MI200 / MI300 / MI350 等数据中心卡是主力Radeon 消费卡与 Ryzen 内置核显也在支持列表内。装好后每条卡会对应一个gfx目标号比如 MI300 系列是gfx942MI350 系列是gfx950这是后面编译器识别设备的依据。系统门槛Ubuntu 22.04/24.04/26.04、Debian 13、RHEL 8/9、SLES 15 等主流 Linux 发行版完整清单见docs/about/include/os-support-table.md与docs/about/include/hardware-support-table.md。MI300X UBB 节点一台机器里 8 张卡互相直连这是 ROCm 做大规模并行的基本单元。自查命令一条就够lspci | grep -iE vga|3d controller预期输出出现AMD/ATI字样且卡名在上面两个支持列表里就可以往下走。最简安装把步骤压到最少Ubuntu 上用包管理器最省事核心就两件事装安装脚本、跑安装脚本。# 1. 安装 amdgpu-install 脚本发行版包管理器提供 sudo apt update sudo apt install amdgpu-install # 2. 一键装 ROCm 对应驱动按你机器实际架构选 sudo amdgpu-install --usecaserocm,graphics --gfxversionauto # 3. 给当前用户加 GPU 设备组权限重启后生效 sudo usermod -aG video,render $USER重启一次让用户组生效。喜欢图形界面走安装向导的可以看仓库里docs/data/how-to/下 runfile 安装器的完整菜单截图docs/install/rocm-runfile-installer.rst有逐步说明。runfile 安装器主菜单一条命令装驱动加全组件适合离线机器。装的过程一般几分钟装完别急着写代码先做三件事。装完的三件事两条命令 一个最小例子第一件确认设备被识别。rocminfo | grep -i gfx预期输出列表里出现你那张卡对应的gfx942/gfx950等目标号。空的说明驱动或用户组没到位跳到文末自查表。第二件确认编译器在位。which hipcc hipcc --version预期输出路径指向/opt/rocm/hip/bin/hipcc并打印版本号。找不到就先执行source /opt/rocm/setenv.sh。第三件跑一个最小核函数。新建vec_add.cpp整个程序就做向量加法#include hip/hip_runtime.h #include iostream #include vector __global__ void add(const float* a, const float* b, float* c, int n) { int i hipBlockIdx_x * hipBlockDim_x hipThreadIdx_x; if (i n) c[i] a[i] b[i]; } int main() { const int n 1024; std::vectorfloat hA(n, 1.f), hB(n, 2.f), hC(n, 0.f); float *dA, *dB, *dC; hipMalloc(dA, n*4); hipMalloc(dB, n*4); hipMalloc(dC, n*4); hipMemcpy(dA, hA.data(), n*4, hipMemcpyHostToDevice); hipMemcpy(dB, hB.data(), n*4, hipMemcpyHostToDevice); hipLaunchKernelGGL(add, dim3(4), dim3(256), 0, 0, dA, dB, dC, n); hipDeviceSynchronize(); hipMemcpy(hC.data(), dC, n*4, hipMemcpyDeviceToHost); bool ok std::all_of(hC.begin(), hC.end(), [](float v){ return v 3.f; }); std::cout (ok ? PASS: all elements are 3.0 : FAIL) \n; hipFree(dA); hipFree(dB); hipFree(dC); return ok ? 0 : 1; }hipcc -O2 -o vec_add vec_add.cpp ./vec_add预期输出PASS: all elements are 3.0。到这里ROCm 的安装就算真正闭环了。它凭什么快一条流水线类比讲清并行把 GPU 里的一个计算单元CU想成一家快餐店调度器是接单员4 条 SIMD 流水线是四个炒锅一锅同时颠几十份同样的菜寄存器是灶台边的备料区LDS 共享内存是全店共用的操作台。顾客线程越多、每单动作越简单店就越忙不过来地出餐——GPU 的吞吐正是这么堆出来的。单个 CU 的内部构成调度器在上SIMD 队列居中底部是寄存器文件与共享内存线程数据尽量从这些近处取。对写代码的人结论只有一条让线程的数据尽量留在寄存器和共享内存里别每条指令都跑一趟全局显存。接上框架PyTorch 和 TensorFlow 基本不改代码算子层跑通后多数人的真实需求是直接用框架。ROCm 版的 PyTorch 一条命令装上pip3 install torch torchvision --index-url https://download.pytorch.org/whl/rocm6.2 python3 -c import torch; print(torch.__version__, torch.cuda.is_available())预期输出版本号加True。注意框架里照旧用torch.cuda这套 APIROCm 在底层做了对接训练脚本一行不用改。TensorFlow 侧装tensorflow-rocmtf.config.list_physical_devices(GPU)返回非空即可。多卡之间的通信由 RCCL 集合通信库承担写法与 NCCL 同构换平台同样不用重写。把性能抠出来先量、再省、再贴内存代码能跑和跑得动是两回事。下面按先定位、再下手的顺序给三个手段。1. 先量出瓶颈在哪别凭感觉改。rocprof --stats ./vec_add # 核函数级耗时与统计 rocm-smi # 利用率、显存、温度实时看板 rocm-smi --showtopo # 卡间链路类型、跳数、NUMA 亲和rocm-smi --showtopo的输出多卡任务放哪几张卡、怎么绑 NUMA看这张图就清楚了。2. 把主设备拷贝藏起来。hipMemcpy换成hipMemcpyAsync挂到 stream 上让搬运和核函数计算重叠推进长拷贝的延迟基本被吃掉hipStream_t s; hipStreamCreate(s); hipMemcpyAsync(dA, hA, bytes, hipMemcpyHostToDevice, s); // 核函数挂同一 stream 上自然排队、互相重叠 hipStreamSynchronize(s);3. 让核函数吃共享内存。矩阵乘法是典型朴素写法每个线程各自从显存反复捞同一份数据改成分块tile后一次全局读取被块内 16 个线程摊着用再配__syncthreads()保证整块就绪。块大小、tile 尺寸直接决定占用率拿不准就用不同参数实测对比。翻车自查表现象、命令、预期输出现象命令预期输出GPU 未识别lspci \| grep -i amdrocminfo \| grep -i gfx前者出现AMD/ATI3D controller后者有对应gfx目标。都为空先查驱动与用户组找不到 hipccwhich hipcc hipcc --version路径指向/opt/rocm/hip/bin/hipcc并打印版本没有则先source /opt/rocm/setenv.sh显存不足rocm-smi --showmeminfo vram逐卡列出 Free/Total区分真占满还是碎片需要深挖时再上两把rocgdb ./vec_add # 断点单步核函数启动路径 rocprof -i input.txt -o trace.csv ./vec_add # 导出 trace 给剖析工具再往深走进阶方向与下一步官方文档在仓库里都有对应目录安装全流程见docs/install/各代 GPU 架构细节见docs/reference/gpu-arch/系统级调优见docs/reference/system-optimization/。![ROCm 大模型链路从训练到推理服务serving均可落在 AMD GPU 上](https://raw.gitcode.com/GitHub_Trending/ro/legacy-rocm-build/raw/0210dda6fc6b706e3ef87b3b42593a2adb930983/docs/images/unused/_Model In.png?utm_sourcegitcode_repo_files)训练 → 推理 → 在线服务的完整链路批量调度、分页 KV cache、量化在 AMD GPU 上都是生产可用配置。接下来挑四件就能动手写不同规模的矩阵乘法输出一张 CPU vs GPU 耗时对照表用 PyTorch ROCm 训一个小网络对比 CPU 上的单步耗时用 RCCL 跑多卡带宽测试验证卡间互联RCCL 八卡集合通信测试输出上分布式训练前先用它确认卡间带宽没被链路拖累。需要翻文档和示例源码时拉一下仓库git clone https://gitcode.com/GitHub_Trending/ro/legacy-rocm-build装好、跑通、调快这条路径走完后面的分布式和多卡只是量变。【免费下载链接】legacy-rocm-buildAMD ROCm™ Software - GitHub Home项目地址: https://gitcode.com/GitHub_Trending/ro/legacy-rocm-build创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表