HelloGPU-P00-入门与硬件速通

本系列学习笔记源自开源项目:https://github.com/datawhalechina/hello-gpu 。是自己在学习过程上的记录与心得。

第0篇 入门与硬件速通

0.0 项目介绍与学习提示

你要学什么 学完能做什么 大约时间
第 0 篇 入门 环境验证、GPU 体系结构、第一个程序 跑通环境,建立硬件直觉 1-2 天
第 1 篇 Profiling benchmark、rocprof、性能记录 找到 kernel 慢在哪里 2-3 天
第 2 篇 算子 + 刷题 Reduction / Softmax / GEMM / Attention + 刷题 从 naive 优化到接近极限 5-7 天
第 3 篇 Agent 算子层 Agent 入门、工具封装、多轮优化 让 Agent 自动优化 kernel 3-4 天
第 4 篇 真实模型 + Agent YOLO / LLM + Agent 优化 对真实模型做自动优化 3-4 天

0.1 环境准备

参考文档:第 1 章 环境准备

根据环境修改配置

此处使用“AUP Learning Cloud”的环境,账号申请通过后,登录启动: 20260921160513774.png

启动学习环境后,只能以jovyan用户操作,进入如下目录/home/jovyan/hello-gpu/code/part0-intro,在左侧目录树中也打开此目录,双击pyproject.toml文件打开它进行编辑(因为无法以jovyan用户安装工具,所以无法安装vim之类的工具),将如下这些两处进行注释或修改。 修改处1:(猜测:应该是容器有代理且能正常访问外网)国内镜像站(清华源/北外源)对这个相关翻墙代理/IP 返回了403 阻断/禁封,或者镜像站本身的防刷机制触发了封禁,故直接使用默认的 Python 官方源(PyPI)。将如下行注释掉。

1
2
3
4
5
6
7
...
# 大概第21行处
#[[tool.uv.index]]
#name = "pypi-mirror"
#url = "https://mirrors.bfsu.edu.cn/pypi/web/simple"
#default = true
...

修改处2:参考 附录 B · 换一张卡:切换 ROCm 10.0 的 GPU 架构 根据自己使用GPU型号与构架修改device-gfx1201 为 合适的 “AMD GPU 硬件架构”的依赖扩展标记。此次使用的是,故修改成如下(即将第8行附近的device-gfx1201全部替换成device-gfx1151,共有3处需要替换):

1
2
3
4
5
6
7
8
9
10
11
12
[project]
name = "part0-intro"
version = "0.1.0"
requires-python = ">=3.12,<3.13"
dependencies = [
"numpy>=2.4.4",
"matplotlib>=3.9",
"torch[device-gfx1151]==2.13.0+rocm10.0.0",
"torchvision[device-gfx1151]==0.28.0+rocm10.0.0",
"torchaudio==2.11.0.2+rocm10.0.0",
"rocm[devel,device-gfx1151]==10.0.0",
]

同步本篇 uv 环境:

1
(part0-intro) jovyan@jupyter-sanyinjiang:~/hello-gpu/code/part0-intro$ uv sync

同步完成后,激活本篇环境:

1
2
3
4
5
6
7
8
(part0-intro) jovyan@jupyter-sanyinjiang:~/hello-gpu/code/part0-intro$ source ./activate-rocm.sh
Activated ROCm uv environment:
PROJECT: /home/jovyan/hello-gpu/code/part0-intro
VENV: /home/jovyan/hello-gpu/code/part0-intro/.venv
ROCM_PATH: /home/jovyan/hello-gpu/code/part0-intro/.venv/lib/python3.12/site-packages/_rocm_sdk_devel
Python: /home/jovyan/hello-gpu/code/part0-intro/.venv/bin/python
ROCm SDK: 10.0.0
Python 3.12.3
激活后检查 SDK 和 PyTorch 版本(gfx1151 / ROCm 10.0):
1
2
3
4
(part0-intro) jovyan@jupyter-sanyinjiang:~/hello-gpu/code/part0-intro$ rocm-sdk version
10.0.0
(part0-intro) jovyan@jupyter-sanyinjiang:~/hello-gpu/code/part0-intro$ python -c "import torch; print(torch.__version__)"
2.13.0+rocm10.0.0

验证 GPU 可见性

