Ubuntu 20.04 安装Cuda 12.2版本踩坑记录

embedded/2025/1/11 6:26:25/

Ubuntu 20.04 安装Cuda 12.2版本踩坑记录

文章目录

  • Ubuntu 20.04 安装Cuda 12.2版本踩坑记录
    • 查看Ubuntu版本
    • 不成功的方式:使用deb安装
        • 卸载现有的 NVIDIA 驱动:
        • 安装符合要求的驱动版本:
    • 成功的安装方式:使用runfile安装
      • user账户nvcc不可用解决方法
    • 参考
    • 后记

查看Ubuntu版本

使用下面的命令

lsb_release -a

运行结果

(base) xxx@ubuntu-test:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.5 LTS
Release:        20.04
Codename:       focal
(base) xxx@ubuntu-test:~$ uname -a
Linux ubuntu-test 5.5.10-050510-generic #202003180732 SMP Wed Mar 18 07:35:23 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

这个命令解析:

这条命令 uname -a 输出的信息包含了当前系统的详细信息。我们可以将其分解如下:

  1. 操作系统名称
    • Linux:表示操作系统是 Linux。
  2. 主机名
    • ubuntu-test:表示计算机的主机名。
  3. 内核版本
    • 5.5.10-050510-generic:表示正在使用的 Linux 内核版本是 5.5.10,并且使用的是通用(generic)版本。
  4. 内核构建信息
    • #202003180732:这是内核的构建号,通常包含构建日期和时间。这里显示的是构建的时间戳(2020年3月18日 07:32:23 UTC)。
  5. 内核编译类型
    • SMP:表示内核支持对称多处理(Symmetric Multi-Processing),即系统能够使用多个处理器(或核心)。
  6. 内核编译日期和时间
    • Wed Mar 18 07:35:23 UTC 2020:表示内核编译的日期和时间。
  7. 系统架构
    • x86_64:表示系统架构是 64 位的 x86 架构(即常见的 64 位 Intel 或 AMD 处理器)。
  8. 操作系统架构
    • x86_64:再次表明系统是 64 位的。
  9. 操作系统类型
    • GNU/Linux:表示操作系统是基于 GNU 工具和 Linux 内核构建的 Linux 系统。

综上所述,命令 uname -a 提供了操作系统名称、内核版本、编译信息、主机名、系统架构等关键系统信息。

CUDA Toolkit 12.2 Downloads过程记录。

不成功的方式:使用deb安装

不要使用deb安装,而是使用runfile安装

使用deb (local)安装,遇到很多坑,记录如下,最终也没有安装成功。所以推荐不要使用deb安装。如果不想看debug过程,可以直接跳到下面成功安装的部分:成功的安装方式:使用runfile安装

在这里插入图片描述

https://developer.nvidia.com/cuda-12-2-0-download-archive?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=20.04&target_type=deb_local

全部命令如下

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin
sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/12.2.0/local_installers/cuda-repo-ubuntu2004-12-2-local_12.2.0-535.54.03-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2004-12-2-local_12.2.0-535.54.03-1_amd64.deb
sudo cp /var/cuda-repo-ubuntu2004-12-2-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda

下面是每一步的具体解析:

第一步:

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin

解析:

这条命令 wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin 使用了 wget 工具来从指定的 URL 下载一个文件。让我们解析这个命令的各个部分:

  1. wget
    • 这是一个命令行工具,用于从网络上下载文件。它支持通过 HTTP、HTTPS 和 FTP 协议下载文件。
  2. https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin
    • 这是一个 URL,指定了文件的位置。我们可以将其拆解成几个部分:
      • https://:表示通过 HTTPS 协议进行安全连接。
      • developer.download.nvidia.com:这是文件所在的主机名,属于 NVIDIA 的开发者下载站点。
      • compute/cuda/repos/ubuntu2004/x86_64/:这部分表示该文件位于 NVIDIA CUDA 的 Ubuntu 20.04 版本的仓库下,并且是针对 64 位系统的。
      • cuda-ubuntu2004.pin:这是文件名,通常 .pin 文件用于指定软件包的优先级或版本信息。在这种情况下,它可能是用于指定 CUDA 在 Ubuntu 20.04 系统中的软件包版本或优先级。

总结:这条命令的作用是使用 wget 从 NVIDIA 开发者站点下载一个名为 cuda-ubuntu2004.pin 的文件,该文件位于 CUDA 的 Ubuntu 20.04 版本的存储库目录下。

第二步:

sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600

这条命令 sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600 的作用是将文件移动到指定的目录,并且使用了 sudo 提升权限。我们可以详细解析如下:

  1. sudo
    • sudo 是一个用于以超级用户(root)身份运行命令的工具。在这个命令中,sudo 让用户能够有足够的权限来进行文件操作,因为目标目录 /etc/apt/preferences.d/ 通常需要超级用户权限才能写入。
  2. mv
    • mv 是一个用于移动文件或重命名文件的命令。它将 cuda-ubuntu2004.pin 文件从当前目录移动到指定的目录 /etc/apt/preferences.d/ 下,并且可以同时进行重命名。
  3. cuda-ubuntu2004.pin
    • 这是源文件的名称。它是之前下载的 .pin 文件,包含有关 CUDA 软件包的优先级信息。
  4. /etc/apt/preferences.d/cuda-repository-pin-600
    • 这是目标路径,表示将 cuda-ubuntu2004.pin 文件移动到系统的 APT 配置目录中的 preferences.d 子目录下,并将文件重命名为 cuda-repository-pin-600
    • /etc/apt/preferences.d/:这是 APT 配置文件的目录,用于存放与包管理器(APT)相关的首选项文件。preferences.d 目录下的文件用于指定软件包的优先级、版本等细节。
    • cuda-repository-pin-600:这是目标文件的名称,通常 .pin 文件用于指定软件包源的优先级。文件名中的 600 可能是设置此文件优先级的标识符,表示为高优先级(通常 100 表示默认优先级,而 600 表示更高的优先级)。

总结: 这条命令的作用是使用超级用户权限将 cuda-ubuntu2004.pin 文件移动到 /etc/apt/preferences.d/ 目录下,并将其重命名为 cuda-repository-pin-600。这通常是为了配置 CUDA 软件包的优先级,确保在 APT 更新时优先使用指定版本的 CUDA 软件包。

第三步:

wget https://developer.download.nvidia.com/compute/cuda/12.2.0/local_installers/cuda-repo-ubuntu2004-12-2-local_12.2.0-535.54.03-1_amd64.deb

这条命令 wget https://developer.download.nvidia.com/compute/cuda/12.2.0/local_installers/cuda-repo-ubuntu2004-12-2-local_12.2.0-535.54.03-1_amd64.deb 使用了 wget 工具来下载一个 .deb 包文件。下面是对命令的逐部分解析:

  1. wget

    • wget 是一个命令行工具,用于从互联网上下载文件。它支持多种协议(如 HTTP、HTTPS 和 FTP)进行文件传输。
  2. https://developer.download.nvidia.com/compute/cuda/12.2.0/local_installers/cuda-repo-ubuntu2004-12-2-local_12.2.0-535.54.03-1_amd64.deb

    • 这是下载文件的 URL,包含了文件的完整路径。将其分解为以下几个部分:

      • https://:表示通过 HTTPS 协议进行安全的文件传输。

      • developer.download.nvidia.com:这是 NVIDIA 开发者网站的主机名,提供 CUDA 等软件的下载。

      • compute/cuda/12.2.0/:这是文件所在的目录,表示下载的 CUDA 版本是 12.2.0。

      • local_installers/:表示这是一个本地安装程序包,用于在 Ubuntu 2004 系统上安装 CUDA。

      • cuda-repo-ubuntu2004-12-2-local_12.2.0-535.54.03-1_amd64.deb

        :这是下载的文件名,表示这是一个用于 Ubuntu 20.04 (amd64 架构) 的 CUDA 安装包。

        • cuda-repo-ubuntu2004-12-2-local:表明这是 Ubuntu 20.04 系统的 CUDA 本地安装包。
        • 12.2.0-535.54.03-1:表示 CUDA 版本是 12.2.0,且版本的构建号是 535.54.03-1。
        • amd64:表示这是适用于 64 位架构的安装包。
        • .deb:表示这是一个 Debian 包格式文件,通常用于基于 Debian 的系统(如 Ubuntu)安装软件。

总结: 这条命令使用 wget 从 NVIDIA 开发者网站下载适用于 Ubuntu 20.04 系统的 CUDA 12.2.0 本地安装程序包 cuda-repo-ubuntu2004-12-2-local_12.2.0-535.54.03-1_amd64.deb。这个安装包将用于安装指定版本的 CUDA 开发工具包。

第四步:

sudo dpkg -i cuda-repo-ubuntu2004-12-2-local_12.2.0-535.54.03-1_amd64.deb

