Ubuntu20.04 中的 nVidia RTX 3070 ETH 超频:nvidia-settings -a GPUGraphicsClockOffset/GPUMemoryTransferRateOffset 不起作用

Ubuntu20.04 中的 nVidia RTX 3070 ETH 超频:nvidia-settings -a GPUGraphicsClockOffset/GPUMemoryTransferRateOffset 不起作用

我在华硕 B250 Mining Expert 主板上使用配备 2 个 RTX 3070 GPU 的 Ubuntu 20.04,我想用它进行 ETH 挖矿。我在新的 Ubuntu 20.04 安装中安装了所有需要的软件,如下所示:

sudo -i
apt install nvidia-driver-460
nvidia-xconfig -a --cool-bits=28
reboot
  • 我检查了我的/etc/X11/xorg.conf文件,它coolbits = 28已写入所有 3 个 GPU,这没问题。

  • 我测试了nvidia-smi所有 GPU 的欠压/功率限制 (pl),使用方法如下:

    nvidia-smi -pl 120
    

    而且它也能工作,因为使用 T-Rex 进行挖掘时可以看到功率限制,这是没问题的。

  • nvidia-serttings对所有 GPU 的风扇进行了如下测试:

    nvidia-settings -a [gpu:0]/GPUFanControlState=1
    nvidia-settings -a [fan:0]/GPUTargetFanSpeed=50
    

    而且它也能正常工作。风扇立即开始转动得更快。

  • 当我打开 NVIDIA X 服务器设置应用程序时,我可以手动更改每个 GPU 的电源管理模块选择的值图形时钟偏移内存传输率偏移。按下后Enter数值变为有效。使用 T-Rex 挖矿时,哈希率会上升,这是可以的。

所以一切正常,但我想使用 shell 脚本以自动方式完成上述所有操作,我已经尝试过了。

但是:使用终端中的这些命令无法运行超频。即使提示答案也Attribute ... assigned ...如下所示:

$ nvidia-settings -a GPUGraphicsClockOffset[3]=-500
Attribute 'GPUGraphicsClockOffset' (katzminer-desktop:0.0) assigned to value -500.
Attribute 'GPUGraphicsClockOffset' (katzminer-desktop:0.1) assigned to value -500.
Attribute 'GPUGraphicsClockOffset' (katzminer-desktop:0[gpu:0]) assigned to value -500.
Attribute 'GPUGraphicsClockOffset' (katzminer-desktop:0[gpu:1]) assigned to value -500.
$ nvidia-settings -a GPUMemoryTransferRateOffset[3]=2200
Attribute 'GPUMemoryTransferRateOffset' (katzminer-desktop:0.0) assigned to value 2200.
Attribute 'GPUMemoryTransferRateOffset' (katzminer-desktop:0.1) assigned to value 2200.
Attribute 'GPUMemoryTransferRateOffset' (katzminer-desktop:0[gpu:0]) assigned to value 2200.
Attribute 'GPUMemoryTransferRateOffset' (katzminer-desktop:0[gpu:1]) assigned to value 2200.

当我检查 NVIDIA X 服务器设置应用程序时,在每个 GPU 的电源管理模块GPUGraphicsClockOffset选项,和的值GPUMemoryTransferRateOffset仍然为 0。

我究竟做错了什么?

我也尝试过每个 GPU,但没有成功:

nvidia-setttings -c :0 -a '[gpu:0]/GPUMemoryTransferRateOffset[3]=2200'
nvidia-settings -c :0 -a '[gpu:0]/GPUGraphicsClockOffset[3]=-500'

我需要sudo在之前使用吗nvidia-settings

或者我是否需要像这样先设置持久模式:

nvidia-smi --persistence-mode=1

我是否也必须设置 PowerMizer-Mode?

我安装的 NVIDIA 驱动程序是否正确?因为在一个论坛上我也看到用户以这种方式安装 NVIDIA 驱动程序:

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
sudo apt install ubuntu-drivers-common
sudo apt install nvidia-driver-460 
sudo reboot

非常感谢所有的帮助。

答案1

经过一番努力后,我找到了一种方法来实现这一点并创建了一个 repo。

您可以在下面找到完整的工作脚本,也可以在 GitHub 上

#!/bin/sh

# README
# Before proceeding make sure that you set your coolbits to 31
# Open a terminal and do
# $ sudo nvidia-xconfig -a --cool-bits=31 --allow-empty-initial-configuration

# To be able to set the power limit you need to enable sudo commands without password
# Do 
# $ sudo visudo
# And then at the end of the file add the following while changing username to your user
# Note the tabs after username as otherwise it won't work
# username        ALL = (ALL) NOPASSWD: /usr/bin/nvidia-persistenced
# username        ALL = (ALL) NOPASSWD: /usr/bin/nvidia-smi
# Reboot the system now and continue setting the OC limits 

# =========================== Define OC limts ===========================================
# Fans speed is in %
POWER_LIMIT=150
FANS_SPEED=65
GPU_OFFSET=200
# Memory offset has to be the actual desired amount.
MEMORY_OFFSET=1300

# ========================================================================================
# It is advisable not to change anything below this line if you don't know what you are doing

SET='/usr/bin/nvidia-settings'

#Set Power Limit
sudo nvidia-smi -pl $POWER_LIMIT

# Set power persistence mode to ON so your power limit setting can persist even no UI app is running
${SET} -a [gpu:0]/GpuPowerMizerMode=1

# Set fan target level
${SET} -a [gpu:0]/GPUFanControlState=1

${SET} -a [fan:0]/GPUTargetFanSpeed=$FANS_SPEED
${SET} -a [fan:1]/GPUTargetFanSpeed=$FANS_SPEED

# Set clocks speeds
${SET} -a [gpu:0]/GPUGraphicsClockOffsetAllPerformanceLevels=$GPU_OFFSET

ACTUAL_MEMORY_OFFSET=$(( MEMORY_OFFSET*2 ))
${SET} -a [gpu:0]/GPUMemoryTransferRateOffsetAllPerformanceLevels=$ACTUAL_MEMORY_OFFSET

#Send notification
notify-send "OC Done: Fans = $FANS_SPEED% | GPU=$GPU_OFFSET | Memory=$MEMORY_OFFSET" -t 4000 -i messagebox_info

对你的问题的简短回答是,显然有新的属性可以使用。使用GPUGraphicsClockOffsetAllPerformanceLevelsGPUMemoryTransferRateOffsetAllPerformanceLevels来使其工作。

理论上,[3]inGPUGraphicsClockOffset[3]是性能水平,如果您将GPUGraphicsClockOffset[n]每个 n 作为性能水平,那么您应该也能够使其工作,但我还没有尝试过。

相关内容