第一章:开发环境搭建——磨刀不误砍柴工

各位同学,欢迎来到《TensorCore实战指南》。

我是你们这门课的老师,一个在GPU计算和深度学习优化领域摸爬滚打了七八年的老工程师。今天咱们开始第一课:搭建开发环境。

说实话,我见过太多人一上来就急着写代码,结果环境没配好,折腾两天连个矩阵乘法都跑不起来。嗯,这其实是最亏的。所以我个人习惯,每到一个新项目,第一件事就是把环境理得清清楚楚。你想想看,TensorCore再厉害,驱动没装对,它也发挥不出来啊。

核心目标: 让NVIDIA驱动、CUDA Toolkit、cuDNN、PyTorch/TensorFlow在你的机器上协同工作,并且能用nvcc和nvidia-smi验证一切正常。

1.1 NVIDIA驱动安装——这是地基

驱动是GPU和操作系统之间的翻译官。没有它,你的显卡就是个摆设。

怎么选版本?

  • 去NVIDIA官网下载对应你显卡型号的最新驱动。我建议选Game Ready Driver或者Studio Driver都行,但别选太老的版本。
  • 如果你用的是数据中心卡(比如A100、V100),记得选Data Center Driver。

我的经验: 我曾经在Ubuntu上装驱动,直接用了系统自带的nvidia-driver-470,结果CUDA 12.x死活不认。后来发现驱动版本太旧了。所以记住:驱动版本必须 >= CUDA Toolkit要求的最低版本。你可以用nvidia-smi查看当前驱动版本。

安装步骤(以Ubuntu 22.04为例):

# 1. 先卸载旧驱动(如果有)
sudo apt-get purge nvidia*

# 2. 添加NVIDIA官方驱动PPA
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update

# 3. 查看推荐版本
ubuntu-drivers devices

# 4. 安装推荐版本(比如535)
sudo apt-get install nvidia-driver-535

# 5. 重启
sudo reboot

# 6. 验证
nvidia-smi

看到类似下面的输出,就说明驱动装好了:

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 535.86.05    Driver Version: 535.86.05    CUDA Version: 12.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  NVIDIA A100-PCIE...  Off  | 00000000:00:04.0 Off |                    0 |
| 30%   35C    P0    42W / 250W |      0MiB / 40960MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

注意: 如果你在Windows上装,直接去官网下载.exe安装包,一路下一步就行。但记得选“自定义安装”,把“CUDA”组件勾上——虽然我们后面还要单独装CUDA Toolkit,但驱动自带的CUDA版本可以用来做初步验证。

1.2 CUDA Toolkit 12.x安装——核心武器

驱动装好了,接下来装CUDA Toolkit。这个工具包包含了编译器nvcc、各种库(如cuBLAS、cuFFT)、以及调试工具。

为什么选12.x? 因为TensorCore在CUDA 11.x之后有了重大改进,而12.x对Hopper架构(H100)支持最好。我个人建议直接上12.3或12.4,稳定且功能全。

安装步骤:

# 1. 去NVIDIA官网下载runfile(推荐,因为可以自定义路径)
wget https://developer.download.nvidia.com/compute/cuda/12.3.0/local_installers/cuda_12.3.0_535.104.05_linux.run

# 2. 运行安装
sudo sh cuda_12.3.0_535.104.05_linux.run

# 3. 安装时注意:
#    - 不要勾选“Driver”(因为我们已经装过了)
#    - 选择安装路径(默认/usr/local/cuda-12.3)
#    - 同意协议

# 4. 配置环境变量
echo 'export PATH=/usr/local/cuda-12.3/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.3/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

# 5. 验证
nvcc --version

如果看到类似下面的输出,恭喜你,CUDA Toolkit装好了:

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Wed_Nov_22_10:17:15_PST_2023
Cuda compilation tools, release 12.3, V12.3.107

避坑指南: 我曾经在服务器上同时装了CUDA 11.8和12.3,结果nvcc指向了旧版本。解决办法是:用which nvcc查看路径,然后手动调整PATH顺序。或者干脆只装一个版本,省心。

1.3 cuDNN配置——深度学习加速器

cuDNN是NVIDIA专门为深度学习优化的库。它封装了卷积、池化、归一化等操作,底层直接调用TensorCore。说白了,没有cuDNN,你的神经网络训练速度会慢一个数量级。

安装步骤:

# 1. 去NVIDIA官网下载cuDNN(需要注册账号)
#    选择对应CUDA 12.x的版本,比如cuDNN 8.9.5 for CUDA 12.x