这条命令 sudo dpkg -i cuda-repo-ubuntu2004-12-2-local_12.2.0-535.54.03-1_amd64.deb 用于在 Ubuntu 系统中安装 CUDA 的本地 .deb 安装包。下面是对命令的详细解析:

  1. sudo
  • sudo 是一个命令行工具,用于以超级用户(root)权限运行命令。由于安装软件包需要系统管理员权限,sudo 在这里用于提升权限。
  1. dpkg
  • dpkg 是 Debian 系统及其衍生版本(如 Ubuntu)中用于安装、卸载和管理 .deb 包的工具。它是低层次的包管理工具,可以直接安装、配置和移除 .deb 包文件。
  1. -i
  • -i 选项表示安装模式(install),即告诉 dpkg 执行安装操作。后面紧跟着的是要安装的 .deb 包文件。
  1. cuda-repo-ubuntu2004-12-2-local_12.2.0-535.54.03-1_amd64.deb
  • 这是要安装的

    .deb
    

    包文件的完整路径和文件名,具体内容如下:

    • cuda-repo-ubuntu2004-12-2-local:表示这个包是为 Ubuntu 20.04 系统提供的 CUDA 本地安装包。
    • 12.2.0-535.54.03-1:表示 CUDA 版本号为 12.2.0,具体版本号为 535.54.03-1。
    • amd64:表示这是为 64 位(AMD64)架构系统构建的包。
    • .deb:这是 Debian 包格式的文件扩展名。

命令作用:

sudo dpkg -i cuda-repo-ubuntu2004-12-2-local_12.2.0-535.54.03-1_amd64.deb 的作用是:

  • 以管理员权限安装 cuda-repo-ubuntu2004-12-2-local_12.2.0-535.54.03-1_amd64.deb 文件。
  • 这个 .deb 包将 CUDA 12.2.0 的本地安装程序和存储库配置添加到系统中,使得系统能够通过 APT 包管理工具进行 CUDA 安装和更新。

总结: 这条命令用于安装一个 CUDA 12.2.0 版本的本地安装包,通常用于为 Ubuntu 20.04 系统配置 CUDA 存储库,以便后续可以使用 APT 安装和管理 CUDA 相关的工具和库。

如果显示如下信息

root@ubuntu-test:~# sudo dpkg -i cuda-repo-ubuntu2004-12-2-local_12.2.0-535.54.03-1_amd64.deb
Selecting previously unselected package cuda-repo-ubuntu2004-12-2-local.
(Reading database ... 168624 files and directories currently installed.)
Preparing to unpack cuda-repo-ubuntu2004-12-2-local_12.2.0-535.54.03-1_amd64.deb ...
Unpacking cuda-repo-ubuntu2004-12-2-local (12.2.0-535.54.03-1) ...
Setting up cuda-repo-ubuntu2004-12-2-local (12.2.0-535.54.03-1) ...The public cuda-repo-ubuntu2004-12-2-local GPG key does not appear to be installed.
To install the key, run this command:
sudo cp /var/cuda-repo-ubuntu2004-12-2-local/cuda-73067DC7-keyring.gpg /usr/share/keyrings/

就要执行

sudo cp /var/cuda-repo-ubuntu2004-12-2-local/cuda-73067DC7-keyring.gpg /usr/share/keyrings/

这个命令,之后再往下执行。

第五步:

sudo cp /var/cuda-repo-ubuntu2004-12-2-local/cuda-*-keyring.gpg /usr/share/keyrings/

这条命令 sudo cp /var/cuda-repo-ubuntu2004-12-2-local/cuda-*-keyring.gpg /usr/share/keyrings/ 用于将 CUDA 存储库的 GPG 密钥文件复制到系统的密钥存储目录。下面是对命令各部分的详细解析:

  1. sudo
  • sudo 是用来以超级用户(root)权限执行命令的工具。由于需要在系统目录(如 /usr/share/keyrings/)中写入文件,因此需要管理员权限。
  1. cp
  • cp 是 Linux 系统中的一个命令,用于复制文件或目录。此处表示将源文件复制到目标位置。
  1. /var/cuda-repo-ubuntu2004-12-2-local/cuda-\*-keyring.gpg
  • 这是源文件的路径和名称,具体如下:
    • /var/cuda-repo-ubuntu2004-12-2-local/:表示 CUDA 存储库的安装路径。在 CUDA 安装过程中,这个目录通常会包含一些 GPG 密钥文件,用于验证安装包的签名。
    • cuda-\*-keyring.gpg:这是一个通配符匹配的文件名,表示匹配该目录下所有以 cuda- 开头、以 -keyring.gpg 结尾的文件。* 是通配符,表示可以匹配任何中间部分的字符。这通常是 CUDA 存储库的 GPG 密钥文件。
  1. /usr/share/keyrings/
  • 这是目标目录,表示将 GPG 密钥文件复制到该目录下。/usr/share/keyrings/ 是一个系统目录,存储系统和软件包管理工具所使用的 GPG 密钥,以确保下载的包没有被篡改。

