AMD GPU 전력 감소

AMD GPU 전력 감소

Linux에서 최근 오픈 소스 AMDGPU 지원 GPU의 전력량(말인가요?)을 어떻게 줄이나요?

여기서 목표는 전력 소비를 줄이고 성능/와트 최적 지점, 즉 카드와 함께 제공되는 것보다 낮은 전력 소비에 더 가까워지는 것입니다.

이상적으로 이것은 데비안을 사용하여 패키지된 소프트웨어입니다. 감사해요!

답변1

소개하다


전력 소비를 줄이려면 GPU의 전압을 낮추거나 GPU의 전원 상태를 제한하거나 "디볼트"해야 합니다.

2015년 이후 최신(4.17 이상) 커널과 amdgpuRadeon GPU를 사용하는 최신 드라이버를 사용하면 카드를 오버클럭할 수 있습니다(따라서 전압을 낮추고 전력 소비(와트)를 줄일 수 있습니다).

해당 주제에 대해 찾은 몇 가지 리소스에 대한 링크를 제공하지만 이 답변에는 관련 정보의 일부가 포함되어 있습니다. 첫 번째 부분에서는 다음과 같이 가정합니다.전제 조건거기에 들어가서 전압을 낮추고 계속 진행하려고 노력합니다. 나머지 답변은 필요한 사람들에게 AMD GPU 튜닝 리소스 모음으로 제공될 것입니다.

조기 경고로, GPU 전압을 낮추거나 오버클러킹을 하면 안정성 문제가 발생할 수 있습니다. 전압 및 클럭 설정을 변경한 후에는 GPU의 안정성을 테스트하여 GPU가 여전히 "안전한" 방식으로 작동하는지 확인해야 합니다(예:GpuTestFurMark를 사용하는 것은 성능과 안정성을 테스트하는 좋은 방법입니다. 게다가Phoronix 테스트 스위트Linux에서 컴퓨터를 벤치마킹하세요.) 전력 소비를 줄이려는 노력에서 가장 원하지 않는 일은 충돌, 결함, 아티팩트 또는 기타 성능 저하를 유발하는 것입니다.

빠르고 쉬운 저전압


위키 지침을 따르세요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_sclkpcie)가 가장 높은 수준으로 설정되어 있습니다. profile_min_mclkprofile_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)

오버클러킹/범핑


경고: 오류로 인해 즉각적이고 치명적인 하드웨어 손상이 발생할 수 있으므로 입력한 값을 주의 깊게 확인하십시오!

모든 것이 설정되면 수동 또는 도구 지원의 두 가지 방법으로 시계와 전압을 조정할 수 있습니다.

수동

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= 지시문은 다음 중 하나일 수 있습니다.

... 게으른:이는 모든 작업이 디스패치될 때까지 서비스가 실행되지 않음을 나타냅니다.

나는 그것을 다음과 같이 이해한다."시스템의 모든 요소가 로드되면 장치가 실행됩니다.". 내가 틀렸을 수도 있지만 작동합니다.

  • ExecStartPost - 유닛 실행 오류 원인을 조사하다가 추가했습니다. 스크립트를 두 개의 파일로 나누고 여기에 두 번째 파일의 경로를 표시했습니다. 모든 명령을 스크립트에 넣을 수 있지만 모든 것을 변경하지 않고 그대로 두기로 결정했습니다.
  • 다시 시작 - 다시 시작 스크립트를 담당합니다. "idle" 매개변수의 의미를 잘못 이해한 경우를 대비해 이 옵션은 오류 시 장치를 다시 시작하도록 되어 있습니다. 다른 재시작 조건을 지정할 수 있습니다. 자세한 내용은 위 링크에서 알아보세요.
  • RestartSec - 재시작을 수행하기 전에 대기할 시간을 지정합니다.
  • TimeoutSec - 제가 올바르게 이해했다면 장치의 수명 주기가 여기에 표시됩니다. 저는 300초를 지정했습니다. 이 시간 내에 성공하지 못하면 장치 실행이 중단됩니다.

마침내, 내가 한 일을 설명하겠습니다.

amdgpu.ppfeaturemask(자세한 내용은 인터넷에서 찾을 수 있음)를 설정한 후 /usr/bin/디렉터리에 두 개의 파일을 만들었습니다.

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

변경 사항을 롤백하고 서비스를 비활성화하려면 다음을 수행하십시오.

  1. 명령을 입력하다

    sudo systemctl disable my-gpu-setup.service

  2. 디렉터리에서 파일을 삭제합니다 /etc/systemd/system/(선택 사항).

  3. 컴퓨터를 다시 시작합니다.

시스템이 시작될 때마다 새 설정을 수행하지 않으면 어쨌든 재부팅 시 설정이 재설정되기 때문에 변경 사항을 롤백하는 스크립트를 만드는 것이 중요하지 않습니다.

관련 정보