第一章:开发环境搭建——磨刀不误砍柴工
各位同学,欢迎来到《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代码时,你会发现——嗯,前期工作没白费。