命令作用:

这条命令的作用是:

  • 以管理员权限将 CUDA 存储库的 GPG 密钥文件(通常用于验证下载的 CUDA 软件包的完整性和来源)复制到 /usr/share/keyrings/ 目录。
  • 这对于系统 APT 包管理工具而言非常重要,因为它允许 APT 使用该密钥验证从 CUDA 存储库下载的软件包,以确保其安全性和可信性。

总结sudo cp /var/cuda-repo-ubuntu2004-12-2-local/cuda-*-keyring.gpg /usr/share/keyrings/ 命令将 CUDA 存储库的 GPG 密钥文件复制到 /usr/share/keyrings/ 目录,确保 APT 在安装 CUDA 软件包时能够验证软件包的签名,从而保障软件包的完整性和来源安全。

第六步:

sudo apt-get update
sudo apt-get -y install cuda

遇到如下问题:

root@ubuntu-test:~# sudo apt-get -y install cuda
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:The following packages have unmet dependencies:cuda : Depends: cuda-12-6 (>= 12.6.3) but it is not going to be installedDepends: nvidia-open (>= 560.35.05) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

按照下面的方法:

sudo apt-get purge cuda
sudo apt-get autoremove
sudo apt-get clean
sudo apt-get update
sudo apt-get install cuda
或者:
sudo apt-get install cuda-12-2

还是会遇到问题:

The following packages have unmet dependencies:cuda : Depends: cuda-12-6 (>= 12.6.3) but it is not going to be installedDepends: nvidia-open (>= 560.35.05) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.
root@ubuntu-test:~# sudo apt-get install cuda-12-2
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:The following packages have unmet dependencies:cuda-12-2 : Depends: cuda-runtime-12-2 (>= 12.2.2) but it is not going to be installedDepends: cuda-demo-suite-12-2 (>= 12.2.140) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

继续debug

root@ubuntu-test:~# sudo apt-get install cuda-runtime-12-2 cuda-demo-suite-12-2
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:The following packages have unmet dependencies:cuda-runtime-12-2 : Depends: cuda-drivers (>= 535.104.05) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

但是我的cuda driver版本是Driver Version: 545.23.08已经满足上述要求,于是继续debug

卸载现有的 NVIDIA 驱动:

如果当前的驱动版本不符合 CUDA 12.2 的要求,可以先卸载现有的 NVIDIA 驱动,然后再安装适合的驱动版本。执行以下命令

sudo apt-get purge nvidia-*
sudo apt-get autoremove
sudo apt-get clean
安装符合要求的驱动版本:

根据 CUDA 12.2 的要求,你可以安装适当版本的驱动,如 nvidia-driver-535。尝试以下命令来安装它:

sudo apt-get install nvidia-driver-535

重启 sudo reboot之后查看版本,已经是自己需要的版本了

 NVIDIA-SMI 535.216.03             Driver Version: 535.216.03   CUDA Version: 12.2     |

但是运行如下命令,依然发现:软连接链接到的是12.6

ls -l /etc/alternatives/ | grep cuda

输出:

lrwxrwxrwx 1 root root  20 Dec 24 14:00 cuda -> /usr/local/cuda-12.6
lrwxrwxrwx 1 root root  20 Dec 24 14:00 cuda-12 -> /usr/local/cuda-12.6
lrwxrwxrwx 1 root root  36 Dec 24 14:00 cufile.json -> /usr/local/cuda-12.6/gds/cufile.json

