H100 服务器 CUDA + PyTorch 环境速配指南

想在全新的 Ubuntu-24.04 + H100 机器上“第一天就跑通 GPU 代码”?

📚 基本概念速读

名称 定义 省流
CUDA NVIDIA 的并行计算平台 + 运行时/驱动 + C/C++ 扩展(带 __global__/__device__ 等关键字)。 GPU 编程底座
PyTorch 流行的深度学习框架,支持动态图,torch.Tensor 可在 GPU 上做张量运算。 DL 里最火的“积木”
Wheel (.whl) Python 的二进制打包格式,包含编译好的扩展。带 +cu124 表示内置 CUDA‐12.4。 “pip 装包”的快递盒
nvcc CUDA C/C++ 编译器前端,.cu → PTX/SASS,可指定 -arch=sm_xx 编译 .cu
nvdisasm PTX/SASS 反汇编工具,用来看编译后指令。 拆快递看指令
Compute Sanitizer GPU 版 “Valgrind”,检测越界、数据竞争等。 GPU 内存查错
conda / mamba 包/环境管理器,用独立前缀隔离 Python & 依赖,避免系统污染。 独立小房间
pip Python 官方包管理器,配 --index-url 拉特定 wheel;需在虚拟环境或 conda env 下用。 安装 Python 包

省流:CUDA = GPU 底座;PyTorch = AI 积木;wheel = 打好车的包;nvcc/nvdisasm/sanitizer = 编译/查看/查错工具;conda/pip = 装包管家。

📄 .cu 文件到底是什么?

.cu 是 NVIDIA CUDA 源文件默认扩展名,可同时放 CPU 端 C/C++ 代码和 GPU 端 kernel:

  1. CPU 端(Host)代码:普通 C/C++ 语句,由主机 CPU 执行。
  2. GPU 端(Device)代码:用 __global__ / __device__ / __host__ 关键字标注的函数或 <<<grid,block>>> 启动的 kernel,将被编译为 PTX/SASS 在 GPU 上跑。

为什么单独用 .cu? - 让 nvcc 识别文件需要“双重编译”:CPU 端交给主机编译器,GPU 端生成 PTX/SASS。
- 一个文件里即可 cudaMalloc/cudaMemcpy 及定义 kernel,方便小项目/快速实验。

常见编译方式:

1
2
3
4
5
6
# 直接生成可执行
nvcc vec_add.cu -o vec_add

# 先生成对象,再由 g++ 链接
nvcc -c my_kernel.cu -o my_kernel.o
g++ host_main.cpp my_kernel.o -lcudart -L/usr/local/cuda/lib64

特性 .c/.cpp .cu
写 CPU 代码
写 GPU kernel
编译器 gcc/clang nvcc(内部仍调 gcc/clang 处理 Host 部分)
关键字 __global__ __device__
启动 kernel kernel<<<grid,block>>>(...)

省流:.cu = 普通 C/C++ + GPU kernel,只要用 nvcc 就能编译运行。

🖥️ 1 系统信息

组件 版本
OS Ubuntu 24.04.2 LTS (x86-64)
GPU NVIDIA H100 PCIe
驱动 570.133.20
目标 CUDA 12.6 (系统 Runtime)
12.4 (PyTorch wheel 内置)

🔧 2 安装 CUDA 工具链

1
2
3
4
5
6
7
8
# 1) 添加官方仓库
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

# 2) 安装核心工具
sudo apt install -y cuda-toolkit-12-6 # nvcc / nvdisasm
sudo apt install -y nvidia-compute-sanitizer # Compute Sanitizer

验证版本

1
2
nvcc --version && nvdisasm --version && compute-sanitizer --version
nvidia-smi | head -5

📦 3 Conda 环境隔离

  1. 安装 Miniforge
    1
    2
    3
    wget -O Miniforge3.sh https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-x86_64.sh
    bash Miniforge3.sh -b -p $HOME/miniforge
    eval "$($HOME/miniforge/bin/conda shell.zsh hook)"
  2. 把缓存/临时目录挪到大分区(假设 /opt/ext 空间充足)
    1
    2
    3
    4
    5
    6
    7
    sudo mkdir -p /opt/ext/conda_pkgs /opt/ext/tmp && \
    sudo chown -R $USER:$USER /opt/ext/conda_pkgs /opt/ext/tmp

    # ~/.condarc
    printf "pkgs_dirs:\n - /opt/ext/conda_pkgs\n" > ~/.condarc
    # ~/.zshrc
    echo 'export TMPDIR=/opt/ext/tmp' >> ~/.zshrc && source ~/.zshrc
  3. 创建 GPU 环境
    1
    2
    conda create -n gpu python=3.11 -y
    conda activate gpu

