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
输出的信息包含了当前系统的详细信息。我们可以将其分解如下:
- 操作系统名称:
Linux
:表示操作系统是 Linux。
- 主机名:
ubuntu-test
:表示计算机的主机名。
- 内核版本:
5.5.10-050510-generic
:表示正在使用的 Linux 内核版本是 5.5.10,并且使用的是通用(generic)版本。
- 内核构建信息:
#202003180732
:这是内核的构建号,通常包含构建日期和时间。这里显示的是构建的时间戳(2020年3月18日 07:32:23 UTC)。
- 内核编译类型:
SMP
:表示内核支持对称多处理(Symmetric Multi-Processing),即系统能够使用多个处理器(或核心)。
- 内核编译日期和时间:
Wed Mar 18 07:35:23 UTC 2020
:表示内核编译的日期和时间。
- 系统架构:
x86_64
:表示系统架构是 64 位的 x86 架构(即常见的 64 位 Intel 或 AMD 处理器)。
- 操作系统架构:
x86_64
:再次表明系统是 64 位的。
- 操作系统类型:
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 下载一个文件。让我们解析这个命令的各个部分:
wget
:- 这是一个命令行工具,用于从网络上下载文件。它支持通过 HTTP、HTTPS 和 FTP 协议下载文件。
https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin
:- 这是一个 URL,指定了文件的位置。我们可以将其拆解成几个部分:
总结:这条命令的作用是使用 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
提升权限。我们可以详细解析如下:
sudo
:sudo
是一个用于以超级用户(root)身份运行命令的工具。在这个命令中,sudo
让用户能够有足够的权限来进行文件操作,因为目标目录/etc/apt/preferences.d/
通常需要超级用户权限才能写入。
mv
:mv
是一个用于移动文件或重命名文件的命令。它将cuda-ubuntu2004.pin
文件从当前目录移动到指定的目录/etc/apt/preferences.d/
下,并且可以同时进行重命名。
cuda-ubuntu2004.pin
:- 这是源文件的名称。它是之前下载的
.pin
文件,包含有关 CUDA 软件包的优先级信息。
- 这是源文件的名称。它是之前下载的
/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
包文件。下面是对命令的逐部分解析:
-
wget
:wget
是一个命令行工具,用于从互联网上下载文件。它支持多种协议(如 HTTP、HTTPS 和 FTP)进行文件传输。
-
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
安装包。下面是对命令的详细解析:
sudo
:
sudo
是一个命令行工具,用于以超级用户(root)权限运行命令。由于安装软件包需要系统管理员权限,sudo
在这里用于提升权限。
dpkg
:
dpkg
是 Debian 系统及其衍生版本(如 Ubuntu)中用于安装、卸载和管理.deb
包的工具。它是低层次的包管理工具,可以直接安装、配置和移除.deb
包文件。
-i
:
-i
选项表示安装模式(install),即告诉dpkg
执行安装操作。后面紧跟着的是要安装的.deb
包文件。
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 密钥文件复制到系统的密钥存储目录。下面是对命令各部分的详细解析:
sudo
:
sudo
是用来以超级用户(root)权限执行命令的工具。由于需要在系统目录(如/usr/share/keyrings/
)中写入文件,因此需要管理员权限。
cp
:
cp
是 Linux 系统中的一个命令,用于复制文件或目录。此处表示将源文件复制到目标位置。
/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 密钥文件。
/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)。让我们逐一解析这些输出:
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
。
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 的安装目录。
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/
目录下的cuda
、cuda-12
和cufile.json
都指向/usr/local/cuda-12.6
目录中的相关内容。 - 具体来说:
cuda
和cuda-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 工具包。
操作步骤:
-
打开
.bashrc
文件: 在终端中输入以下命令打开~/.bashrc
文件:sudo vim ~/.bashrc
或者你可以使用其他编辑器,如
nano
,如果你不熟悉vim
:sudo nano ~/.bashrc
-
修改
.bashrc
文件: 在文件的最后添加以下内容来更新PATH
和LD_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 相关的可执行文件和库。
-
保存并退出: 如果你使用的是
vim
,按Esc
键,然后输入:wq
来保存并退出。如果你使用的是nano
,按Ctrl + O
保存文件,然后按Ctrl + X
退出。 -
使修改生效: 修改
.bashrc
后,需要使改动生效。你可以执行以下命令来重新加载.bashrc
:source ~/.bashrc
-
验证环境变量是否设置正确: 你可以通过运行以下命令来验证
PATH
和LD_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/
目录中的符号链接显示,cuda
和 cuda-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 版本的标准路径,通常是指向最新或当前使用的版本。
解决方法:
-
切换到 CUDA 12.2:
你可以更新这些符号链接,让它们指向
/usr/local/cuda-12.2
,而不是/usr/local/cuda-12.6
。操作步骤如下:-
删除当前的符号链接:
sudo rm /etc/alternatives/cuda sudo rm /etc/alternatives/cuda-12
-
创建新的符号链接,指向 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
这样,
cuda
和cuda-12
这些符号链接就会指向 CUDA 12.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
-
确保环境变量更新:
如果你之前已设置
PATH
和LD_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
。 -
验证是否使用正确的版本:
运行以下命令验证是否使用了正确的 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 的路径。
解决方法:
-
检查并编辑普通用户的
.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
来保存并退出。 -
使更改生效:
为了使
.bashrc
中的更改立即生效,运行以下命令:source ~/.bashrc
-
验证环境变量是否生效:
运行以下命令,确保环境变量已经更新:
echo $PATH echo $LD_LIBRARY_PATH
检查输出,确认
PATH
中包含/usr/local/cuda-12.2/bin
,LD_LIBRARY_PATH
中包含/usr/local/cuda-12.2/lib64
。 -
验证
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大模型辅助下完成。