KureiSersen site

Nvidia环境

· Edwin.Liang

在ubuntu22.04LTS系统下搭建深度学习环境

涉及到的部分

Nvidia driver

  1. 根据显卡型号去nvidia下载地址下载驱动,得到.run文件 注意,不要开科学上网,nvidia官网好像有点毛病,科学上网加载不完全死活出不来界面

  2. 安装驱动,我这里刚买的4070tis显卡,截止安装驱动日期,最新的驱动版本是550.40.07

    $ sudo ./NVIDIA-Linux-x86_64-xxx.xx.run
    
    1. Nvidia's 32-bit compatibility libraries?

      都是64位系统,不需要32位的兼容库

      NO
      
    2. 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 
      
    3. 报错 “Building kernel modules” .See /var/log/nvidia-installer.log for details

      1. /var/log/nvidia-installer.log 查报错,看到这一条 error: unrecognized command line option ‘-ftrivial-auto-var-init=zero’

      2. 经过搜索疑似是gcc版本的问题,ubuntu22.04安装的gcc版本是gcc-11,查询到网上大部分同类型错误可以通过把gcc升级到gcc-12来解决。为什么是疑似,因为在反复的安装卸载驱动过程中,我曾经侥幸在gcc-11的环境下安装成功,但是未往下深究为什么会安装成功,这里为了方便起见,不管他,先挖个坑。

      3. 接下来安装gcc-12,但是仅安装gcc-12在后续的验证过程中是行不通的,原因是nvidia driver引用的gcc是一个软连接,目录在/usr/bin/gcc,实际指向的是gcc-11这个老版本,因此我们在安装gcc-12之后,还要把/usr/bin/gcc指向gcc-12,这里会用到一个环境版本管理工具update-alternatives,关于update-alternatives的使用教程这里就不展开了,下面展示一下正确的姿势。

        1. 先查看一下gcc在update-alternatives里面有没有被配置过软链接,正常的情况下应该是没有配置过

          $ update-alternatives --display gcc
          
        2. 没有配置的话先把gcc-11这个老版本配置一下,这里最后一个参数110是优先级,可以随便写数字,这里按照常规做法,把版本号乘10记做优先级数字

          $ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 110
          
        3. 然后别忘了把g++也配置一下,这两个东西的区别在这里就不展开了,有gcc必然有g++

          $ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 110
          
        4. 这个时候可以在调用一下update-alternatives --display gcc这个命令,可以看到我们刚刚配置的结果,检查一下

        5. 安装一下gcc-12、g++-12

          $ sudo apt install gcc-12 g++-12
          
        6. 继续配置新安装的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
          
        7. 配置完之后可以再次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
          
        8. 然后再运行一下nvidia driver的安装程序就不会报相同的错误了

  3. 安装成功之后运行一下nvidia-smi,正常显示就说明驱动没有问题了,这时候的run file文件先别急着删,后面有可能还会用到。

  4. 如果你通过run file安装了nvidia driver,之后因为种种特殊的原因想要卸载怎么办,这时候就用到了原先没有删除的run file

    $ sudo ./NVIDIA-Linux-x86_64-xxx.xx.run --unistall
    

CUDA Toolkit

  1. 根据显卡驱动版本去找对应的CUDA版本,比如550.40.07驱动支持的CUDA版本截止安装驱动日期最高是12.3,所以先去nvidia CUDA下载地址拿到CUDA Toolkit的run file

  2. 安装CUDA

    $ sudo ./cuda_12.3.2_545.23.08_linux.run
    
  3. cuda本身自带一个比较老版本的nvidia driver,因为我们已经安装过nvidia driver了,所以这里用回车把他点掉,要不然会报错,其他的选项不用管,直接选中Install安装,这次安装比较丝滑,没有遇到任何问题,所以没有来得及截图,下面这张图是网图,但是样式是一样。

  4. 安装完之后运行nvcc --version,诶这时候你发现,怎么没反应,为什么找不到命令,这是因为nvcc没有变成全局命令,运行下面的命令会有反应

    $ /usr/local/cuda/bin/nvcc --version
    

pytorch

  1. pytorch相对就简单很多了,直接找到pytorch官网下载地址,复制pip3命令执行

  2. pip3命令运行之前建议开科学上网,要不然很慢,安装之后,建议运行一下nvidia-smi,看看nvidia driver有没有因为未知原因被顶掉,我安装的时候被顶掉了,不得已重新卸载了nvidia driver又重新安装了一遍,如果nvidia-smi正常显示那么没问题

  3. 运行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名称