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

发布时间:2026/10/20 15:21:50

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),仅供参考
延伸阅读

更多相关文章

2026/10/20 1:06:57

C/C++跨平台获取可执行文件路径:原理、实现与工程实践

1. 项目概述:为什么获取当前路径是个“老大难”问题?在C/C开发中,获取当前可执行文件或源代码的运行路径,听起来是个再基础不过的需求,但实际动手时,很多开发者都会愣一下。这不像Python里一个简单的__file…

2026/10/20 18:31:54

电商UI视觉回归测试实战:从像素级对比原理到CI落地指南

说实话,视觉回归测试这东西,刚入行的时候我觉得它就是个“锦上添花”的偏门工具,直到我亲眼看见一次电商大促前夜,仅仅因为一个按钮的box-shadow被改了颜色值,整条商品卡片的视觉重心全部偏移,而功能测试全…

2026/10/20 18:31:54

VC/MFC中用Static控件实现轻量级实时曲线绘制

简介:本资源是一份面向VC初学者与界面开发者的实用教程,聚焦于利用Static控件实现轻量级曲线绘制,特别适用于嵌入式UI、数据监控面板及虚拟示波器等实时波形显示场景。资源包含41个文件,涵盖10个头文件(h)与…

2026/10/20 18:31:54

大模型有效注意力阈值:为什么100万Token窗口实际只用25万

1. 项目概述:当“窗口”不等于“注意力”,我们到底在喂模型什么?最近在某实验室做长文档摘要系统优化时,团队里一位刚转行的同事盯着监控面板上跳动的数字发愣:“模型明明标称支持100万Token上下文,为什么处…

2026/10/20 18:31:54

阿里云短信模板的工程化实践与生命周期管理

1. 为什么“短信模板”比“发短信”更值得深挖很多人第一次接触阿里云短信服务时,第一反应是:“不就是调个API发条验证码吗?填个手机号、写个内容、点发送——完事。”我最初也是这么想的。直到在某次上线前夜,测试环境一切正常&a…

2026/10/20 18:31:54

Java进阶学什么才有用?从JVM并发到实战排查的完整路线

"Java进阶到底学什么才有用?"这个问题,几乎每隔几天就会有人问我一次。看到标题里带着"阳光沙滩"这四个字,我甚至能想象出提问者翻着收藏夹、晒着搜索页的样子——看起来挺悠闲,但内心大概率是慌的&#xff1…

2026/10/20 18:26:50

大模型程序员转型指南:应用开发、微调训练与推理部署全解析

记得去年这个时候,圈子里聊的还是“要不要学大模型”,今年再聊,已经变成“怎么学、从哪儿切入”了。程序员群体对大模型的焦虑,说实话比一般行业更早也更真实——不是因为怕被替代,而是因为我们的工具箱正在被重构&…

2026/10/19 18:06:35

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/20 1:05:37

单片机C运行时从启动到多任务:中断安全与共享资源冲突

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:05:37

GCC编译四步详解:预处理、编译、汇编、链接实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:05:37

FIW线是什么?FEP注塑线与普通氟塑料线的区别及应用指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