← 返回目录

初步规划 SM80_St1 —— WSL 环境下安装 torch 与跑通 ncu(Nsight Compute)

记录时间:调查当天 涉及仓库:/home/hyxseu/ws/CUDAcourse/workspace/vitamin-cuda(子目录 kernels/hgemm) 目标文件:kernels/hgemm/test.py、kernels/hgemm/test_for_ncu.py 说明:本次只做调查与规划,未修改仓库任何文件。


0. 背景与需求

  1. 需要运行 ./kernels/hgemm/test.py 和 kernels/hgemm/test_for_ncu.py。
  2. 当前在 WSL 下配置环境;Windows 宿主里 nvidia-smi 不在 PATH,但有 nvcc。
  3. 原以为 GPU 是 SM80(后续会改 hgemm 测试内容剔除 TMA 相关部分)——实测 GPU 其实是 sm_86,详见下文。
  4. 本次要回答两问:

1. 环境实测事实(调查报告)

项目 实测结果 备注
系统 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)`

1.1 ncu 失败的直接复现(实测)

写了一个最小 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 前置条件的问题。


2. Q1:torch 装哪个版本、怎么装

2.1 推荐方案(最短路径)

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

2.2 为什么选 2.5.1 + cu121

2.3 其它可选 / 不推荐

2.4 踩坑提醒

2.5 运行前的环境变量

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

3. Q2:ncu 要怎样才能跑起来

3.1 官方对 WSL 的支持条件(查证结果)

来自 Nsight Compute Release Notes / System Requirements:

3.2 必须做的四件事

① 升级 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 侧环境

3.3 验证与使用

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

3.4 备选方案(Windows 侧计数器实在开不了时)

  1. 用已装好的 nsys profile -o rep python test_for_ncu.py 做时间线级分析(WSL 完全支持);
  2. 把 hgemm 单独编译成可执行文件,在原生 Linux / 云 GPU 上跑 ncu;
  3. 按官方文档,Nsight Compute 支持 remote profiling(SSH 到 WSL2 目标),可作为绕过本机限制的手段。

4. 完整操作清单(照抄执行)

# ---------- 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

5. 结论 / 备忘要点

  1. GPU 是 RTX 3050(sm_86,8GB),不是 SM80 → TORCH_CUDA_ARCH_LIST=8.6。
  2. torch:2.5.1 + cu121(venv 安装);ninja 必须装;nvcc 12.0 编译扩展只会 warning 不会 fail;torch ≥ 2.7 不建议。
  3. pip 的 nvidia-cuda-nvcc-cu12 没有 nvcc 本体,别指望用它替代 toolkit。
  4. ncu 现在跑不了是版本 + WSL 前置条件问题,四件事:
  5. 备选:nsys(已装)做时间线分析;或远程/native Linux 上跑 ncu。
  6. kernels/hgemm 当前没有 TMA 代码(只有 cp.async / ldmatrix / mma.sync m16n8k16),sm_86 可直接跑;将来加 TMA 才需要剔除。
  7. WSL 上 ncu 的固有限制:PM Sampling 不支持、--set full 多次 replay 慢、Source/SASS 关联可能不完整。

6. 参考链接