在 AIStudio 开发机上安装特定版本的系统级 CUDA / cuDNN
如果需要特定版本的系统级 CUDA 和 cuDNN 版本组合,建议手动安装 CUDA ToolKit。本指南提供了一个安装过程示例。
NOTE
- 手动安装 CUDA / cuDNN 的难度较大,仅限于其他方式无法满足需求的情况。
- 用户无法安装或升级 NVIDIA 驱动程序。
目录
- 预期结果
- 实验环境
- 避免安装 NVIDIA 驱动
- 使用本地文件安装 CUDA 11.8/cuDNN 8.x
- 使用包管理工具安装 CUDA 11.8/cuDNN 8.x
- 总结
- 参考资料
NOTE
在网络通畅的情况下,推荐使用包管理工具安装 CUDA 11.8/cuDNN 8.x。
预期结果
本教程假设需求为安装 CUDA 11.8 和 cuDNN 8.9.2。具体软件包版本要求如下:
cuda=11.8.0-1
libcudnn8=8.9.2.26-1+cuda11.8
libcudnn8-dev=8.9.2.26-1+cuda11.8
预置安装完成后,最终环境满足以上要求,并可通过以下验证:
- 可找到系统级 CUDA,预期输出系统级 CUDA 路径
- 有效的
CUDA_HOME
配置 - 可使用
nvcc
,nvcc --version
输出正确版本 - 可找到 cuDNN,
ldconfig
输出正确版本的文件路径
# 查找系统级 CUDA 路径,预期输出系统级 CUDA 路径
whereis cuda
# 检查 CUDA_HOME
echo ${CUDA_HOME}
# 查找 cuDNN
ldconfig -p | grep cudnn
实验环境
创建开发机,使用 Ubuntu Ubuntu 22.04 为基础镜像:cr.infini-ai.com/infini-ai/ubuntu:22.04-20240429
避免安装 NVIDIA 驱动
在任何情况下,请避免自行安装 Nvidia Driver。这是因为 AIStudio 平台的容器只能使用宿主机上已经安装的 NVIDIA 驱动程序版本。
- 在使用 CUDA Runfile 安装 CUDA Toolkit 时请跳过 Driver 安装。
- 使用包管理器安装 CUDA 时,依赖项包含 Nvidia Driver 的包可能会安装失败。
查询当前 NVIDIA 驱动版本
由于已经安装 Nvdia Driver,AIStudio 开发机中默认可使用 nvidia-smi
。
以下输出中,CUDA Version: 12.2
表示当前 Driver 最高可支持 CUDA 12.2。
root@is-c76fxbatxfq26ehn-devmachine-0:~# nvidia-smi
Tue Oct 8 15:43:47 2024
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.183.01 Driver Version: 535.183.01 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. |
| | | MIG M. |
|=========================================+======================+======================|
| 0 NVIDIA GeForce RTX 4090 On | 00000000:A1:00.0 Off | Off |
| 30% 28C P8 12W / 450W | 1MiB / 24564MiB | 0% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=======================================================================================|
| No running processes found |
+---------------------------------------------------------------------------------------+
NOTE
如对 nvidia-smi
输出中的 CUDA Version 有疑问,可参考 Why am I seeing two versions of CUDA?。
升级 NVIDIA 驱动程序版本
企业用户如订购包年包月集群,可联系无问芯穹咨询。
WARNING
您无法自行安装或更改 NVIDIA 驱动程序版本。
使用本地安装文件
一种方式是以 NVIDIA 官方提供的离线 Installer 文件安装 CUDA 和 cuDNN。
下载 CUDA Toolkit 11.8 安装文件
以离线 Installer 的方式安装 CUDA 11.8,需要先从官方下载 Runfile。
历史版本 CUDA Toolkit 下载地址:https://developer.nvidia.com/cuda-toolkit-archive
从这里获取 CUDA Toolkit 11.8 的 Runfile。进入下载页后选择 CUDA Toolkit 11.8.0,依次筛选得到 Linux x86_64 Ubuntu 22.04 的 runfile (local)
下载和安装命令。
# 约 4.1GB
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run
安装 CUDA Toolkit
下载完毕后,执行安装脚本:
sudo sh cuda_11.8.0_520.61.05_linux.run
稍等片刻,会提示接受 EULA 协议。输入 accept 接受协议。
┌──────────────────────────────────────────────────────────────────────────────┐
│ End User License Agreement │
│ -------------------------- │
│ │
│ NVIDIA Software License Agreement and CUDA Supplement to │
│ Software License Agreement. Last updated: October 8, 2021 │
│ │
│ The CUDA Toolkit End User License Agreement applies to the │
│ NVIDIA CUDA Toolkit, the NVIDIA CUDA Samples, the NVIDIA │
│ Display Driver, NVIDIA Nsight tools (Visual Studio Edition), │
│ and the associated documentation on CUDA APIs, programming │
│ model and development tools. If you do not agree with the │
│ terms and conditions of the license agreement, then do not │
│ download or use the software. │
│ │
│ Last updated: October 8, 2021. │
│ │
│ │
│ Preface │
│ ------- │
│ │
│──────────────────────────────────────────────────────────────────────────────│
│ Do you accept the above EULA? (accept/decline/quit): │
│ │
└──────────────────────────────────────────────────────────────────────────────┘
同意协议后,按照提示进行安装,选择自定义安装,只选择 CUDA Toolkit 和相关库。注意不要选择 Driver。
┌──────────────────────────────────────────────────────────────────────────────┐
│ CUDA Installer │
│ - [ ] Driver │
│ [ ] 520.61.05 │
│ + [X] CUDA Toolkit 11.8 │
│ [X] CUDA Demo Suite 11.8 │
│ [X] CUDA Documentation 11.8 │
│ - [ ] Kernel Objects │
│ [ ] nvidia-fs │
│ Options │
│ Install │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ Up/Down: Move | Left/Right: Expand | 'Enter': Select | 'A': Advanced options │
└──────────────────────────────────────────────────────────────────────────────┘
安装完成后,输出如下:
===========
= Summary =
===========
Driver: Not Selected
Toolkit: Installed in /usr/local/cuda-11.8/
Please make sure that
- PATH includes /usr/local/cuda-11.8/bin
- LD_LIBRARY_PATH includes /usr/local/cuda-11.8/lib64, or, add /usr/local/cuda-11.8/lib64 to /etc/ld.so.conf and run ldconfig as root
To uninstall the CUDA Toolkit, run cuda-uninstaller in /usr/local/cuda-11.8/bin
***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 520.00 is required for CUDA 11.8 functionality to work.
To install the driver using this installer, run the following command, replacing <CudaInstaller> with the name of this run file:
sudo <CudaInstaller>.run --silent --driver
Logfile is /var/log/cuda-installer.log
配置 CUDA 环境变量
持久化设置 PATH
、LD_LIBRARY_PATH
和 CUDA_HOME
。您可以直接编辑当前用户的 .bashrc
,在其中添加必须要的 export
语句;或使用以下方式添加到 /etc/profile.d/cuda-path.sh
:
# 将 export 语句添加 /etc/profile.d/cuda-path.sh
sudo bash -c 'cat > /etc/profile.d/cuda-path.sh << "EOF"
export PATH=/usr/local/cuda/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export CUDA_HOME=/usr/local/cuda
EOF'
# 立即应用设置
source /etc/profile.d/cuda-path.sh
将 CUDA 库路径添加到动态链接库的配置中:
echo "/usr/local/cuda/lib64" | sudo tee /etc/ld.so.conf.d/cuda.conf
运行 ldconfig
:
sudo ldconfig
验证设置:
echo $PATH | grep -E "cuda|cuda-11.8"
echo $LD_LIBRARY_PATH | grep -E "cuda|cuda-11.8"
echo $CUDA_HOME
ldconfig -p | grep "libcudart"
NOTE
通用路径 (/usr/local/cuda
) 通常是指向最新安装版本的符号链接。
验证 nvcc
可用:
nvcc --version
输出:
root@is-c76fxbatxfq26ehn-devmachine-0:~# nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Wed_Sep_21_10:33:58_PDT_2022
Cuda compilation tools, release 11.8, V11.8.89
Build cuda_11.8.r11.8/compiler.31833905_0
下载 cuDNN 8.x 离线安装文件
cuDNN(CUDA Deep Neural Network library)不随 CUDA Toolkit 分发,因此需要单独下载和安装。
NOTE
cuDNN 最新版 为 9.x。如果您需要安装 9.x 版本,无需使用以下步骤。建议遵循官方文档 Installing cuDNN on Linux 中的步骤。
本教程我们需要安装的 cudnn8.x 属于历史版本。离线安装文件为 tar 压缩文件,有两种获取方式:
从网页下载历史版本 cuDNN Tarball 文件:https://developer.nvidia.com/cudnn-archive
请找到
Local Installer for Linux x86_64 (Tar)
并下载。从 cuDNN Archive 下载 cuDNN 1.x-8.x 历史版本需要 NVIDIA 开发者账号,且历史版本仅提供临时下载链接。您可在下载后将文件通过scp
等方式传输到开发机。如果想避免传输,也可以在浏览器中点击下载后转到下载面板,从中复制带验证参数的临时下载链接,在开发机中使用命令行下载。shell# 必须使用带验证的临时下载链接。请务必获取带验证的临时下载链接 # 无效的链接示例 # wget -O cudnn-local-repo-ubuntu2204-8.9.2.26_1.0-1_amd64.deb 'https://developer.download.nvidia.cn/compute/cudnn/secure/8.9.2/local_installers/11.x/cudnn-local-repo-ubuntu2204-8.9.2.26_1.0-1_amd64.deb # 有效的链接示例;请务必替换为您自己获取的临时下载链接。 # wget -O cudnn-local-repo-ubuntu2204-8.9.2.26_1.0-1_amd64.deb 'https://developer.download.nvidia.cn/compute/cudnn/secure/8.9.2/local_installers/11.x/cudnn-local-repo-ubuntu2204-8.9.2.26_1.0-1_amd64.deb?qXsRCTioDTcdUcliWfUeVtaCLd1JPDBsrZ8se-9MIRoZvicekr7xz1khYQ53nsSJ-ljIhSjSOcNvpdNWFRhYoigdxk0_d1ho7ht99lt_jnhpMjX_eTNX3_KbkBcEg6bmK5pzPh1oklZcf_IZ9Tj9Q_uO6cqMxfYjYo-zQiHrakth4KMjq5ZGuXFwyEa12G81KtLV_pJv-W5FDvtT1dX2XzcizGo=&t=eyJscyI6IndlYnNpdGUiLCJsc2QiOiJkZXZlbG9wZXIubnZpZGlhLmNvbS9jdWRubiJ9'
NOTE
Tar 文件是完全离线安装。您也可以下载 Local Installer for Ubuntu22.04 x86_64 (Deb),但 deb 文件仅提供本地源,安装时仍需从网络下载相应的包文件。您需要先安装本地源:
dpkg -i cudnn-local-repo-ubuntu2204-8.9.2.26_1.0-1_amd64.deb
,根据输出中的提示安装 GPG key,再使用 apt 工具更新和安装依赖包。使用官方的 Parsing Redistrib JSON 工具直接获取 cuDNN 8.x Tarball。
shell# 获取下载工具 git clone https://ghfast.top/https://github.com/NVIDIA/build-system-archive-import-examples.git cd build-system-archive-import-examples # 执行下载脚本,该脚本将解压 tarball 文件 python3 -u ./parse_redist.py --product cudnn --label 8.9.2.26 --os linux --arch x86_64
检查解压结果:
shellroot@is-dakbfmwmak4jhybo-devmachine-0:~/build-system-archive-import-examples# ls -alth flat/linux-x86_64/cuda11/ total 32K drwxr-xr-x 3 root root 20 Dec 27 18:00 .. drwxr-xr-x 2 root root 4.0K May 31 2023 include drwxr-xr-x 2 root root 4.0K May 31 2023 lib drwxr-xr-x 5 root root 58 May 31 2023 . drwxr-xr-x 3 root root 30 May 31 2023 src -rw-r--r-- 1 root root 23K May 31 2023 LICENSE
安装 cuDNN
安装 cuDNN:
# 如果使用官方的 Parsing Redistrib JSON 工具,请确保在 build-system-archive-import-examples 目录
# 其他方式请酌情调整目录
cp flat/linux-x86_64/cuda11/include/cudnn*.h /usr/local/cuda/include
cp -P flat/linux-x86_64/cuda11/lib/libcudnn* /usr/local/cuda/lib64
chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*
运行 ldconfig
:
sudo ldconfig
使用 ldconfig -p | grep cudnn
验证,输出如下:
root@is-dakbfmwmak4jhybo-devmachine-0:~/build-system-archive-import-examples# ldconfig -p | grep cudnn
libcudnn_ops_train.so.8 (libc6,x86-64) => /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn_ops_train.so.8
libcudnn_ops_train.so (libc6,x86-64) => /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn_ops_train.so
libcudnn_ops_infer.so.8 (libc6,x86-64) => /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8
libcudnn_ops_infer.so (libc6,x86-64) => /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn_ops_infer.so
libcudnn_cnn_train.so.8 (libc6,x86-64) => /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8
libcudnn_cnn_train.so (libc6,x86-64) => /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn_cnn_train.so
libcudnn_cnn_infer.so.8 (libc6,x86-64) => /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8
libcudnn_cnn_infer.so (libc6,x86-64) => /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn_cnn_infer.so
libcudnn_adv_train.so.8 (libc6,x86-64) => /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn_adv_train.so.8
libcudnn_adv_train.so (libc6,x86-64) => /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn_adv_train.so
libcudnn_adv_infer.so.8 (libc6,x86-64) => /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn_adv_infer.so.8
libcudnn_adv_infer.so (libc6,x86-64) => /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn_adv_infer.so
libcudnn.so.8 (libc6,x86-64) => /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn.so.8
libcudnn.so (libc6,x86-64) => /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn.so
root@is-dakbfmwmak4jhybo-devmachine-0:~/build-system-archive-import-examples#
使用包管理工具
一种方式是以 NVIDIA 官方提供的 deb 文件。该 deb 文件仅为包管理工具提供了 NVIDIA 的软件源。
下载 CUDA Toolkit 11.8 的网络源
使用包管理工具安装 CUDA 11.8,需要先从官方下载 Deb 源。
历史版本 CUDA Toolkit 下载地址:https://developer.nvidia.com/cuda-toolkit-archive
从这里获取 CUDA Toolkit 11.8 的 deb 网络源。进入下载页后选择 CUDA Toolkit 11.8.0,依次筛选得到 Linux x86_64 Ubuntu 22.04 的 deb (network)
下载和安装命令。
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.0-1_all.deb
sudo dpkg -i cuda-keyring_1.0-1_all.deb
sudo apt-get update
安装 CUDA/cuDNN
获取 CUDA Toolkit 11.8 的网络源后,可直接安装 CUDA 11.8 和 cuDNN。
apt-get install cuda-libraries-11-8
apt-get install cuda-toolkit-11-8
apt-get install libcudnn8=8.9.2.26-1+cuda11.8
apt-get install libcudnn8-dev=8.9.2.26-1+cuda11.8
为什么没有安装 cuda=11.8.0-1
呢?因为通过检查包依赖关系,我们可以分析得到必须安装的包,避免安装 NVIDIA Driver。
root@is-dakbfmwmak4jhybo-devmachine-0:~/build-system-archive-import-examples# apt-cache depends cuda=11.8.0-1
cuda
Depends: cuda-11-8
root@is-dakbfmwmak4jhybo-devmachine-0:~/build-system-archive-import-examples# apt-cache depends cuda-11-8
cuda-11-8
Depends: cuda-runtime-11-8
Depends: cuda-toolkit-11-8
Depends: cuda-demo-suite-11-8
root@is-dakbfmwmak4jhybo-devmachine-0:~/build-system-archive-import-examples# apt-cache depends cuda-runtime-11-8
cuda-runtime-11-8
Depends: cuda-libraries-11-8
Depends: cuda-drivers
总结
如果容器镜像、Dockerfile 等方式无法满足您对系统级 CUDA / cuDNN 的要求,可以手动安装 NVIDIA 的 CUDA Toolkit 和 cuDNN。官方参考文档及安装要点:
NVIDIA CUDA Installation Guide for Linux
安装要点如下:
- 无需安装 NVIDIA Drivers,因为 AIStudio 平台已统一安装了 CUDA 驱动程序,用户无法自行安装。
- 为了避免运营商网络造成的问题,我们更推荐使用 Runfile 方式安装 NVIDIA CUDA Toolkit。
安装要点如下:
- 无需安装 NVIDIA Drivers,因为 AIStudio 平台已统一安装了 CUDA 驱动程序,用户无法自行安装。
- 请遵循官方文档中的步骤提前安装 NVIDIA CUDA Toolkit。