记录时间:调查当天 涉及仓库:
/home/hyxseu/ws/CUDAcourse/workspace/vitamin-cuda(子目录kernels/hgemm) 目标文件:kernels/hgemm/test.py、kernels/hgemm/test_for_ncu.py说明:本次只做调查与规划,未修改仓库任何文件。
./kernels/hgemm/test.py 和 kernels/hgemm/test_for_ncu.py。nvidia-smi 不在 PATH,但有 nvcc。| 项目 | 实测结果 | 备注 |
|---|---|---|
| 系统 | WSL2 / Ubuntu 24.04.1 (noble),内核 6.18.54.1-microsoft-standard-WSL2 |
/etc/os-release |
| Python | 3.12.3,pip 24.0(Ubuntu 系统 pip) |
存在 /usr/lib/python3.12/EXTERNALLY-MANAGED → PEP 668,pip 直接装包会被拒,必须用 venv |
| GPU | NVIDIA GeForce RTX 3050,8 GB,compute_cap = 8.6 | nvidia-smi --query-gpu=name,compute_cap,driver_version --format=csv → RTX 3050, 8.6, 595.97 |
| 驱动 | Windows 侧 595.97(WSL 内 libcuda.so.1 来自 Windows 驱动),CUDA 13.2 能力 |
向下兼容所有 CUDA 12.x runtime |
nvidia-smi |
其实存在,只是不在 PATH:/usr/lib/wsl/lib/nvidia-smi |
export PATH=$PATH:/usr/lib/wsl/lib 后可用 |
nvcc |
12.0.140(/usr/local/cuda-12.0),gcc 正常 |
已实测 nvcc -arch=sm_86 编译+运行成功(err=no error) |
| torch | 未安装(ModuleNotFoundError: No module named 'torch') |
|
ncu |
已安装但不可用:/usr/bin/ncu → 2022.4.1(Ubuntu noble 自带 nsight-compute 12.0 包,dpkg: nsight-compute 2022.4.1.6~12.0.1-4build4) |
apt 源里最高也只有 2022.4.1,无法通过 apt 升级 |
nsys |
已安装(/usr/bin/nsys),WSL 上可用 |
作为 ncu 的备选 |
/dev/dxg |
存在 | WSL 剖析计数器靠它转发 |
| hgemm 代码现状 | kernels/hgemm/{hgemm.cu,cublas.cu,test.py,test_for_ncu.py} + kernels/common/pack.cuh;完全没有 TMA / cp.async.bulk / mbarrier |
只有 cp.async(sm80+)、ldmatrix(.trans)、mma.sync.m16n8k16;也没有 __CUDA_ARCH__ >= 900 的分支 → 在 sm_86 上本来就能编能跑,后续若要加 TMA 才需处理 |
run_ncu.sh |
`ncu -k regex:"gemm | Kernel" --set full -o profile_res -f python test_for_ncu.py` |
kernels/hgemm/readme.md 里给的运行方式 |
`export TORCH_CUDA_ARCH_LIST=$(nvidia-smi --query-gpu=compute_cap --format=csv,noheader | head -n 1)` |
写了一个最小 CUDA 程序 /tmp/t.cu(nvcc -arch=sm_86 编译,kernel 正常执行),运行:
$ ncu --set full -o prof -f ./t
==PROF== Connected to process 36161 (/tmp/t)
==ERROR== Profiling is not supported on device 0 as it uses the Windows Subsystem for Linux (WSL).
Refer to https://docs.nvidia.com/nsight-compute/ReleaseNotes/#system-requirements
==PROF== Disconnected from process 36161
err=no error
==WARNING== No kernels were profiled.
结论:不是代码问题,是 ncu 版本(2022.4.1)+ WSL 前置条件的问题。
cd ~/ws/CUDAcourse/workspace/vitamin-cuda
python3 -m venv .venv && source .venv/bin/activate # 必须 venv(PEP668 externally-managed)
pip install -U pip
pip install ninja # torch.utils.cpp_extension.load 需要 ninja
pip install torch==2.5.1 --index-url https://download.pytorch.org/whl/cu121
torch==2.4.1+cu121:更保守,和 nvcc 12.0 更近,同样可用。torch==2.6.0+cu124:可用(仍属 12.x 次版本差异,只 warning)。cuda-toolkit-12-4(见 4.2)。pip install nvidia-cuda-nvcc-cu12 只有 ptxas / nvvm / libdevice,没有 nvcc 本体(已下载 12.1.105 wheel 验证:只有 bin/ptxas、nvvm/、include/),不能用来替代 CUDA toolkit。pip3 install torch 都会报 error: externally-managed-environment,必须 venv(或 --break-system-packages,不推荐)。export PATH=$PATH:/usr/lib/wsl/lib # 让 nvidia-smi 可用(readme 里的命令依赖它)
export TORCH_CUDA_ARCH_LIST=8.6 # 实测是 8.6,不是 8.0
cd kernels/hgemm && python test.py
TORCH_CUDA_ARCH_LIST 时 load() 会自动探测设备能力(也是 8.6),但显式设置更稳、编译更快。test.py 里 n=8192 的 bf16 矩阵单张 128 MB,a/b/c 共约 384 MB,无压力;test_for_ncu.py 在 ncu 下多 pass replay 时耗时显著变长。来自 Nsight Compute Release Notes / System Requirements:
--set full 需多 pass replay,较慢。① 升级 ncu(必须)
apt 源最高只有 2022.4.1,需用 NVIDIA 官方 .run 安装器装新版:
cd ~/Downloads
wget https://developer.download.nvidia.com/compute/nvidia-nsight-compute/2025.3.1/nsight-compute-linux-2025.3.1.0-35578880.run
chmod +x nsight-compute-linux-*.run
sudo ./nsight-compute-linux-*.run --toolkit --quiet # 只要 CLI 可用 --cli-only
export PATH=/usr/local/nsight-compute/2025.3.1:$PATH
hash -r; which -a ncu; ncu --version # 确认 PATH 里新版本优先于 /usr/bin/ncu
(也可加 NVIDIA apt 源后 sudo apt install nsight-compute-12-8;驱动 595 支持 CUDA 13.2,装 CUDA 13 系列的 ncu 也 OK。)
② 确认 Windows 宿主版本
winver → 必须是 Windows 11(Win10 则需 build ≥ 19044)。驱动版本已满足。
③ Windows 宿主开启性能计数器权限(最易漏)
NVIDIA 控制面板 →「管理 → 系统设置 → 桌面」→ 勾选
“Allow access to performance counters to applications”(允许应用访问性能计数器)。
不开这一步,WSL 内 ncu 会报 ERR_NVGPUCTRPERM;sudo 无效,权限由 Windows 侧控制。
④ WSL 侧环境
/dev/dxg 存在 ✔(已确认);export PATH=/usr/local/nsight-compute/2025.3.1:$PATH
cd kernels/hgemm
ncu --set full -k regex:"gemm|Kernel" -o profile_res -f python test_for_ncu.py
# 结果用 Windows 侧安装的 Nsight Compute GUI 打开 profile_res.ncu-rep
nsys profile -o rep python test_for_ncu.py 做时间线级分析(WSL 完全支持);# ---------- 4.1 torch ----------
cd ~/ws/CUDAcourse/workspace/vitamin-cuda
python3 -m venv .venv && source .venv/bin/activate
pip install -U pip
pip install ninja
pip install torch==2.5.1 --index-url https://download.pytorch.org/whl/cu121
# ---------- 4.2 (可选)对齐 nvcc 版本 ----------
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb && sudo apt update
sudo apt install cuda-toolkit-12-4
export CUDA_HOME=/usr/local/cuda-12.4 && export PATH=$CUDA_HOME/bin:$PATH
# ---------- 4.3 每次新 shell 的环境变量 ----------
export PATH=$PATH:/usr/lib/wsl/lib # nvidia-smi
export TORCH_CUDA_ARCH_LIST=8.6 # 实测 sm_86
# export PATH=/usr/local/nsight-compute/2025.3.1:$PATH # 新版 ncu
# ---------- 4.4 跑测试 ----------
cd kernels/hgemm
python test.py
ncu --set full -k regex:"gemm|Kernel" -o profile_res -f python test_for_ncu.py
TORCH_CUDA_ARCH_LIST=8.6。2.5.1 + cu121(venv 安装);ninja 必须装;nvcc 12.0 编译扩展只会 warning 不会 fail;torch ≥ 2.7 不建议。nvidia-cuda-nvcc-cu12 没有 nvcc 本体,别指望用它替代 toolkit。/dev/dxg 存在、单 GPU(均已满足)。nsys(已装)做时间线分析;或远程/native Linux 上跑 ncu。kernels/hgemm 当前没有 TMA 代码(只有 cp.async / ldmatrix / mma.sync m16n8k16),sm_86 可直接跑;将来加 TMA 才需要剔除。--set full 多次 replay 慢、Source/SASS 关联可能不完整。