ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

4 步跑通 AMD ROCm:从安装验证到性能剖析的实战教程

4 步跑通 AMD ROCm:从安装验证到性能剖析的实战教程 4 步跑通 AMD ROCm从安装验证到性能剖析的实战教程【免费下载链接】legacy-rocm-buildAMD ROCm™ Software - GitHub Home项目地址: https://gitcode.com/GitHub_Trending/ro/legacy-rocm-build团队里一份算法代码要同时维护 CUDA 和另一套私有栈改一个算子就得抄两遍想加卡扩容排队排到天荒地老单卡预算也一路走高。AMD ROCm 是 AMD 官方的开源 GPU 软件栈从驱动、HIP 运行时、数学库到剖析工具和 ML 框架对接一个仓库全包。它解决的问题很直接让训练、推理和 HPC 负载在 AMD GPU 上跑起来而且代码基本不用推倒重写。能力版图AMD ROCm 能干什么先交代清楚它覆盖什么避免装完发现不是你的菜GPU 覆盖Instinct MI100 / MI200 / MI300 系列是主力Radeon 消费级卡RDNA3/4和 Ryzen AI APU 也在支持矩阵里典型场景大模型训练与推理、HPC 数值模拟、科学计算、AI 工作负载编程入口HIPC 运行时 核函数语言接口与 CUDA 同构另外支持 OpenMP 和 OpenCL框架对接PyTorch、TensorFlow、JAX 都有官方 ROCm 构建多卡通信由 RCCL 集合通信库负责配套工具rocBLAS/rocFFT/rocSPARSE 数学库、rocprof 剖析器、rocm-smi 监控器一应俱全大规模部署的基本单元长这样——一台 MI300X 节点上 8 张 GPU 用 Infinity Fabric 全互联MI300X Infinity Platform 节点8 张 MI300X 通过 Infinity Fabric 双向互联这是 ROCm 多卡并行的大底座。版图清楚了下面直接动手装。安装命令清单Ubuntu 三步走 开工前先对三件事系统是 Ubuntu 22.04/24.04、RHEL 8/9 或 SLES 15 之一GPU 型号在兼容性矩阵里装完用rocminfo核对磁盘留 20GB 以上。Ubuntu 上用官方脚本四条命令# 1. 下载官方安装脚本 wget -O amdgpu-install.sh https://repo.radeon.com/rocm/manylinux/amdgpu-install.sh # 2. 安装计算栈内核驱动 HIP 数学库一步到位 sudo bash amdgpu-install.sh --usecaserocm # 3. 当前用户加入 video/render 设备组否则程序打开不了 GPU sudo usermod -aG video,render $USER # 4. 重启加载新内核驱动然后重新登录 sudo reboot装完后 3 步验证全部通过才算装好了# ① PCI 层面认出显卡 lspci | grep -i 3d # ② 关键一条列出 GPU 的 gfx 目标如 gfx942、gfx1100 rocminfo | grep -i gfx # ③ 编译器在位 hipcc --version判断标准很简单第 ② 条能打出你这张卡的 gfx target第 ③ 条能打印版本号就算就绪。环境已通先不急着写代码去把官方示例点着火。最小闭环5 分钟跑通官方示例ROCm 自带一组 HIP 示例在/opt/rocm/share/hip/samples/下。先跑最小的一条冒烟测试# 进入 bit_extract 示例目录 cd /opt/rocm/share/hip/samples/0_Intro/bit_extract # 编译并运行 make ./bit_extract终端打印出数值和Correct Result说明驱动、编译器、运行时这条链全通了。趁热再跑一个向量加法示例感受编译一行命令、运行即上卡的节奏cd ../vector_add make ./vector_add两个示例跑完你手上已经有了 5 分钟内的一次完整成功体验。有了这个底气咱们回头把为什么快讲透。它凭什么快一场接力赛看懂 GPU 并行把 GPU 想象成运动会的接力赛场每个 CU计算单元是一支接力队调度器是发令的教练队里 4 个 SIMD 像 4 个并列的泳道一声令下整队同时出发——一条指令同时推动一批数据吞吐就是这么来的。LDS 是队边的器材室取水拿装备伸手就到而 HBM 全局内存是操场另一头的总供应站跑一趟要花掉半个赛程。快不快不取决于单个跑得多猛而取决于同时有多少人出发、以及大家是不是总往供应站跑。类比说完逐一对回真实组件线程work item↔ 接力队员你写的核函数就是每个队员的动作块workgroup↔ 一队队员天然共享 LDSLDS↔ 器材室块内共享的高速内存HBM 显存↔ 总供应站容量大、延迟高CU 内 4 个 SIMD↔ 并列泳道单条指令并行作用于多个数据CU 调度器↔ 教练的发令枪负责派发波次wavefront单个 CU 的内部构成调度器压顶LDS 横贯中部4 组 SIMD 与 VGPR 寄存器文件铺底——这就是同时出发的硬件基础。原理清楚了下面换成你自己的核函数动手写一个归约内核。内核函数示例手写一个归约核函数归约reduction是并行计算里最典型的负载百万个元素求和。先记住四个核心 API其他都是配角hipMalloc/hipFree申请和释放显存hipMemcpy主机与设备之间的数据搬运hipLaunchKernelGGL指定块数、线程数并启动核函数hipDeviceSynchronize阻塞等 GPU 干完活新建reduce_sum.cpp#include hip/hip_runtime.h #include iostream #include vector #define BLOCK 256 // 归约核函数每个块负责一段段内用 LDS 逐级求和 __global__ void reduce(const float* in, float* out, int n) { __shared__ float sdata[BLOCK]; // 块的器材室 int tid hipThreadIdx_x; int idx hipBlockIdx_x * (hipBlockDim_x * 2) tid; float v (idx n) ? in[idx] : 0.0f; if (idx hipBlockDim_x n) // 每个线程一次取两个数 v in[idx hipBlockDim_x]; sdata[tid] v; __syncthreads(); // 等整块数据入齐再继续 // 逐级折叠256 - 128 - ... - 1 for (int s BLOCK / 2; s 0; s 1) { if (tid s) sdata[tid] sdata[tid s]; __syncthreads(); } if (tid 0) out[hipBlockIdx_x] sdata[0]; // 每块出一个部分和 } int main() { const int n 1 20; // 一百万个元素 std::vectorfloat h(n, 1.0f); int blocks (n BLOCK * 2 - 1) / (BLOCK * 2); float *din, *dout; hipMalloc(din, n * sizeof(float)); hipMalloc(dout, blocks * sizeof(float)); hipMemcpy(din, h.data(), n * sizeof(float), hipMemcpyHostToDevice); hipLaunchKernelGGL(reduce, dim3(blocks), dim3(BLOCK), 0, 0, din, dout, n); hipDeviceSynchronize(); std::vectorfloat part(blocks); hipMemcpy(part.data(), dout, blocks * sizeof(float), hipMemcpyDeviceToHost); double total 0; for (float v : part) total v; std::cout total total (期望 n ) std::endl; hipFree(din); hipFree(dout); return total n ? 0 : 1; }编译运行hipcc -O2 -o reduce_sum reduce_sum.cpp ./reduce_sum看到total 1048576即成功。优化点只展开一个共享内存折叠。朴素写法让每个线程直接去 HBM 逐次取数同一块数据被反复从显存拉上面这版先由整块协作把数据一次性搬进 LDS之后所有加法都在片内完成——全局内存的命中次数被摊薄了 256 倍。这也是 HIP 与 CUDA 同构的好处同样的写法将来换平台不用重写逻辑。会写核函数了就该把重活交给框架。框架对接两条命令切到 PyTorch ROCm# 1. 安装 ROCm 构建的 PyTorch pip install torch torchvision --index-url https://download.pytorch.org/whl/rocm6.2 # 2. 验证版本号和 True 即代表已认出 AMD GPU python -c import torch; print(torch.__version__, torch.cuda.is_available())第二行打印出版本号和True就成了。重点提醒框架内照旧写torch.cuda这套 API训练脚本一行不用改——框架对接的门槛就是这么低。地基和框架都就位剩下的就是抠性能。把算力用满三个调优杠杆与剖析工具 代码能跑不等于跑得快。三个杠杆逐个拉杠杆一少搬数据。主机与设备之间的拷贝往往是最大隐形开销。把hipMemcpy换成hipMemcpyAsync挂到 stream 上拷贝与核函数计算就能并行推进再配hipHostMalloc申请锁页内存拷贝延迟基本被藏掉。杠杆二调度占用率。块大小、LDS 用量、寄存器压力都决定一个 CU 上能塞多少活跃 wavefront。VGPR 用太多驻留的波次就少SIMD 空转占用率与 VGPR 用量的关系寄存器压力越大可驻留的波次越少SIMD 越容易空转。杠杆三别猜量。剖析工具命令清单rocprof --stats ./reduce_sum # 核函数级耗时与统计 rocminfo # GPU 能力与 gfx 目标 rocm-smi # 利用率、显存、温度实时面板 rocm-smi --showtopo # 卡间链路类型、跳数与 NUMA 亲和想量化卡间带宽直接跑官方带宽测试和 RCCL 集合通信测试多卡调度的依据全在输出里rocm-bandwidth-test 输出8 卡间单向/双向拷贝峰值带宽矩阵跨 XGMI 链路的数值一目了然。RCCL 八卡 all_reduce 测试不同消息大小下的有效带宽是分布式训练前验证卡间互联的常用手段。瓶颈定位清楚就可以上真实负载了。生产负载把 7B 大模型推上 GPU 两条命令把 vLLM 高吞吐推理框架拉起来# 1. 安装 vLLMROCm 构建 pip install vllm# 2. 加载 7B 模型并生成 from vllm import LLM, SamplingParams llm LLM(modelmeta-llama/Llama-2-7b-chat-hf) params SamplingParams(temperature0.7, max_tokens64) out llm.generate([用一句话介绍 AMD ROCm], params) print(out[0].outputs[0].text)批量调度、分页 KV cache、量化这些在 AMD GPU 上都是生产可用配置。这不是玩具演示而是可以直接上线的链路![ROCm大模型推理全链路从训练到推理服务](https://raw.gitcode.com/GitHub_Trending/ro/legacy-rocm-build/raw/0210dda6fc6b706e3ef87b3b42593a2adb930983/docs/images/unused/_Model In.png?utm_sourcegitcode_repo_files)模型训练 → 推理 → 在线服务的典型链路均可在 AMD GPU 上完成。上生产之后难免出状况备好这份 30 秒排查清单。故障速查三类高频故障的 30 秒排查GPU 未被识别lspci | grep -i amd /opt/rocm/bin/rocminfo | grep -i gfx预期lspci 出现AMD/ATI的 3D controllerrocminfo 能列出 gfx target。若为空优先查内核驱动是否加载dmesg | grep amdgpu以及用户是否在 video/render 组。hipcc 找不到或编译报错which hipcc hipcc --version source /opt/rocm/setenv.sh预期路径指向/opt/rocm/hip/bin/hipcc并打印版本。找不到就先 source 环境脚本再试。显存不足out of memoryrocm-smi --showmeminfo vram预期逐卡列出 VRAM 的 Used/Free/Total。一眼分辨是真占满还是碎片化再决定缩 batch 还是改配置。想深挖内核行为再备两件rocgdb ./reduce_sum断点单步看核函数启动路径rocprof -i input.txt -o trace.csv ./reduce_sum导出 trace 导入剖析工具。学习地图与下一步仓库里这几个目录是深入学习的正门相对仓库根目录安装指南全流程docs/install/含 runfile 安装各菜单截图GPU 架构参考docs/reference/gpu-arch/CDNA/RDNA 各代图解系统优化手册docs/reference/system-optimization/NUMA、隔离、带宽调优三个练手小项目每个都能产出对比数据把归约规模换成 1M / 100M / 1B输出一张 CPU vs GPU 耗时对照表给归约加一个跨步读版本用rocprof量出带宽差异用 PyTorch ROCm 训一个小网络对比 CPU 上的单步耗时四件可以今天就做的事git clone https://gitcode.com/GitHub_Trending/ro/legacy-rocm-build拉下最新文档与示例把/opt/rocm/share/hip/samples/下示例跑完重点看多卡那几个用 RCCL tests 实测一次卡间带宽记下你机器的基准线去社区提 issue或把你的优化数据分享出去从装环境、跑示例、写核函数到把算力抠满这条路径你已经完整走过一遍。算力从不等人下一个核函数等你开火。【免费下载链接】legacy-rocm-buildAMD ROCm™ Software - GitHub Home项目地址: https://gitcode.com/GitHub_Trending/ro/legacy-rocm-build创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表