# 2. 解压
tar -xzvf cudnn-linux-x86_64-8.9.5.30_cuda12-archive.tar.xz

# 3. 复制文件到CUDA目录
sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda-12.3/include
sudo cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda-12.3/lib64

# 4. 设置权限
sudo chmod a+r /usr/local/cuda-12.3/include/cudnn*.h
sudo chmod a+r /usr/local/cuda-12.3/lib64/libcudnn*

# 5. 验证
cat /usr/local/cuda-12.3/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

输出应该类似:

#define CUDNN_MAJOR 8
#define CUDNN_MINOR 9
#define CUDNN_PATCHLEVEL 5

注意: cuDNN的版本必须和CUDA Toolkit版本匹配。比如CUDA 12.3对应cuDNN 8.9.x。我曾经见过有人把cuDNN 8.4硬塞给CUDA 12.x,结果编译时一堆undefined reference错误。别问我怎么知道的。

1.4 PyTorch/TensorFlow环境配置——上战场

环境搭好了,现在装深度学习框架。这里我建议用conda管理环境,隔离性好,不会把系统搞乱。

PyTorch安装:

# 创建conda环境
conda create -n torch_tc python=3.10
conda activate torch_tc

# 安装PyTorch(CUDA 12.x版本)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

# 验证
python -c "import torch; print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0))"

如果输出True和你的显卡型号(比如NVIDIA A100-PCIE-40GB),说明PyTorch能调用GPU了。

TensorFlow安装:

# 创建另一个conda环境
conda create -n tf_tc python=3.10
conda activate tf_tc

# 安装TensorFlow
pip install tensorflow

# 验证
python -c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))"

如果看到类似[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')],说明TensorFlow也认出了你的显卡。

我的建议: 如果你主要用PyTorch,可以只装PyTorch。但如果你做多框架开发,建议用conda环境隔离,每个环境装不同的框架版本。我曾经在一个环境里同时装PyTorch和TensorFlow,结果因为protobuf版本冲突,折腾了一下午。嗯,从那以后我就老老实实用conda环境了。

1.5 nvcc与nvidia-smi验证——最终检查

最后,我们来做个全面验证。确保驱动、CUDA Toolkit、cuDNN、框架全部正常工作。

验证清单:

工具 命令 预期输出
驱动 nvidia-smi 显示GPU信息、驱动版本、CUDA版本
CUDA Toolkit nvcc --version 显示CUDA编译工具版本
cuDNN cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR 显示cuDNN版本号
PyTorch python -c "import torch; print(torch.cuda.is_available())" True
TensorFlow python -c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))" 显示GPU设备列表

一个完整的测试脚本:

#!/bin/bash
echo "=== 1. nvidia-smi ==="
nvidia-smi --query-gpu=name,driver_version --format=csv,noheader

echo "=== 2. nvcc ==="
nvcc --version | grep "release"

echo "=== 3. cuDNN ==="
cat /usr/local/cuda/include/cudnn_version.h 2>/dev/null | grep CUDNN_MAJOR

echo "=== 4. PyTorch ==="
python -c "import torch; print(f'CUDA available: {torch.cuda.is_available()}'); print(f'Device: {torch.cuda.get_device_name(0)}')" 2>/dev/null || echo "PyTorch not installed"

echo "=== 5. TensorFlow ==="
python -c "import tensorflow as tf; print(f'GPU: {tf.config.list_physical_devices(\"GPU\")}')" 2>/dev/null || echo "TensorFlow not installed"

把上面脚本保存为check_env.sh,然后运行bash check_env.sh。如果所有项都通过,恭喜你,开发环境搭建完成!

核心要点回顾:

  • 驱动是基础,版本不能太旧
  • CUDA Toolkit提供编译器和库,用nvcc验证
  • cuDNN是深度学习加速库,版本必须匹配CUDA
  • PyTorch/TensorFlow用conda环境隔离,避免冲突
  • 最终用nvidia-smi和nvcc双重验证
TensorCore开发环境搭建知识体系 NVIDIA GPU硬件 NVIDIA驱动 (nvidia-smi) CUDA Toolkit (nvcc) cuDNN PyTorch TensorFlow 从硬件到框架,层层依赖,缺一不可

好了,环境搭建就到这里。记住,这一步虽然繁琐,但值得花时间做好。后面我们写TensorCore代码时,你会发现——嗯,前期工作没白费。

可可精品资料库