我在华硕 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
对你的问题的简短回答是,显然有新的属性可以使用。使用GPUGraphicsClockOffsetAllPerformanceLevels
和GPUMemoryTransferRateOffsetAllPerformanceLevels
来使其工作。
理论上,[3]
inGPUGraphicsClockOffset[3]
是性能水平,如果您将GPUGraphicsClockOffset[n]
每个 n 作为性能水平,那么您应该也能够使其工作,但我还没有尝试过。