这条命令 ls -l /etc/alternatives/ | grep cuda 列出了 /etc/alternatives/ 目录下与 cuda 相关的符号链接(symlink)。让我们逐一解析这些输出:

  1. lrwxrwxrwx 1 root root 20 Dec 24 14:00 cuda -> /usr/local/cuda-12.6
  • lrwxrwxrwx:表示该文件是一个符号链接(l),并且具有读、写、执行权限(rwxrwxrwx)对所有用户(所有者、群组和其他用户)开放。
  • 1 root root:表示该文件的所有者是 root,所属组也是 root
  • 20:这是符号链接的长度,即链接目标的字符数。
  • Dec 24 14:00:符号链接的最后修改时间。
  • cuda -> /usr/local/cuda-12.6:这是一个符号链接,名为 cuda,指向 /usr/local/cuda-12.6 目录。这表示 cuda 被设置为指向 CUDA 12.6 的安装目录 /usr/local/cuda-12.6
  1. lrwxrwxrwx 1 root root 20 Dec 24 14:00 cuda-12 -> /usr/local/cuda-12.6
  • 这个条目类似于第一个,但符号链接的名称是 cuda-12,指向同样的目标 /usr/local/cuda-12.6
  • 这表明 cuda-12 也指向 CUDA 12.6 的安装目录。
  1. lrwxrwxrwx 1 root root 36 Dec 24 14:00 cufile.json -> /usr/local/cuda-12.6/gds/cufile.json
  • cufile.json -> /usr/local/cuda-12.6/gds/cufile.json:这是一个符号链接,名为 cufile.json,指向 /usr/local/cuda-12.6/gds/cufile.json
  • 这个链接表明,cufile.json 文件位于 /usr/local/cuda-12.6/gds/ 目录下,是与 CUDA 12.6 版本的 GDS(GPU Direct Storage)相关的配置文件。

总结:

  • 这些符号链接表示 /etc/alternatives/ 目录下的 cudacuda-12cufile.json 都指向 /usr/local/cuda-12.6 目录中的相关内容。
  • 具体来说:
    • cudacuda-12 都指向 CUDA 12.6 的安装目录 /usr/local/cuda-12.6
    • cufile.json 指向 CUDA 12.6 中 gds/cufile.json 配置文件。

/etc/alternatives/ 目录是用于管理多个版本的程序和工具的一个地方,通常用来创建符号链接,以便系统可以在不同版本之间切换。

怎么办呢?

检查当前的 CUDA 版本目录: 确保 /usr/local/cuda-12.2 目录确实存在,并包含 CUDA 12.2 的所有文件。

root@ubuntu-test:~# ls /usr/local/
bin  clash  clash-dashboard  cuda  cuda-11.6  cuda-11.8  cuda-12  cuda-12.6  dash  dash.tar.gz  etc  games  include  kernelobjects  lib  man  sbin  share  src

发现没有12.2,需要重新安装。于是去网上找帖子。看到大家几乎没有用deb安装,而都是用run安装,所以准备重新安装。

成功的安装方式:使用runfile安装

在这里插入图片描述

Link:https://developer.nvidia.com/cuda-12-2-0-download-archive?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=20.04&target_type=runfile_local

只有两句命令:

wget https://developer.download.nvidia.com/compute/cuda/12.2.0/local_installers/cuda_12.2.0_535.54.03_linux.run
sudo sh cuda_12.2.0_535.54.03_linux.run

下面是执行过程

root@ubuntu-test:~# wget https://developer.download.nvidia.com/compute/cuda/12.2.0/local_installers/cuda_12.2.0_535.54.03_linux.run
root@ubuntu-test:~# sudo sh cuda_12.2.0_535.54.03_linux.runInstallation failed. See log at /var/log/cuda-installer.log for details.
root@ubuntu-test:~# cat  /var/log/cuda-installer.log
[INFO]: Driver installation detected by command: apt list --installed | grep -e nvidia-driver-[0-9][0-9][0-9] -e nvidia-[0-9][0-9][0-9]
[INFO]: Cleaning up window
[INFO]: Complete
[INFO]: Checking compiler version...
[INFO]: gcc location: /usr/bin/gcc[INFO]: gcc version: gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1) [INFO]: Initializing menu
[INFO]: nvidia-fs.setKOVersion(2.16.1)
[INFO]: Setup complete
[INFO]: Installing: Driver
[INFO]: Installing: 535.54.03
[INFO]: Executing NVIDIA-Linux-x86_64-535.54.03.run --ui=none --no-questions --accept-license --disable-nouveau --no-cc-version-check --install-libglvnd  2>&1
[INFO]: Finished with code: 256
[ERROR]: Install of driver component failed. Consult the driver log at /var/log/nvidia-installer.log for more details.
[ERROR]: Install of 535.54.03 failed, quitting

在这里插入图片描述

输入accept,同意协议

在这里插入图片描述