🔥 4 安装 GPU 版 PyTorch(CUDA-12.4 wheel)

1
2
3
python -m pip install --upgrade pip
pip install --no-cache-dir torch torchvision torchaudio \
--index-url https://download.pytorch.org/whl/cu124

注意
• 轮子名必须带 +cu124,否则是 CPU 版。
--no-cache-dir 省磁盘。

快速验证

1
2
3
4
5
6
python - <<'PY'
import torch, torchvision
print(torch.__version__, torch.version.cuda, torch.cuda.is_available())
print(torchvision.__version__)
PY
# ➜ 2.6.0+cu124 12.4 True

📝 5 生成环境日志

1
2
3
python projects/gpu_fuzz/gen/collect_env.py \
> projects/gpu_learn/log/env.txt 2>&1
head -n 24 projects/gpu_learn/log/env.txt

重点确认:

1
2
3
PyTorch version: 2.6.0+cu124
CUDA runtime version: 12.6.85
Is CUDA available: True

详细解读(常见疑问都在这里): - PyTorch version: 2.6.0+cu124 —— 2.6.0 是框架版本;+cu124 表示它自带 CUDA-12.4 编译产物(cuDNN/cuBLAS 等)。 - Is debug build: False —— 官方 Release 版(True 时为带断言的调试版,速度慢)。 - CUDA used to build PyTorch: 12.4 —— wheel 内置的编译 CUDA 版本;与系统 runtime 12.6 向下兼容即可。 - OS / GCC / Clang / CMake —— 编译本地 C++/CUDA 扩展时要用到的工具链版本,记录可复现性。 - Python version: 3.11.x (conda-forge) —— 确认与你的虚拟环境一致,便于后续 pip install ABI 兼容。 - Is CUDA available: True —— torch.cuda.is_available() 结果,若 False 请先查驱动 / 环境变量。 - CUDA runtime version: 12.6.85 —— 驱动自带的 libcuda.so runtime 版本,只要 ≥ wheel 内的 12.4 即 OK。 - CUDA_MODULE_LOADING: LAZY —— 默认懒加载 PTX,可减少启动时延;如需即时插桩可设 EAGER。 - GPU 0: NVIDIA H100 PCIe —— 检测到的物理 GPU,与预期硬件相符。 - cuDNN/cuBLAS/cuFFT/… —— 列表展示 wheel 自带的具体子库版本,用于排查 “库不匹配” 问题。 - CPU:及后续 —— 主机硬件与漏洞缓解信息,可忽略;仅在编译器优化或虚拟化环境排错时有用。

省流:三行打勾 + 驱动≥CUDA + GPU 型号正确 = 环境健康。

🛠️ 6 最小 CUDA 样例验证

  1. 编译
    1
    2
    cd projects/gpu_learn
    nvcc vec_add.cu -o vec_add -O2
  2. 运行 & Sanitizer
    1
    2
    ./vec_add                                    # → [vec_add] PASS
    compute-sanitizer --tool memcheck ./vec_add # → ERROR SUMMARY: 0 errors

📸 7 版本自检截图清单

  1. nvcc --version
  2. nvidia-smi(前 5 行)
  3. nvdisasm --version (可选)
  4. compute-sanitizer --version
  5. projects/gpu_learn/log/env.txt(前 24 行)

全部放入 gpu_learn/log/ 即完成 Day-1 验收。

⚠️ 8 关键注意事项速览

事项 说明
GPU 轮子 torch …+cuXXX 必须与目标 CUDA 一致;纯版本号 = CPU 轮子
驱动 ≥ CUDA 驱动 570 支持 CUDA 12.x,无需额外系统级 Runtime
独立包目录 pkgs_dirs & TMPDIR 指向大分区,避免 / 爆盘
PEP 668 系统 Python 禁止 pip,务必用 Conda/venv
Sanitizer 延迟加载 CUDA_MODULE_LOADING=LAZY 已在 env.txt 中展示

至此,阶段 0 / Day-1 环境就绪,接下来可愉快开发 CUDA/PyTorch 应用 🚀