Nvidia环境
在ubuntu22.04LTS系统下搭建深度学习环境
涉及到的部分
Nvidia driver
-
根据显卡型号去nvidia下载地址下载驱动,得到.run文件 注意,不要开科学上网,nvidia官网好像有点毛病,科学上网加载不完全死活出不来界面
-
安装驱动,我这里刚买的4070tis显卡,截止安装驱动日期,最新的驱动版本是550.40.07
$ sudo ./NVIDIA-Linux-x86_64-xxx.xx.run
-
Nvidia's 32-bit compatibility libraries?
都是64位系统,不需要32位的兼容库
NO
-
Would you like to run the nvidia-xconfigutility to automatically update your x configuration so that the NVIDIA x driver will be used when you restart x? Any pre-existing x confile will be backed up
x window system指的是linux GUI,这里需要让驱动自行配置,等重启电脑之后,自动启用最新安装的驱动
YES
-
报错 “Building kernel modules” .See /var/log/nvidia-installer.log for details
-
去 /var/log/nvidia-installer.log 查报错,看到这一条 error: unrecognized command line option ‘-ftrivial-auto-var-init=zero’
-
经过搜索疑似是gcc版本的问题,ubuntu22.04安装的gcc版本是gcc-11,查询到网上大部分同类型错误可以通过把gcc升级到gcc-12来解决。为什么是疑似,因为在反复的安装卸载驱动过程中,我曾经侥幸在gcc-11的环境下安装成功,但是未往下深究为什么会安装成功,这里为了方便起见,不管他,先挖个坑。
-
接下来安装gcc-12,但是仅安装gcc-12在后续的验证过程中是行不通的,原因是nvidia driver引用的gcc是一个软连接,目录在
/usr/bin/gcc
,实际指向的是gcc-11这个老版本,因此我们在安装gcc-12之后,还要把/usr/bin/gcc
指向gcc-12,这里会用到一个环境版本管理工具update-alternatives
,关于update-alternatives
的使用教程这里就不展开了,下面展示一下正确的姿势。-
先查看一下gcc在
update-alternatives
里面有没有被配置过软链接,正常的情况下应该是没有配置过$ update-alternatives --display gcc
-
没有配置的话先把gcc-11这个老版本配置一下,这里最后一个参数110是优先级,可以随便写数字,这里按照常规做法,把版本号乘10记做优先级数字
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 110
-
然后别忘了把g++也配置一下,这两个东西的区别在这里就不展开了,有gcc必然有g++
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 110
-
这个时候可以在调用一下
update-alternatives --display gcc
这个命令,可以看到我们刚刚配置的结果,检查一下 -
安装一下gcc-12、g++-12
$ sudo apt install gcc-12 g++-12
-
继续配置新安装的gcc-12、g++-12
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 120 $ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 120
-
配置完之后可以再次
update-alternatives --display gcc
,这个时候应该可以看到链接已经指向gcc-12了,因为gcc-12的优先级是120,大于老版本110,并且有下面这样的文字输出$ update-alternatives --display gcc gcc - 自动模式 link best version is /usr/bin/gcc-12 链接目前指向 /usr/bin/gcc-12 link gcc is /usr/bin/gcc
-
然后再运行一下nvidia driver的安装程序就不会报相同的错误了
-
-
-
-
安装成功之后运行一下
nvidia-smi
,正常显示就说明驱动没有问题了,这时候的run file文件先别急着删,后面有可能还会用到。 -
如果你通过run file安装了nvidia driver,之后因为种种特殊的原因想要卸载怎么办,这时候就用到了原先没有删除的run file
$ sudo ./NVIDIA-Linux-x86_64-xxx.xx.run --unistall
CUDA Toolkit
-
根据显卡驱动版本去找对应的CUDA版本,比如
550.40.07
驱动支持的CUDA版本截止安装驱动日期最高是12.3
,所以先去nvidia CUDA下载地址拿到CUDA Toolkit的run file -
安装CUDA
$ sudo ./cuda_12.3.2_545.23.08_linux.run
-
cuda本身自带一个比较老版本的nvidia driver,因为我们已经安装过nvidia driver了,所以这里用回车把他点掉,要不然会报错,其他的选项不用管,直接选中
Install
安装,这次安装比较丝滑,没有遇到任何问题,所以没有来得及截图,下面这张图是网图,但是样式是一样。 -
安装完之后运行
nvcc --version
,诶这时候你发现,怎么没反应,为什么找不到命令,这是因为nvcc没有变成全局命令,运行下面的命令会有反应$ /usr/local/cuda/bin/nvcc --version
pytorch
-
pytorch相对就简单很多了,直接找到pytorch官网下载地址,复制
pip3
命令执行 -
pip3
命令运行之前建议开科学上网,要不然很慢,安装之后,建议运行一下nvidia-smi
,看看nvidia driver有没有因为未知原因被顶掉,我安装的时候被顶掉了,不得已重新卸载了nvidia driver又重新安装了一遍,如果nvidia-smi
正常显示那么没问题 -
运行
python
命令看看pytorch能不能找到显卡,如果能找到说明整体安装成功import torch from torch import nn print(torch.cuda.is_available()) # true 查看GPU是否可用 print(torch.cuda.device_count()) #GPU数量, 1 print(torch.cuda.get_device_name(torch.cuda.current_device())) #输出GPU名称