这里的X号表示选中,第一次,我是选中这里的Driver,然后显示安装失败。所以第二次不选择安装这个driver

在这里插入图片描述

于是我现在取消第一个Driver的选中,按空格键表示选中还是不选中。

然后安装

在这里插入图片描述

安装完成的信息

===========
= Summary =
===========Driver:   Not Selected
Toolkit:  Installed in /usr/local/cuda-12.2/Please make sure that-   PATH includes /usr/local/cuda-12.2/bin-   LD_LIBRARY_PATH includes /usr/local/cuda-12.2/lib64, or, add /usr/local/cuda-12.2/lib64 to /etc/ld.so.conf and run ldconfig as rootTo uninstall the CUDA Toolkit, run cuda-uninstaller in /usr/local/cuda-12.2/bin
***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 535.00 is required for CUDA 12.2 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 --driverLogfile is /var/log/cuda-installer.log

配置环境变量

sudo vim ~/.bashrc

根据你给出的输出,CUDA 12.2 已经安装在 /usr/local/cuda-12.2/ 目录中,但是安装过程没有包括 NVIDIA 驱动。因此,CUDA 工具包可以正常使用,但需要驱动版本至少为 535.00。你需要将路径添加到 ~/.bashrc 中,以确保正确设置环境变量,使得系统能够识别 CUDA 工具包。

操作步骤:

  1. 打开 .bashrc 文件: 在终端中输入以下命令打开 ~/.bashrc 文件:

    sudo vim ~/.bashrc
    

    或者你可以使用其他编辑器,如 nano,如果你不熟悉 vim

    sudo nano ~/.bashrc
    
  2. 修改 .bashrc 文件: 在文件的最后添加以下内容来更新 PATHLD_LIBRARY_PATH 环境变量:

    # Add CUDA 12.2 to PATH and LD_LIBRARY_PATH
    export PATH=/usr/local/cuda-12.2/bin:$PATH
    export LD_LIBRARY_PATH=/usr/local/cuda-12.2/lib64:$LD_LIBRARY_PATH
    

    这会确保每次打开终端时,系统能够正确找到 CUDA 相关的可执行文件和库。

  3. 保存并退出: 如果你使用的是 vim,按 Esc 键,然后输入 :wq 来保存并退出。如果你使用的是 nano,按 Ctrl + O 保存文件,然后按 Ctrl + X 退出。

  4. 使修改生效: 修改 .bashrc 后,需要使改动生效。你可以执行以下命令来重新加载 .bashrc

    source ~/.bashrc
    
  5. 验证环境变量是否设置正确: 你可以通过运行以下命令来验证 PATHLD_LIBRARY_PATH 是否已正确设置:

    echo $PATH
    echo $LD_LIBRARY_PATH
    

    你应该能看到 /usr/local/cuda-12.2/bin 出现在 PATH 中,/usr/local/cuda-12.2/lib64 出现在 LD_LIBRARY_PATH 中。

继续安装或更新驱动:(因为我之前的驱动已经安装过,所以没有再装,如果读者需要装,可以按照命令装一下试试)

此外,你还需要安装适当的 NVIDIA 驱动来确保 CUDA 12.2 正常工作。根据输出,你的驱动未安装,或者当前驱动版本不符合要求。你可以使用以下命令来安装驱动(如果还未安装):

sudo apt-get install nvidia-driver-535

或者按照 CUDA 安装日志中的建议,运行以下命令来自动安装驱动:

sudo cuda-installer.run --silent --driver

完成这些步骤后,CUDA 环境应该设置正确,且可以正常使用。

但是使用ls -l /etc/alternatives/ | grep cuda发现软连接还是12.6

我已经装好了cuda12,为什么root@ubuntu-test:~# ls -l /etc/alternatives/ | grep cuda lrwxrwxrwx 1 root root 20 Dec 24 14:00 cuda -> /usr/local/cuda-12.6 lrwxrwxrwx 1 root root 20 Dec 24 14:00 cuda-12 -> /usr/local/cuda-12.6 lrwxrwxrwx 1 root root 36 Dec 24 14:00 cufile.json -> /usr/local/cuda-12.6/gds/cufile.json还是会这样,这里的软连接指向12.6是什么意思?是每次使用cuda都会用12.6吗?如何让运行程序使用12.2

当前 /etc/alternatives/ 目录中的符号链接显示,cudacuda-12 都指向 /usr/local/cuda-12.6 目录,而不是 /usr/local/cuda-12.2。这意味着系统默认会使用 CUDA 12.6,而不是 CUDA 12.2。你可以通过调整这些符号链接,使得系统指向 CUDA 12.2。

