Linuxで最近オープンソースのAMDGPU対応GPUの電力量(言いますか?)をどのように減らしますか?
ここでの目標は、消費電力を減らし、パフォーマンス/ワットの最適点、つまりカードに付属しているよりも低い消費電力に近づくことです。
理想的には、これはDebianを使用してパッケージ化されたソフトウェアです。ありがとうございます!
答え1
紹介する
消費電力を減らすには、GPUの電圧を下げるか、GPUの電源状態を制限するか、「デボルト」する必要があります。
2015年以降、最新(4.17以上)カーネルとamdgpu
Radeon GPUを使用した最新のドライバを使用すると、カードをオーバークロックすることができます(したがって電圧を下げ、消費電力(ワット)を減らすことができます)。
そのトピックについて見つけたいくつかのリソースへのリンクを提供しますが、この回答には関連情報の一部が含まれています。最初の部分では、次のように仮定します。前提条件そこに入り、電圧を下げて継続しようとします。残りの答えは、必要な人にAMD GPUチューニングリソースのコレクションとして提供されます。
早期警告として、GPU電圧を下げたりオーバークロックすると安定性の問題が発生することがあります。電圧とクロックの設定を変更したら、GPUの安定性をテストして、GPUがまだ「安全な」方法で動作していることを確認する必要があります(例:GpuTest
FurMarkを使用することは、パフォーマンスと安定性をテストするための良い方法です。しかもPhoronixテストスイートLinuxでコンピュータをベンチマークします。)消費電力を減らすための努力で最も望ましくないことは、クラッシュ、欠陥、アーティファクト、またはその他のパフォーマンスの低下を引き起こすことです。
高速で簡単な低電圧
Wikiの指示に従ってくださいLinuxReviews.org次の手順を実行して、パフォーマンスレベル(したがって消費電力)を変更できます。
変更する前に最初にすべきことは、手動制御を有効にすること
/sys/class/drm/card0/device/power_dpm_force_performance_level
です。manual
時計の値を書くとwrite error: Invalid argument errors
分からない値が出てきます。echo "manual" > /sys/class/drm/card0/device/power_dpm_force_performance_level
power_dpm_force_performance_level
以下を除く利用可能な設定manual
:
auto
ドライバの自動選択low
可能な最低クロックを強制し、そこでGPUをロックします。high
可能な限り高いクロックを強制し、そこからGPUをロックします。
profile_standard
profile_min_sclk
profile_min_mclk
profile_peak
「プロファイリングモードを選択すると、クロッキングとパワーゲーティングが無効になり、クロッキングはさまざまなプロファイリング状況設定を対象としています。このモードは、クロック変動が結果を妨げないようにする特定のワークロードをプロファイリングし、sclkをすべてのクロック( mclk、mclkなど)にできるだけ低いレベルにprofile_standard
強制する固定クロックレベルに設定することをお勧めしprofile_min_sclk
ますprofile_min_mclk
。profile_peak
単に値をまたはlow
レベルprofile_min_sclk
profile_min_mclk
に設定して、コアクロックとメモリクロックをそれぞれ下げることで消費電力を削減できます。
この文書の残りの部分よりも詳細な制御が必要な場合は、この文書がお客様の要件に適しています。
前提条件
最新のサポートドライバでバージョン4.17以降のカーネルがインストールされていることを確認する必要がありますAMDGPU
。必要に応じて、DebianのインストールをDebian 10(Buster)に更新するか、buster-backports
リポジトリを追加する必要があります。
/etc/apt/sources.list
バックポートを追加するには、次の行を含むようにファイルを編集する必要があります。
deb http://deb.debian.org/debian buster-backports
その後、実行してapt update
バックポートストアの追加を完了します。
次の手順を実行して新しいカーネルをインストールします。
apt-cache search linux-image #Find the kernel and kernel headers available to you.
apt install linux-image-<flavor> #Use `apt-get -t buster-backports <package>` if necessary
再起動してxserver-xorg-video-amdgpu libgl1-mesa-dri libglx-mesa0 mesa-vulkan-drivers xserver-xorg-video-all
パッケージをインストールします。
南島または島(GCN 1 / GCN 2 AMD GPU)のサポートを有効にする必要がある場合、このArchWikiページをフォローしてください。
最後に、カーネルパラメータを追加してsysfsからクロックと電圧調整へのアクセスをロック解除する必要がありますamdgpu.ppfeaturemask=0xffffffff
(注:この値はテストと特定の変更によって異なります。これはカードを完全にロック解除するためだけです)です)。
次の行を編集して、次の操作を行い/etc/default/grub
ます。
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash amdgpu.ppfeaturemask=0xffffffff"
それからsudo update-grub
。
ここを確認して再起動後、現在の機能マスクを確認してください。
printf "0x%08x\n" $(cat /sys/module/amdgpu/parameters/ppfeaturemask)
オーバークロック/バンピング
警告:エラーはすぐに致命的なハードウェア損傷を引き起こす可能性があるため、入力した値を慎重に確認してください。
すべてを設定したら、手動またはツールサポートの2つの方法で時計と電圧を調整できます。
手動
RedditユーザーPannubaがAMD GPUをオーバークロックする方法を説明します。この投稿。
以下を編集する必要があります。/sys/class/drm/card0/device/pp_od_clk_voltage
編集したい場所を見つけます。readlink -f /sys/class/drm/card0/device
コアのP状態#7とVRAMのP状態#2を編集しようとしています。これは、GPUがロード状態で実行されたときの値であるためです。
sudo sh -c "echo 's 7 1450 1150' > /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/pp_od_clk_voltage" sudo sh -c "echo 'm 2 2065 950' > /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/pp_od_clk_voltage"
ファイルパスは次のとおりです。彼らのGPU。前のコマンドを使用してパスを検索します。あなたの。所望のクロック速度及び電圧値も様々である。電圧を下げるには、コアとVRAMの各P状態電圧をデフォルト値より低く変更します。クロック速度を同じに保つことができますが、場合によってはこの値を下げる必要があります。 GPUの安定性テストとベンチマークが始まるところです。
のように建築ウィキペディア、次のコマンドを実行して、特定のP状態を適用、確認、強制、リセットできます。
適用するには、以下を実行してください。
echo "c" > /sys/class/drm/card0/device/pp_od_clk_voltage
動作していることを確認するには、3D負荷でクロックと電圧を読みます。
watch -n 0.5 cat /sys/kernel/debug/dri/0/amdgpu_pm_info
次のコマンドを使用してデフォルト値にリセットできます。
echo "r" > /sys/class/drm/card0/device/pp_od_clk_voltage
たとえば、点滅アーチファクトやブレークなどの電力を大幅に節約するP状態の問題を解決するために、ドライバが特定のP状態に切り替えないように無効にすることもできます。 GPU自体をより低いクロックで実行できるようにしながら、Polaris RX 5xxカードで最高のVRAM P状態を強制するには、次の手順を実行します。
echo "manual" > /sys/class/drm/card0/device/power_dpm_force_performance_level echo "2" > /sys/class/drm/card0/device/pp_dpm_mclk
最高のGPU P状態3つだけが許可されます。
echo "5 6 7" > /sys/class/drm/card0/device/pp_dpm_sclk
GPUが許可する最大消費電力を50ワットに設定するには、次の手順を実行します。
echo 50000000 > /sys/class/drm/card0/device/hwmon/hwmon0/power1_cap
Linuxカーネル4.20以前は、この値を減らすことしかできず、増やすことはできませんでした。
起動時にこれらの変更を適用するには、スクリプトとsystemd
サービスを作成する必要があります。スクリプトはテストしたジョブ値とGPUのファイルパスを使用する必要があります。
/usr/bin/
システム全体のスクリプトのために、安全な場所にこのスクリプトを保存してください。
#!/bin/sh
sudo sh -c "echo 's 7 <Your desired values here>' > /sys/devices/Your/Path/Here/pp_od_clk_voltage"
sudo sh -c "echo 'm 2 <Your desired values here' > /sys/devices/Your/Path/Here/pp_od_clk_voltage"
sudo sh -c "echo 'c' > /sys/devices/Your/Path/Here/pp_od_clk_voltage"
/etc/systemd/system/
undervolt.service
次のようなファイルを作成します。
[Unit]
Description=Undervolting GPU
[Service]
Type=oneshot
ExecStart=/Path/To/Script.sh
[Install]
WantedBy=multi-user.target
sudo systemctl enable undervolt.service
有効にするには実行してください。再起動後に実行して確認しますcat /sys/devices/Your/Path/Here/pp_od_clk_voltage
。
Pannubaユーザーはまた、コンテンツをデフォルト値に復元するスクリプトを作成することを提案しました。これは必ずしもSystemDサービスである必要はありません。
ツールサポート
AMD GPUをオーバークロックするために使用できるいくつかのツールがあります。
AMDGPUウォッチ、コマンドラインツールです。
コアコントロール、システム全体のチューニングのためのGUIツールです。
ウォーターマンGTK、LinuxでWattman機能を再現するGTK GUIです。
TuxClocker、LinuxのNvidiaおよびAMD GPU用のQt5 GUIオーバークロックツールです。
それぞれには特定の前提条件と設定があり、個別にリリースできます。システムの設定と調整方法については、該当するガイドを参照してください。
結論として
ご覧のとおり、AMD GPU Linuxチューニングは最高の経験になっています。 Windows ユーザーが利用できる多くの機能が Linux ユーザーも利用可能になり、オープンソースドライバも使用できるようになりました。さまざまな調整とオプションを実行できます。具体的な内容は皆様にお任せいたします。消費電力を減らすには、P状態で電圧を下げるか、カードの電力を制限することもできます。何でも変更したら、カードとコンピュータの信頼性をテストしてください。 Radeonオープンソースドライバ機能の詳細をご覧ください。ここ。
この回答について質問や質問がある場合は、コメントを残してください。コマンドを試す前に、私が提供する各リンクを注意深く読んでください。誤解を解決し、投稿を改善するためにフィードバックを送信していただきありがとうございます。必要に応じて回答を更新できます。
頑張ってください!
リソース
答え2
私が報酬を与えるケモテップ私の観察に基づいて答えてください。
短い見出し:英語は私の母国語ではありません。意味、文法エラー、誤って選択した単語を無視してください。
最初、カードの最大消費レベルを制限するには、アスタリスクが数字(通常0〜9)のパスの下のファイルをpower1_cap
変更する必要があります。同じディレクトリ内のカードの電圧を調整し、/sys/class/drm/card0/device/hwmon/hwmon*/
カードの最大許容消費制限などを表示できます。
詳細は以下のリンクで確認できます。 https://docs.kernel.org/gpu/amdgpu/Thermal.html
第二、値を書き込むには、次の種類のコマンドを使用するのが最善です。
echo "10000000" | sudo tee /sys/class/drm/card0/device/hwmon/hwmon*/power1_cap
私がそう思う理由を説明します。次のスクリプトを実行するとき:
sudo sh -c "{your_commands and/some/random/path*/}"
アスタリスクは、名前の欠落部分に置き換えられず、ディレクトリ名として扱われます。問題は、最初のhwmon
フォルダ内の次の入れ子になったフォルダの名前にランダムな数字があることです(たとえばhwmon0
、hwmon3
など)。したがって、アスタリスクはテキストではなくコマンドとして機能することが重要です。
第三、kemotepで説明されている変更を保存する方法にバグがある可能性があります。
例に示されているオプションを使用して systemd デバイスを実行すると、スクリプトは実行されません。システムのビデオアダプタが初期化される前にスクリプトがトリガされるようです。これにより、指定されたパスがまったく存在しません。あるいは、スクリプトの実行を拒否する別の抵抗できない力があります。私は専門家ではありません。
私のユニットファイルの例を示し、パラメータを説明します。
[Unit]
Description=Limit GPU Wattage
[Service]
Type=idle
ExecStart=/usr/bin/my_script.sh
ExecStartPost=/usr/bin/my_another_script.sh
Restart=on-failure
RestartSec=5
TimeoutSec=300
[Install]
WantedBy=multi-user.target
- Typeパラメータの「idle」値は、DigitalOcean Webサイトで説明されているとおりです。https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files
[サービス]セクション
Type= ディレクティブは次のいずれかです。
... 怠惰:これは、すべてのジョブがディスパッチされるまでサービスが実行されないことを示します。
私はそれを次のように理解しています。「システムのすべての要素がロードされると、デバイスが起動します。」。私が間違っている可能性がありますが、動作します。
- ExecStartPost - ユニット実行エラーの原因を調査して追加しました。スクリプトを2つのファイルに分割し、ここに2番目のファイルへのパスを表示しました。すべてのコマンドをスクリプトに入れることができますが、すべてを変更せずにそのままにすることにしました。
- 再起動 - 再起動スクリプトを担当します。 「idle」パラメータの意味を誤って理解した場合に備えて、このオプションはエラー時にデバイスを再起動するようになっています。他の再始動条件を指定できます。詳細については上記のリンクをご覧ください。
- RestartSec - 再起動を実行する前に待機する時間を指定します。
- TimeoutSec - 私が正しく理解している場合は、デバイスのライフサイクルがここに表示されます。私は300秒を指定しました。この時間内に成功しなかった場合、デバイスの実行は中断されます。
ついに、私がしたことを説明します。
amdgpu.ppfeaturemask(詳細はインターネット上にあります)を設定した後、/usr/bin/
ディレクトリに2つのファイルを作成しました。
my_script.sh
#!/bin/sh
sudo sh -c "echo 'low' > /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/power_dpm_force_performance_level"
my_another_script.sh
#!/bin/bash
echo "6000000" | sudo tee /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/hwmon/hwmon*/power1_cap
/etc/systemd/system/
ディレクトリ内にmy-gpu-setup.service
ファイルを作成しました(上記の内容)。
その後、次のコマンドを使用してサービスを開始しました(一度だけアクティブにするだけです)。
sudo systemctl enable my-gpu-setup.service
そしてコンピュータを再起動してください。
それはすべてです。
デバイスの実行に関する情報を表示するには、次のコマンドを入力します。
sudo systemctl status my-gpu-setup.sevice
変更をロールバックしてサービスを無効にするには:
コマンドを入力する
sudo systemctl disable my-gpu-setup.service
ディレクトリからファイルを削除します
/etc/systemd/system/
(オプション)。コンピュータを再起動します。
システムが起動するたびに新しい設定を実行しないと、とにかく再起動時に設定がリセットされるため、変更をロールバックするスクリプトを作成することは重要ではありません。