注意:超频有风险,请勿操作。
在 Linux 系统下进行显卡超频,一般是通过图形界面的 Nvidia X settings 或者 GreenWithEnvy。然而,对远程主机而言,可能会出现CUDA Cores任务能提交,但 Nvidia 相关软件在 X 中(透过 VNC 或者 TeamViewer 启动)无法加载选项的情况。如图 1 所示,只有 Prime Profile 一个选项,其他选项消失不见。在这种情况下 GreenWithEnvy 也是无法启动的,会提示 NV CONTROL X extension not found (无图)。
(图1,Nvidia X setting 只有 Prime profile选项,其他选项都不存在)
尝试更换设定 coolbits,重装 Nvidia 驱动,更改 Nvidia 驱动版本,重装 Cuda,重装 X 及桌面,均无法解决问题。原因可能是板载显卡处于启用状态导致NVIDIA Optimus出问题,但在内核中禁用 Intel 后仍未解决。按理说能透过命令行提交 CUDA Cores 任务就代表驱动已经加载成功,所以,透过命令行进行超频操作是解决这种情况最好的方向。本文收集并整理了在 Ubuntu 20.04 系统下透过命令行对 Nvidia 显卡进行超频的步骤。
0. 事前准备
首先必须安装 Nvidia CUDA,在官网中有不同系统的详细步骤。以下为 Ubuntu 20.04 安装指令,从官网复制。
1 2 3 4 5 6 |
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 sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/7fa2af80.pub sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /" sudo apt-get update sudo apt-get -y install cuda |
1. 安装X以及在X中加入GPU选项
Nvidia 超频必须调用 X,原因不明。最轻量的方式就是安装 lightdm. 如果在安装过程中有交互窗口要求选择默认桌面,请选择lightdm 而不是 gdm.
1 |
apt install xorg lightdm lightdm-gtk-greeter |
调用Nvidia软件生成Xorg配置
1 |
nvidia-xconfig --cool-bits=24 --enable-all-gpus |
Cool-bits 用于开启 CLI控制、风扇控制、内存频率控制等操作,24 代表开启所有功能,具体位表可在[1]查看。--enable-all-gpus 参数代表对主机上的所有显卡都启用。
期望输出如下
1 2 3 |
Using X configuration file: "/etc/X11/xorg.conf". Backed up file '/etc/X11/xorg.conf' as '/etc/X11/xorg.conf.backup' New X configuration file written to '/etc/X11/xorg.conf' |
如果出现 Unable to count GPU / Unable to locate/open X configuration file 等错误,则需要在重启主机后重新执行上述命令。
接下来编辑 /etc/X11/xorg.conf 文件,找到 Options Cool-bits 行,加入以下选项,以允许在没有连接显示器的情况下运行 X (Headless X server).
1 2 3 |
Option "AllowEmptyInitialConfiguration" "True" Option "ConnectedMonitor" "DFP-0" Option "Interactive" "False" |
锁定xorg文件防止lightdm, nvidia等软件修改
1 |
chattr +i /etc/X11/xorg.conf |
此时需要重启主机
1 |
reboot |
2. 启动 X 并检测 GPU 参数
主机重启完成后,执行以下指令启动 X
1 |
systemctl start lightdm |
如果出现错误,请查看 /var/log/Xorg.0.log 文件。
查看 GPU 优先模式,[gpu:0] 代表第0个GPU,编号与 nvidia-smi 命令输出结果对应。
1 |
DISPLAY=:0 XAUTHORITY=/var/run/lightdm/root/:0 nvidia-settings -q '[gpu:0]/GPUPerfModes' |
以下是一张 RTX 2060 的输出例子
1 2 3 4 5 6 7 |
Attribute 'GPUPerfModes' (henry-Default-string:0[gpu:0]): perf=0, nvclock=300, nvclockmin=300, nvclockmax=645, nvclockeditable=1, memclock=405, memclockmin=405, memclockmax=405, memclockeditable=1, memTransferRate=810, memTransferRatemin=810, memTransferRatemax=810, memTransferRateeditable=1 ; perf=1, nvclock=300, nvclockmin=300, nvclockmax=2100, nvclockeditable=1, memclock=810, memclockmin=810, memclockmax=810, memclockeditable=1, memTransferRate=1620, memTransferRatemin=1620, memTransferRatemax=1620, memTransferRateeditable=1 ; perf=2, nvclock=300, nvclockmin=300, nvclockmax=2100, nvclockeditable=1, memclock=5001, memclockmin=5001, memclockmax=5001, memclockeditable=1, memTransferRate=10002, memTransferRatemin=10002, memTransferRatemax=10002, memTransferRateeditable=1 ; perf=3, nvclock=300, nvclockmin=300, nvclockmax=2100, nvclockeditable=1, memclock=7301, memclockmin=7301, memclockmax=7301, memclockeditable=1, memTransferRate=14602, memTransferRatemin=14602, memTransferRatemax=14602, memTransferRateeditable=1 ; perf=4, nvclock=300, nvclockmin=300, nvclockmax=2100, nvclockeditable=1, memclock=7501, memclockmin=7501, memclockmax=7501, memclockeditable=1, memTransferRate=15002, memTransferRatemin=15002, memTransferRatemax=15002, memTransferRateeditable=1 |
在这里,每个优先级别均以分号;隔开,在这里我们关心 memclockeditable 和 nvclockeditable 参数,分别代表内存和核心是否可以更改。如果值为 1 则代表可以更改。
perf 代表不同的级别,显卡正常工作于最高级别(在这个例子里面为4),当显卡过热的时候,会降级到级别 3,如果再过热则降到 2,以此类推。因此,对于普通超频操作,我们只需要更改最高级别的参数,以免损坏显卡。
-q 查询参数还能查询其他值,例如 '-q gpus' 输出所有 GPU, '-q fans' 输出风扇状态,'-q all' 输出所有参数等。
3. 超频及降电
执行以下指令即可对GPU超频
1 |
DISPLAY=:0 XAUTHORITY=/var/run/lightdm/root/:0 nvidia-settings -a '[gpu:0]/GPUMemoryTransferRateOffset[3]=200' |
DISPLAY 及/var/run/lightdm/root/:0 是我们在第2步启动的lightdm,默认编号是 0. 如果主机启用了多个显示,则需要按需更改。
[gpu:0]/GPUMemoryTransferRateOffset[4]=100 代表在第 0 个 GPU 的第 4 个级别上对内存频率增加 100。 这里也可以使用 '[gpu:0]/GPUGraphicsClockOffset[4]=50' 代表在第 0 个GPU 的第 4 个级别对核心频率增加 50. 增加值建议从小值开始,慢慢往上加。
使用以下指令可以更改 GPU 风扇速度,对于超频一般不需要更改 GPU 风扇,默认自动就好。
1 2 |
DISPLAY=:0 XAUTHORITY=/var/run/lightdm/root/:0 nvidia-settings -a "[gpu:0]/GPUFanControlState=1" DISPLAY=:0 XAUTHORITY=/var/run/lightdm/root/:0 nvidia-settings -a "[gpu:0]/GPUTargetFanSpeed=80" |
使用 nvidia-smi 查看电量情况
1 |
nvidia-smi |
RTX 2060 输出例子
1 2 3 4 5 6 7 8 9 10 11 |
+-----------------------------------------------------------------------------+ | NVIDIA-SMI 460.32.03 Driver Version: 460.32.03 CUDA Version: 11.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 GeForce RTX 2060 On | 00000000:02:00.0 Off | N/A | | 66% 59C P2 127W / 160W | 4476MiB / 5934MiB | 100% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ |
使用以下指令可以降低最大电量。
1 |
nvidia-smi -i 0 -pl 130 |
其中 0 为第 0 个 GPU,130 为新设定最大电量值。省略 -i 参数则对所有 GPU 应用。
Reference
[1] NVIDIA/Tips and tricks
[2] NV-CONTROL X extention not found
[3] X Server Settings - Only Shows PRIME Profiles
[4] Headless Ethminer (nVidia) Setup Guide
[5] Ubuntu Nvidia Overclocking, Heat and Power Management
[6] Xorg Monitor Settings- ArchWiki
[7] NVIDIA Optimus
你好,受教了,你这方法我倒是能够运行起来。
但是发现风扇不受控,而且还一直维持在低速30%,想超频反而不敢超了
请问这个怎么解决呢?
什么j8