为什么会有这种情况?

这通常是因为在安装或配置 CUDA 12.6 时,它设置了默认的符号链接。而 /usr/local/cuda 是系统用来表示当前使用的 CUDA 版本的标准路径,通常是指向最新或当前使用的版本。

解决方法:

  1. 切换到 CUDA 12.2:

    你可以更新这些符号链接,让它们指向 /usr/local/cuda-12.2,而不是 /usr/local/cuda-12.6。操作步骤如下:

    1. 删除当前的符号链接:

      sudo rm /etc/alternatives/cuda
      sudo rm /etc/alternatives/cuda-12
      
    2. 创建新的符号链接,指向 CUDA 12.2:

      sudo ln -s /usr/local/cuda-12.2 /etc/alternatives/cuda
      sudo ln -s /usr/local/cuda-12.2 /etc/alternatives/cuda-12
      

    这样,cudacuda-12 这些符号链接就会指向 CUDA 12.2 了。

  2. 验证符号链接是否生效:

    使用以下命令确认符号链接已正确设置:

    ls -l /etc/alternatives/ | grep cuda
    

    输出应该类似这样,显示它们现在指向 CUDA 12.2:

    lrwxrwxrwx 1 root root  20 Dec 24 14:00 cuda -> /usr/local/cuda-12.2
    lrwxrwxrwx 1 root root  20 Dec 24 14:00 cuda-12 -> /usr/local/cuda-12.2
    
  3. 确保环境变量更新:

    如果你之前已设置 PATHLD_LIBRARY_PATH 环境变量来指向 CUDA 12.2,你可以重新加载这些环境变量:

    source ~/.bashrc
    

    如果你还没有设置这些环境变量,可以按照以下方式设置:

    export PATH=/usr/local/cuda-12.2/bin:$PATH
    export LD_LIBRARY_PATH=/usr/local/cuda-12.2/lib64:$LD_LIBRARY_PATH
    

    然后再次运行 source ~/.bashrc

  4. 验证是否使用正确的版本:

    运行以下命令验证是否使用了正确的 CUDA 版本:

    nvcc --version
    

    输出应显示 CUDA 12.2 的版本信息。

通过上述步骤,你可以确保系统使用 CUDA 12.2,而不是 CUDA 12.6。

这是在root账户下操作的。

user账户nvcc不可用解决方法

但是user账户下nvcc不可用

(base) xxx@ubuntu-test:~$ nvcc -V
bash: nvcc: command not found
(base) xxx@ubuntu-test:~$ nvidia-smi
Fri Jan 10 15:10:51 2025       
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.216.03             Driver Version: 535.216.03   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 3090        On  | 00000000:3B:00.0 Off |                  N/A |
| 30%   18C    P8               9W / 350W |      1MiB / 24576MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+
|   1  NVIDIA GeForce RTX 3090        On  | 00000000:5E:00.0 Off |                  N/A |
| 30%   17C    P8              11W / 350W |      1MiB / 24576MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+
|   2  NVIDIA GeForce RTX 3090        On  | 00000000:B1:00.0 Off |                  N/A |
| 30%   18C    P8              17W / 350W |      1MiB / 24576MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+
|   3  NVIDIA GeForce RTX 3090        On  | 00000000:D9:00.0 Off |                  N/A |
| 30%   18C    P8              15W / 350W |      1MiB / 24576MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------++---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
|  No running processes found                                                           |
+---------------------------------------------------------------------------------------+

解决方法:

如果 nvcc 在 root 用户下可以使用,但在普通用户下无法找到,可能是因为普通用户的环境变量没有正确设置。你需要确保普通用户的 PATH 环境变量包含了 CUDA 12.2 的路径。

