马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
复现深度学习论文,最折腾人的往往不是模型本身,而是环境。论文里一行 requirements.txt 写着 CUDA 11.7、cuDNN 8.5.0、PyTorch 2.0.1,结果装上去不是版本对不上就是 gcc 版本太新跑不过安装器。这篇按实际顺序把 CUDA 和 cuDNN 装完,并把每个报错的根因讲明白。
动手前先把版本号定死
深度学习环境最容易翻车的地方就是「凭感觉装最新版」。正确做法是先读论文和代码里的版本约束,照着装:
- CUDA 版本(从 requirements 或 README 里找)
- cuDNN 版本(要和 CUDA 主版本匹配)
- Python 版本
- PyTorch / TensorFlow 版本(很多库对 CUDA 版本有硬要求)
常见对应:CUDA 11.7 配 cuDNN 8.5.x;CUDA 12.x 配 cuDNN 8.9+。装错了不改配置也能跑,但 ImportError: libcudnn.so.8: cannot open shared object file 这种错会一路跟到底。
前置条件
- NVIDIA 显卡驱动已经装好,
nvidia-smi 能正常输出。
- Ubuntu 22.04(21.04 及以后默认 GCC 11,对 CUDA 11.x 友好)。
- 至少 10GB 磁盘空间(CUDA toolkit 本体就 3–4GB,加 cuDNN 和测试数据)。
第一部分:安装 CUDA 11.7
1. 下载.run 安装包
wget https://developer.download.nvidia.com/compute/cuda/11.7.1/local_installers/cuda_11.7.1_515.65.01_linux.run
2. 运行安装器
sudo sh cuda_11.7.1_515.65.01_linux.run
3. 报错:gcc 版本过高
CUDA 11.7 的本地安装器在 GCC 12 下会因为符号/编译选项不兼容直接失败。日志 里能看到具体原因:
gedit /var/log/cuda-installer.log
确认是 gcc 的问题后,先用 alternatives 把版本切回 11:
sudo update-alternatives --config gcc
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 102
update-alternatives 的机制说明后面单独讲。
4. 重新运行安装器
sudo sh cuda_11.7.1_515.65.01_linux.run
交互式流程:
- 选 Accept。
- 到「安装显卡驱动」这步用空格取消勾选——驱动已经装好了,再装一次容易把
nvidia-smi 弄崩。
- 其他选项保持默认,选 Install。
5. 配置环境变量
装完直接跑 nvcc --version 会报「command not found」,因为 /usr/local/cuda-11.7/bin 还没进 PATH:
gedit ~/.bashrc
末尾追加(路径里的版本号要和你装的一致):
export PATH=/usr/local/cuda-11.7/bin {PATH}
export LD_LIBRARY_PATH=/usr/local/cuda-11.7/lib64 {LD_LIBRARY_PATH}
source ~/.bashrc
nvcc --version
能输出 Cuda compilation tools, release 11.7... 就说明通了。
第二部分:安装 cuDNN 8.5.0
cuDNN 不在 apt 源里,要去 NVIDIA 开发者网站下载(需要注册账号并同意协议)。选和你 CUDA 对应的版本包,比如 cudnn-linux-x86_64-8.5.0.96_cuda11-archive.tar.xz。
tar -xvf cudnn-linux-x86_64-8.5.0.96_cuda11-archive.tar.xz
cd cudnn-linux-x86_64-8.5.0.96_cuda11-archive/
把头文件和库拷进 CUDA 目录:
sudo cp include/cudnn.h /usr/local/cuda-11.7/include
sudo cp lib/libcudnn* /usr/local/cuda-11.7/lib64
sudo chmod a+r /usr/local/cuda-11.7/include/cudnn.h /usr/local/cuda-11.7/lib64/libcudnn*
chmod a+r 那步别省,否则普通用户跑 Python 时会因读不到库文件而崩溃。8.x 版本解压出来 cudnn.h 在 include/ 下,早期版本是全 cudnn*.h,按实际目录找。
验证:
ls /usr/local/cuda-11.7/include/cudnn.h
ls /usr/local/cuda-11.7/lib64/ | grep libcudnn
关于 update-alternatives 的优先级
CUDA 装不上的时候你大概率会去切 gcc 版本,这里把 update-alternatives 的规则讲透:
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 102
最后那个 102 是优先级(priority)。它的作用是:同一组备选里,优先级数值最高的成为默认项。
- 优先级可以是任意整数,绝对大小没意义,只看相对大小。
- 想让 gcc-12 优先,就写比 gcc-11 更大的数:
--install /usr/bin/gcc gcc /usr/bin/gcc-12 200(200 > 102)。
- 想切回手动选:
sudo update-alternatives --config gcc,会出现一个数字菜单,输入编号回车。
- 查看当前有哪些备选:
update-alternatives --list gcc 和 update-alternatives --display gcc。
同样的方法也能管 g++,记得 --slave 把两个绑一起:
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 102 \
--slave /usr/bin/g++ g++ /usr/bin/g++-11
换源:别硬刚官方 CUDA 站点
NVIDIA 官方 developer.download.nvidia.com 在国内经常只有几十 KB/s。两条路:
- 换华为/中科大等镜像站的 CUDA 仓库,用 apt 装(
cuda-toolkit-11-7),比 .run 省心,依赖自动解。
- 先下不下来就先用 run 包,但下载慢的部分可以单独挂代理,别想着绕过安装器。
装完还要做什么
pip install torch==2.0.1+cu117 -f https://download.pytorch.org/whl/torch_stable.html
python -c "import torch; print(torch.cuda.is_available(), torch.__version__)"
True 打出来才算整套环境闭环。另外 pyenv 装的 Python 在 home 目录下,/usr/local 的 CUDA 库靠 LD_LIBRARY_PATH 找得到,一般没问题;但如果 Python 装在容器里,记得把 CUDA 路径也挂进去。
踩坑清单
- .run 安装器被 GCC 12 卡死:不是 CUDA 的问题,切 gcc-11 就能过。
- 重复装驱动:
.run 安装这一步不取消勾选,会覆盖掉 apt 装的驱动,nvidia-smi 直接挂。
- 忘了写
source ~/.bashrc:新开终端 nvcc 又找不到了,非 root 用户尤其明显。
- cuDNN 拷了却
libcudnn.so.8: cannot open shared object file:库拷进去但动态链接器找不到,加进 /etc/ld.so.conf.d/cuda.conf 后 sudo ldconfig。
- PyTorch 装成 CPU 版:pip 默认源给的 wheel 没带 CUDA,要用带
+cu117 的 index。
- 版本不匹配:CUDA 11.7 硬配 cuDNN 9.x,
cudnn.h 里的 API 对不上,编译扩展时报一堆 unknown type。
环境这东西,版本对齐比技巧重要。把论文要求的四个版本号记下来,按「驱动 → CUDA → cuDNN → 深度学习框架」的顺序装,中间每步都验证一次,基本一次过。
qidao123.com企服评测-应用市场 编辑提示 |