感受独显的力量

常见的笔记本电脑有两块显卡:集成在CPU内部的核心显卡,和作为GPU的独立显卡(如Nvidia RTX3060)。相比驱动完备的win10Linux系统往往自带合适够用的核显驱动,但独显驱动很不理想,甚至直接没有,导致设备的图形处理和并行计算能力就不能充分发挥。本文就将探讨基于ubuntu系统的N卡驱动配置。

标题:Linux系统下的N卡驱动配置

驱动安装

卸载旧驱动

首先卸载之前的,或者是系统自动安装的驱动

#for case1: original driver installed by apt-get:
#系统自带驱动,或者自己用apt装驱动的走这个方向
sudo apt-get remove --purge nvidia*

#for case2: original driver installed by runfile:
#自己之前去nvidia官网下载驱动装失败的走这个方向
sudo chmod +x *.run
sudo ./xxxx.run --uninstall

禁用nouveau

该软件相当于逆向nvidia的官方显卡驱动得到的开源的显卡驱动,一般是发行版自带

  1. 打开黑名单配置文件

    sudo vim /etc/modprobe.d/blacklist.conf
    
  2. 在最后一行添加

    blacklist nouveau
    
  3. 之后执行命令

    sudo update-initramfs -u
    #重启
    reboot
    #检查nouveau是否被禁用
    lsmod | grep nouveau
    #若没有输出则成功
    

安装新驱动

方法一:从官网下载.run并安装

  1. 官网链接找到自己需要的驱动版本,下载对应的.run安装程序

  2. 按下Ctrl+Alt+(F1~F6中的任意一个)进入模拟终端界面(防止驱动安装过程中GUI崩坏)

    也可使用命令行临时关闭图形界面(具体命令可能随系统版本不同而不同)

    sudo service lightdm stop
    

    进入模拟终端后,输入用户名和密码登录

  3. 进入.run文件的目录下并赋予执行权限

    sudo chmod a+x *.run
    

    运行.run文件进行安装(注意参数)

    sudo ./*.run –no-opengl-files
    

    参数说明

    • –no-opengl-files 只安装驱动文件,不安装OpenGL文件。这个参数最重要

      • 如果对该参数报错,实质上也可以去掉参数继续,但最终的结果可能是要改用方法二
    • –no-x-check 安装驱动时不检查X服务

    • –no-nouveau-check 安装驱动时不检查nouveau
      后面两个参数可不加。

  4. 安装过程都选择默认项,除非碰到默认abort再选取continue,但出现这样的选项就可以考虑换方法二了

  5. 安装完成后reboot重启

方法二:使用apt流法安装

  1. apt更新软件源

    添加PPA(Personal Package Archives),通过Ubuntu社区维护的名为graphics-drivers的PPA提供驱动程序,该社区目前貌似只支持N卡

    sudo add-apt-repository ppa:graphics-drivers/ppa 
    sudo apt-get update
    
  2. 查看设备可安装的驱动

    (这条指令的原理有点神秘)

    ubuntu-drivers devices
    
  3. 安装对应的驱动,如:

    sudo apt install nvidia-driver-xxx
    

    在2中,会有些驱动被标注recommended,标注的free与否目前没有发现差别

  4. reboot重启

验证

  • 使用nvidia-smi验证安装成功的驱动

切换

适用多显卡的情况,如核心显卡+独立显卡

要想切换,首先需要安装nvidia-prime

方法一: 控制台使用prime-select

  1. prime-select query查看当前使用显卡模式

  2. prime-select nvidia切换到N卡;prime-select intel切换到英特尔核心显卡

  3. 其他类似需求可以参照上述

方法二:GUI使用NVIDIA X Server Settings

  1. 从程序坞里找到NVIDIA X Server Settings
  2. 在左侧菜单栏选择PRIME Profiles
  3. 点选对应的GPU使用模式
  4. reboot重启即可生效

性能测试

mesa-utils

齿轮测试

  1. 对应apt安装的包名,其他包管理系统可能有区别
  2. 执行glxgears进行测试,FPS会输出到当前终端

glmark2

综合测试

  1. 包管理系统安装glmark2

  2. 执行glmark2进行测试,终端会输出有关信息,最后会输出跑分

  3. 可能出现的段错误:

    Error: Failed to add fragment shader from file None:
    Error:   0(26) : warning C7022: unrecognized profile specifier "highp"
    Error: 0(26) : error C0502: syntax error at token "highp"
    Error: 
    Error: Failed to add fragment shader from file None:
    Error:   0(75) : warning C7022: unrecognized profile specifier "highp"
    Error: 0(75) : error C0502: syntax error at token "highp"
    Error: 
    [terrain] <default>:Segmentation fault (core dumped)
    

    这里通过访问开源的glmark2issue页面提出的问题,得到了解决方法,对自己以后解决开源工具使用的问题也有启发

    通过gdb调试可知,出现段错误的地方,访问的vector大小为0,定位到该问题出现在编译过程中,是受限于版本导致的参数不支持

    解决方法:将测试程序shaders目录下的所有.frag文件中的GL_FRAGMENT_PRECISION_HIGH替换成GL_FRAGMENT_PRECISION_HIGH_DISABLED

    具体步骤:

    1. 找到glmark2安装位置

      whereis glmark2
      

      参考的源码目录为/usr/share/glmark2

    2. 进入安装目录,对目录下的shaders目录做好备份

      mkdir backup
      cp ./shaders/*.frag
      
    3. 使用sed快速替换

      sudo sed -i 's/GL_FRAGMENT_PRECISION_HIGH/GL_FRAGMENT_PRECISION_HIGH_DISABLED/g' /usr/share/glmark2/shaders/*.frag
      

    源码替换完成后,再次运行即可恢复正常

参考教程

AI分享帖_0_1—环境配置

Ubuntu 18.04 +Nvidia gtx 1650 显卡驱动安装

如何通过PPA为Ubuntu安装Nvidia驱动

archlinux 显卡驱动

解决Ubuntu没有Prime Profiles选项的问题

github/glmark2/glmark2/issues/153