尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

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

AMD ROCm 快速上手:从 0 到 1 的 GPU 加速计算完整路径

AMD ROCm 快速上手:从 0 到 1 的 GPU 加速计算完整路径 AMD ROCm 快速上手从 0 到 1 的 GPU 加速计算完整路径【免费下载链接】legacy-rocm-buildAMD ROCm™ Software - GitHub Home项目地址: https://gitcode.com/GitHub_Trending/ro/legacy-rocm-build训练任务卡在排队等卡上CPU 空转了三天——这是很多团队的日常。AMD ROCm 就是 AMD 的开源 GPU 加速计算平台驱动、数学库rocBLAS/rocFFT、hipcc 编译器、剖析工具到 PyTorch 对接全家桶覆盖。这篇文章带你从装好环境到写出第一个 HIP 核函数走通完整路径。快速上手三步装好 ROCm 并验证 GPU 这一节回答怎么在最短时间内让 GPU 真正可用。开工前先对一遍系统要求免得返工系统Ubuntu 22.04/24.04、RHEL 9、SLES 15 等主流 Linux完整清单见兼容性矩阵GPUInstinct MI 系列或支持列表内的 Radeon 卡资源16GB 内存磁盘预留 20GB 以上Ubuntu 上最稳的安装路径是官方amdgpu-install脚本两条命令加一次重启# 安装 amdgpu-install 脚本Ubuntu 24.04 示例其他发行版按对应源下载 sudo apt install ./amdgpu-install_31.40.1.314001-1_all.deb # 一键装 ROCm--gfxversionauto 自动识别你的 GPU 型号 sudo amdgpu-install --usecaserocm --gfxversionauto sudo reboot如果环境断网或包管理受限换 Runfile 方式安装器自带图形菜单支持离线安装和组件勾选ROCm Runfile 安装器主菜单自动识别发行版与 GPU 型号本例为 Ubuntu 24.04.4 gfx942 卡可在安装前配置、选择组件后一键安装。验证就两条命令预期输出必须对上# ① GPU 被识别列表里应出现你卡对应的 gfx target如 gfx942 rocminfo | grep -i gfx # ② hipcc 编译器可用打印出版本号 /opt/rocm/hip/bin/hipcc --versiongfx 型号出现、版本号正常打印环境就算就绪了。搞清楚能干什么下一步是搞懂它为什么快。原理拆解GPU 并行计算为什么快一个量级 ⚡这一节回答同样的算法搬上 AMD GPU 凭什么快把计算单元CU想象成一个小车间顶上的调度器Scheduler是工头不停派发任务4 个 SIMD 单元是四条流水线一条指令同时处理几十份数据这是 GPU 吞吐的主来源标量单元Scalar Unit干标量与控制的细活每条流水线配大容量寄存器文件整个 CU 还共享一块叫 LDS 的高速本地内存。快的本质不是单线程算得快而是海量线程共用同一条指令数据从寄存器和 LDS 里抓几乎不等慢速的全局内存。单个 CU 的内部构成Scheduler 居上4 个 SIMD 居中LDS 与 VGPR/SGPR 寄存器文件在底部——一条指令处理几十份数据就是它的结构基础。看懂这个结构再理解 HIP 核函数就简单了你只定义每个线程干什么任务派发、指令复用全交给平台。核心实战第一个 HIP 核函数——向量加法 这一节回答从零写一个能编译、能运行、能校验结果的 HIP 程序。新建vector_add.cpp逻辑与上面的 CU 结构一一对应#include hip/hip_runtime.h #include iostream #include vector // 核函数每个线程负责一个元素idx 把全局线程号映射到数组下标 __global__ void vecAdd(const float* a, const float* b, float* c, int n) { int idx hipBlockIdx_x * hipBlockDim_x hipThreadIdx_x; if (idx n) c[idx] a[idx] b[idx]; // 边界检查防止越界写 } int main() { const int n 1024; std::vectorfloat hA(n, 1.0f), hB(n, 2.0f), hC(n, 0.0f); float *dA, *dB, *dC; hipMalloc(dA, n * sizeof(float)); // 申请设备GPU端内存 hipMalloc(dB, n * sizeof(float)); hipMalloc(dC, n * sizeof(float)); // 主机 - 设备搬运这一步是最大的隐形开销后文优化 hipMemcpy(dA, hA.data(), n * sizeof(float), hipMemcpyHostToDevice); hipMemcpy(dB, hB.data(), n * sizeof(float), hipMemcpyHostToDevice); // 4 块 × 256 线程 1024 线程恰好每个元素一个线程 hipLaunchKernelGGL(vecAdd, dim3(4), dim3(256), 0, 0, dA, dB, dC, n); hipDeviceSynchronize(); // 阻塞等 GPU 算完 hipMemcpy(hC.data(), dC, n * sizeof(float), hipMemcpyDeviceToHost); // 结果校验每个元素都应为 3.0 bool ok std::all_of(hC.begin(), hC.end(), [](float v) { return v 3.0f; }); std::cout (ok ? 向量加法成功全部元素为 3.0 : 校验失败) std::endl; hipFree(dA); hipFree(dB); hipFree(dC); return ok ? 0 : 1; }编译运行确认预期输出hipcc -O2 -o vec_add vector_add.cpp ./vec_add # 预期输出向量加法成功全部元素为 3.0API 只需记住四件事hipMalloc申请设备内存hipMemcpy负责主机与设备间搬运hipLaunchKernelGGL指定块数、线程数和参数启动核函数hipDeviceSynchronize阻塞到 GPU 忙完。还有一点常被忽略——HIP 的核函数写法与 CUDA 同构同一份源码可以在 AMD 与 NVIDIA 两个平台编译运行将来换平台不必重写计算逻辑。算子层面的地基打好了就该把活儿交给框架。生态集成PyTorch 与 TensorFlow 一键切换 这一节回答现有 Python 代码要不要推倒重写答案是不要——框架里照旧用torch.cuda这套 APIROCm 自动认出 AMD GPU。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说明 GPU 已被识别。TensorFlow 同理pip3 install tensorflow-rocm python3 -c import tensorflow as tf; print(tf.config.list_physical_devices(GPU))GPU 列表非空训练脚本顺手就能跑。多卡通信由 RCCL 集合通信库兜底与 NCCL 接口对齐。迁移成本低到几乎为零模型代码不动、数据管线不动唯一换掉的是底层硬件。代码能跑不等于跑得快这一节把算力抠满。性能优化把算力用满的三个杠杆 这一节回答为什么我的 HIP 程序比预期慢三个杠杆逐个拉。杠杆一减少数据搬运。主机与设备之间的拷贝往往是最大的隐形开销。把hipMemcpy换成hipMemcpyAsync交给 stream让拷贝与核函数计算并行推进hipStream_t s; hipStreamCreate(s); hipMemcpyAsync(dA, hA, bytes, hipMemcpyHostToDevice, s); // 拷贝挂到 stream与计算重叠 hipStreamSynchronize(s);优化前后差在哪同步版拷贝和计算互相等异步版拷贝延迟基本被藏掉。杠杆二核函数调度。矩阵乘法若让每个线程各自从全局内存读 A 和 B同一份数据会被 DRAM 反复拉取算力被带宽拖死。标准解法是共享内存LDS分块捞一次、块内共享一次全局读取被摊薄 16 次别给 SIMD 流水线留空闲。杠杆三别猜量。rocprof --stats ./vec_add # 核函数级耗时与统计 rocm-smi # 利用率、显存、温度实时监控 rocm-smi --showtopo # 卡间链路类型、跳数与 NUMA 亲和rocm-smi --showtopo 输出GPU 之间的 XGMI/PCIe 链路类型、跳数矩阵与 NUMA 亲和是多卡调度的重要依据。多卡场景先查拓扑再按 NUMA 亲和安排进程。瓶颈定位清楚了大模型进生产也就顺理成章。生产与排障大模型推理与 30 秒排查清单 这一节先给一个生产级用法再给一份排障清单。把 7B LLaMA 推到 AMD GPU 上用 vLLM 高吞吐推理框架pip3 install vllm最小推理脚本from vllm import LLM, SamplingParams llm LLM(modelmeta-llama/Llama-2-7b-chat-hf) # 换成你的模型 out llm.generate([用一句话介绍 AMD ROCm], SamplingParams(temperature0.8, top_p0.95)) print(out[0].outputs[0].text)批量调度、分页 KV cache、量化在 AMD GPU 上都是生产可用的配置这不是玩具演示而是可以直接上线的东西。模型训练 → 推理 → 在线服务的整条链路都能落在 AMD GPU 上![AMD ROCm 模型训练到推理服务流程图](https://raw.gitcode.com/GitHub_Trending/ro/legacy-rocm-build/raw/0210dda6fc6b706e3ef87b3b42593a2adb930983/docs/images/unused/_Model In.png?utm_sourcegitcode_repo_files)模型训练 → 推理 → 在线 serving 的典型链路特征工程、训练、推理、serving 各环节均可在 AMD GPU 上完成。上生产之后难免出状况这份清单让定位问题变成三行命令的事GPU 未识别lspci | grep -i amd /opt/rocm/bin/rocminfo | grep -i gfx预期输出lspci 出现 AMD/ATI 的 3D controllerrocminfo 里有对应 gfx target若为空优先查驱动与 video/render 用户组。HIP 编译报错which hipcc hipcc --version source /opt/rocm/setenv.sh预期输出路径指向 /opt/rocm/hip/bin/hipcc 并打印版本找不到就先 source 环境脚本再试。显存不足out of memoryrocm-smi --showmeminfo vram预期输出逐卡列出 VRAM 的 Free/Total一眼看出是真占满了还是碎片。再备两件深挖工具rocgdb ./vec_add断点单步看核函数启动路径rocprof -i input.txt -o trace.csv ./vec_add生成 trace 数据导入剖析工具。延伸资源与下一步 想深入仓库里这几个目录都备好了安装指南docs/install/含 runfile 安装全流程截图GPU 架构参考docs/reference/gpu-arch/系统优化指南docs/reference/system-optimization/分布式多卡是自然的下一站动手前先验证卡间带宽RCCL 集合通信测试就是标准动作RCCL 八卡 all-reduce 带宽测试MI300X 八卡节点上总线带宽稳定在数百 GB/s是分布式训练前的常规验证。三个练手小项目每个都能做出对比数据写不同规模的矩阵乘法输出一张 CPU vs GPU 耗时对照表用 HIP 实现图像滤波量出相对 CPU 的加速比用 PyTorch ROCm 训一个小 NN对比 CPU 上的 step 耗时社区侧有 ROCm GitHub 仓库提 issue、看 PR 讨论、AMD 开发者论坛与官方文档中心。下一步挑一个就能开始git clone https://gitcode.com/GitHub_Trending/ro/legacy-rocm-build拉下最新文档与示例跑通share/hip/samples/下的全部示例重点看多卡那几个去社区提问题或把自己的优化结果分享出去探索多 GPU 编程与分布式训练用 RCCL 实测一下卡间带宽机器已经热好了GPU 在等你的下一个核函数。【免费下载链接】legacy-rocm-buildAMD ROCm™ Software - GitHub Home项目地址: https://gitcode.com/GitHub_Trending/ro/legacy-rocm-build创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表