解决方法:

  1. 检查并编辑普通用户的 .bashrc 文件:

    打开普通用户的 .bashrc 文件,确保其中有 CUDA 的环境变量设置。如果没有,手动添加:

    sudo vim ~/.bashrc 
    

    在文件末尾添加以下内容:

    export PATH=/usr/local/cuda-12.2/bin:$PATH
    export LD_LIBRARY_PATH=/usr/local/cuda-12.2/lib64:$LD_LIBRARY_PATH
    

    如果你使用的是 vim,按 Esc 键,然后输入 :wq 来保存并退出。

  2. 使更改生效:

    为了使 .bashrc 中的更改立即生效,运行以下命令:

    source ~/.bashrc
    
  3. 验证环境变量是否生效:

    运行以下命令,确保环境变量已经更新:

    echo $PATH
    echo $LD_LIBRARY_PATH
    

    检查输出,确认 PATH 中包含 /usr/local/cuda-12.2/binLD_LIBRARY_PATH 中包含 /usr/local/cuda-12.2/lib64

  4. 验证 nvcc 是否可用:

    重新打开终端或运行以下命令来确认 nvcc 是否可以使用:

    nvcc --version
    

    如果一切设置正确,你应该能看到 CUDA 12.2 的版本信息。

其他检查:

  • 如果你在使用不同的 shell(如 zsh),确保在相应的配置文件(如 .zshrc)中也进行了环境变量的设置。
  • 确保没有其他路径覆盖了 CUDA 路径,导致 nvcc 无法找到。

通过这些步骤,你应该能够在普通用户下成功使用 nvcc

显示成功:

在这里插入图片描述

参考

Ubuntu22.04.3安装CUDA12.2

ubuntu20.04安装12.2版本的cuda

后记

2025年1月10日15点19分于上海,在GPT4o大模型辅助下完成。


http://www.ppmy.cn/embedded/152931.html

相关文章

Golang学习笔记_23——error补充

Golang学习笔记_20——error Golang学习笔记_21——Reader Golang学习笔记_22——Reader示例 文章目录 error补充1. 基本错误处理2. 自定义错误3. 错误类型判断3.1 类型断言3.2 类型选择 4. panic && recover 源码 error补充 1. 基本错误处理 在Go中&#xff0c;函数…

C# 使用iText 编辑PDF

NetCore 创建、编辑PDF插入表格、图片、文字 NetCore 创建、编辑PDF插入表格、图片、文字(二) NetCore 创建、编辑PDF插入表格、图片、文字(三) 1&#xff0c;.net8 环境&#xff0c;引入 包 itext7 itext7.bouncy-castle-adapter 2,直接上代码 public class PDFEditor{public…

如何解决Redis中的热点key问题

Redis中的热点Key问题是指某些特定的Key被频繁访问&#xff0c;导致Redis中某个节点&#xff08;或实例&#xff09;承担过高的压力&#xff0c;可能引发性能瓶颈&#xff0c;甚至若缓存承受不住服务压力挂掉后&#xff0c;仍有大量请求时直接打到DB上&#xff0c;由于DB层相对…

JVM实战—OOM的生产案例

1.每秒仅上百请求的系统为何会OOM(RPC超时时间设置过长导致QPS翻几倍) (1)案例背景 在这个案例中&#xff0c;一个每秒仅仅只有100请求的系统却因频繁OOM而崩溃。这个OOM问题会涉及&#xff1a;Tomcat底层工作原理、Tomcat内核参数的设置、服务请求超时时间。 (2)系统发生OOM的…

fail api scope is not declared in the privacy agreement微信小程序uniapp 解决录音无法播放、授权

已解决 fail api scope is not declared in the privacy agreement微信小程序uniapp 解决录音无法播放、授权 没有声明内容协议导致的 微信公众平台&#xff1a;https://mp.weixin.qq.com/【1.左下角的-移动过去后会出现 “帐号设置”】 【2.基本设置->服务内容声明->修…

Go语言的面向对象接口说明及代码示例

Go语言的面向对象接口说明及代码示例 Go语言虽然不是传统意义上的面向对象语言&#xff0c;但它通过接口(interface)提供了一种优雅的方式来实现面向对象编程的多态特性。本文将详细介绍Go语言接口的概念和使用方法。 1. 接口的基本概念 在Go语言中&#xff0c;接口是一种类…

android studio使用DataBinding

DataBinding 是谷歌官方发布的在android上对MVVM设计模式的一个实现框架&#xff0c;其作用是实现数据绑定。 Android DataBinding主要实现了View和ViewModel的双向绑定&#xff0c;包括用户的响应。并且实现了自动更新。 DataBinding优点&#xff1a; 1.大量减少Act…

如何学习Vue设计模式

如何学习Vue设计模式 Vue 设计模式是 Vue.js 框架中用于解决常见问题的可复用解决方案。这些模式帮助开发者更有效地组织和管理代码&#xff0c;提升代码的可维护性、可扩展性和可读性。以下是一些常见的 Vue 设计模式&#xff1a; 1. 数据存储模式 可组合函数&#xff1a;用…