2024-11-21 一站式 AI 平台生日大派对!2024-11-21 一站式 AI 平台生日大派对! 无问芯穹特别推出多项超值福利!立即参与
Skip to content
回到全部文章

在 AIStudio 开发机上安装特定版本的系统级 CUDA / cuDNN

如果需要特定版本的系统级 CUDA 和 cuDNN 版本组合,建议手动安装 CUDA ToolKit。本指南提供了一个安装过程示例。

NOTE

  • 手动安装 CUDA / cuDNN 的难度较大,仅限于其他方式无法满足需求的情况。
  • 用户无法安装或升级 NVIDIA 驱动程序。

目录

  1. 预期结果
  2. 实验环境
  3. 避免安装 NVIDIA 驱动
  4. 使用本地文件安装 CUDA 11.8/cuDNN 8.x
  5. 使用包管理工具安装 CUDA 11.8/cuDNN 8.x
  6. 总结
  7. 参考资料

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 配置
  • 可使用 nvccnvcc --version 输出正确版本
  • 可找到 cuDNN,ldconfig 输出正确版本的文件路径
shell
# 查找系统级 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。

shell
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

alt text

从这里获取 CUDA Toolkit 11.8 的 Runfile。进入下载页后选择 CUDA Toolkit 11.8.0,依次筛选得到 Linux x86_64 Ubuntu 22.04 的 runfile (local) 下载和安装命令。

shell
# 约 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

下载完毕后,执行安装脚本:

shell
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 │
└──────────────────────────────────────────────────────────────────────────────┘

安装完成后,输出如下:

shell
===========
= 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 环境变量

持久化设置 PATHLD_LIBRARY_PATHCUDA_HOME。您可以直接编辑当前用户的 .bashrc,在其中添加必须要的 export 语句;或使用以下方式添加到 /etc/profile.d/cuda-path.sh

shell
# 将 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 库路径添加到动态链接库的配置中:

shell
echo "/usr/local/cuda/lib64" | sudo tee /etc/ld.so.conf.d/cuda.conf

运行 ldconfig

shell
sudo ldconfig

验证设置:

shell
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 可用:

shell
nvcc --version

输出:

shell
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

    检查解压结果:

    shell
    root@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:

shell
# 如果使用官方的 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

shell
sudo ldconfig

使用 ldconfig -p | grep cudnn 验证,输出如下:

shell
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) 下载和安装命令。

shell
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。

shell
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。

shell
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

    安装要点如下:

    1. 无需安装 NVIDIA Drivers,因为 AIStudio 平台已统一安装了 CUDA 驱动程序,用户无法自行安装。
    2. 为了避免运营商网络造成的问题,我们更推荐使用 Runfile 方式安装 NVIDIA CUDA Toolkit。
  • Installing cuDNN on Linux

    安装要点如下:

    1. 无需安装 NVIDIA Drivers,因为 AIStudio 平台已统一安装了 CUDA 驱动程序,用户无法自行安装。
    2. 请遵循官方文档中的步骤提前安装 NVIDIA CUDA Toolkit。

参考资料