1
2
3
4
5
6
7
8
9
10
11
12
13
(part0-intro) jovyan@jupyter-sanyinjiang:~/hello-gpu/code/part0-intro$ rocminfo | grep -E "^[[:space:]]*(Name|Marketing Name|Vendor Name|Device Type|Compute Unit):" | head -20
Name: AMD RYZEN AI MAX+ PRO 395 w/ Radeon 8060S
Marketing Name: AMD RYZEN AI MAX+ PRO 395 w/ Radeon 8060S
Vendor Name: CPU
Device Type: CPU
Compute Unit: 32
Name: gfx1151
Marketing Name: AMD Radeon 8060S Graphics
Vendor Name: AMD
Device Type: GPU
Compute Unit: 40
Name: amdgcn-amd-amdhsa--gfx1151
Name: amdgcn-amd-amdhsa--gfx11-generic

rocminfo 识别到 gfx1151 GPU(AMD Ryzen AI Max+ 395 (Radeon 8060S))。

查看 GPU 的当前状态:

1
2
3
4
5
(part0-intro) jovyan@jupyter-sanyinjiang:~/hello-gpu/code/part0-intro$ amd-smi version
AMDSMI Tool: 27.0.0+6b0e43f3 | AMDSMI Library version: 27.0.0 | ROCm version: 10.0.0 | amdgpu version: N/A | ionic version: N/A
(part0-intro) jovyan@jupyter-sanyinjiang:~/hello-gpu/code/part0-intro$ amd-smi monitor
GPU XCP POWER GPU_T MEM_T GFX_CLK GFX% MEM% ENC% DEC% VRAM_USAGE
0 0 7 W 24 °C N/A 610 MHz 0 % N/A N/A N/A 0.1/ 64.0 GB

验证 PyTorch ROCm

1
2
3
4
5
6
7
8
9
10
(part0-intro) jovyan@jupyter-sanyinjiang:~/hello-gpu/code/part0-intro$ python chapter1/check_torch_rocm.py
python: 3.12.3
torch: 2.13.0+rocm10.0.0
cuda_available: True
device_count: 1
device_name: AMD Radeon 8060S Graphics
result_shape: (1024, 1024)
result_dtype: torch.float32
result_device: cuda:0
result_checksum: 28381.671875

这个脚本做了三件事:导入 PyTorch、检查 GPU 后端、在 GPU 上跑一次 1024 × 1024 矩阵乘。 此处出现的cuda相关字样,并不代表底层使用NVIDIA GPU,而是由于历史命名原因,将加速设备名称前缀写成固定的了,而不是根据不同的设备厂商来读取或映射不同的设备名称。

验证最小 HIP 程序

先确认一下 hipcc 版本

1
2
3
4
5
6
7
# 这个命令顺带还能验证编译器路径是否在 `_rocm_sdk_devel` 下面
(part0-intro) jovyan@jupyter-sanyinjiang:~/hello-gpu/code/part0-intro$ hipcc --version
HIP version: 7.15.26333-0000000
AMD clang version 23.0.0git (https://github.com/ROCm/llvm-project.git 8f497e0992fb7513f7f78a6f6b6f1056c375e961)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /home/jovyan/hello-gpu/code/part0-intro/.venv/lib/python3.12/site-packages/_rocm_sdk_devel/lib/llvm/bin

然后编译 HIP 程序:

1
2
3
4
# 检验 HIP 编译器能不能找到 GPU 对应的 device library
(part0-intro) jovyan@jupyter-sanyinjiang:~/hello-gpu/code/part0-intro$ cd chapter1/
(part0-intro) jovyan@jupyter-sanyinjiang:~/hello-gpu/code/part0-intro/chapter1$ hipcc vector_add.hip -O2 -o vector_add && echo "compile_status: PASS"
compile_status: PASS

运行程序:

1
2
3
4
5
6
7
(part0-intro) jovyan@jupyter-sanyinjiang:~/hello-gpu/code/part0-intro/chapter1$ ./vector_add
device_name: AMD Radeon 8060S Graphics
vector_size: 1048576
blocks: 4096
threads_per_block: 256
max_error: 0
status: PASS

0.2 GPU 体系结构(上):编程模型与 wavefront 执行

0.3 GPU 体系结构(下):片上资源与数据通路

0.4 第一个程序 + 性能分析


HelloGPU-P00-入门与硬件速通
https://jiangsanyin.github.io/2026/09/20/HelloGPU-P00-入门与硬件速通/
作者
sanyinjiang
发布于
2026年9月20日
许可协议