Pyjoules는 파이썬 코드를 실행하여 호스트 머신의 에너지 풋 프린트를 측정하는 소프트웨어 툴킷입니다. 호스트 머신의 특정 장치에서 소비하는 에너지를 다음과 같이 모니터링합니다.
Pyjoules는 CPU, RAM 및 통합 GPU의 전력 소비를 추정하는 인텔 "RAPL ( Running Average Power Limit ) (RAPL) 기술을 사용합니다. 이 기술은 Sandy Bridge Generation (2010) 이후 인텔 CPU에서 사용할 수 있습니다.
Pyjoules는 NVIDIA " NVIDIA Management Library "기술을 사용하여 NVIDIA 장치의 에너지 소비를 측정합니다. 에너지 측정 API는 Volta Architecture (2018)와 NVIDIA GPU에서만 사용할 수 있습니다.
현재 GNU/Linux 지원 만 사용할 수 있습니다. 우리는 MAC 지원을 진행하고 있습니다
RAPL 에너지 카운터는 몇 분 또는 몇 시간 후에 오버플로가되어 잠재적으로 잘못된 음성 에너지 판독 값을 유발합니다.
Pyjoules는이를 고려하여 카운터의 최대 가능한 값인 max_energy_range_uj 를 부정적인 에너지 측정에 추가합니다. 그러나 단일 에너지 측정 중에 카운터가 두 번 오버 플로우하면보고 된 에너지는 max_energy_range_uj 예상 값보다 작습니다.
Pyjoule은 장치 에너지 소비를 측정하기 위해 하드웨어 측정 도구 (Intel Rapl, Nvidia GPU 도구, ...)를 사용합니다. 이 도구에는 장치에 따라 자료 주파수가 있습니다. 따라서 Pyjoule을 사용하여 장치 에너지 측정 빈도보다 짧은 기간 동안 에너지 소비를 측정 할 수 없습니다. 측정 기간이 짧은 경우 Pyjoule은 NULL 값을 반환합니다.
PIP : pip install pyJoules 사용하여 pyjoules를 설치할 수 있습니다
Pyjoule을 사용하여 NVIDIA GPU 에너지 소비를 측정하려면이 명령을 사용하여 NVIDIA 드라이버 지원으로 설치해야합니다. pip install pyJoules[nvidia] .
이 readme는 pyjoules의 기본 사용법을 설명합니다. 자세한 내용은 자세한 내용을 보려면 여기에서 문서를 읽으십시오
Pyjoules 의 몇 가지 기본 사용법은 다음과 같습니다. 보고 된 에너지 소비는 실행중인 코드의 에너지 소비만이 아닙니다. 여기에는이 기간 동안 기계에서 실행되는 모든 프로세스의 글로벌 에너지 소비가 포함되므로 운영 체제 및 기타 응용 프로그램을 포함합니다. 그렇기 때문에 기계 호스팅 실험의 에너지 소비를 변경할 수있는 추가 프로그램을 제거하고 측정하에 코드 만 유지하는 것이 좋습니다 ( 예 : 그래픽 인터페이스, 배경 실행 작업과 같은 추가 응용 프로그램 없음). 이것은 측정 된 코드의 실제 에너지 소비에 가장 가까운 측정을 제공합니다.
foo() 함수 실행 중에 기계가 소비하는 에너지를 측정하려면 다음 코드를 실행합니다.
from pyJoules . energy_meter import measure_energy
@ measure_energy
def foo ():
# Instructions to be evaluated.
foo () 이것은 기능 foo 실행하는 동안 모든 모니터링 가능한 장치의 기록 된 에너지 소비를 콘솔에 인쇄합니다.
Decorator 기본 사용법은이 형식으로 iformation을 인쇄합니다.
begin timestamp : XXX; tag : YYY; duration : ZZZ;device_name: AAAA
와 함께 :
begin timestamp : 모니터링 된 기능 시작 시간tag : 측정의 태그, 아무것도 지정되지 않으면 기능 이름이됩니다.duration : 기능 실행 기간device_name : UJ에서 device_name 의 전력 소비CPU 및 RAM 장치의 경우 Device_name은 아래 이미지에 설명 된 RAPL 도메인과 CPU 소켓 ID와 일치합니다. RAPL 도메인은 여기에 설명되어 있습니다
measureit 데코레이터의 매개 변수를 사용하여 모니터링 할 장치를 쉽게 구성 할 수 있습니다. 예를 들어, 다음 예제는 CPU 소켓 1 및 NVIDIA GPU 0 의 CPU 전력 소비를 모니터링합니다. 기본적으로 Pyjoules는 CPU 소켓의 모든 사용 가능한 장치를 모니터링합니다.
from pyJoules . energy_meter import measure_energy
from pyJoules . device . rapl_device import RaplPackageDomain
from pyJoules . device . nvidia_device import NvidiaGPUDomain
@ measure_energy ( domains = [ RaplPackageDomain ( 1 ), NvidiaGPUDomain ( 0 )])
def foo ():
# Instructions to be evaluated.
foo () 다음 도메인 목록을 추가하여 모니터링 할 수 있습니다.
pyJoules.device.rapl_device.RaplPackageDomain : CPU (매개 변수의 소켓 ID 지정)pyJoules.device.rapl_device.RaplDramDomain : RAM (매개 변수의 소켓 ID 지정)pyJoules.device.rapl_device.RaplUncoreDomain : 통합 GPU (매개 변수의 소켓 ID 지정)pyJoules.device.rapl_device.RaplCoreDomain : RAPL 코어 도메인 (매개 변수의 소켓 ID 지정)pyJoules.device.nvidia_device.NvidiaGPUDomain : nvidia gpu (매개 변수의 소켓 ID 지정)각 RAPL 도메인 모니터 각각의 CPU의 PAR을 이해하려면이 섹션을 참조하십시오.
표준 출력과 다른 출력으로 데이터를 처리하려면 pyJoules.handler 모듈의 EnergyHandler 인스턴스로 데코레이터를 구성 할 수 있습니다.
예를 들어, 기록 된 에너지 소비를 .csv 파일로 작성하려는 경우 :
from pyJoules . energy_meter import measure_energy
from pyJoules . handler . csv_handler import CSVHandler
csv_handler = CSVHandler ( 'result.csv' )
@ measure_energy ( handler = csv_handler )
def foo ():
# Instructions to be evaluated.
for _ in range ( 100 ):
foo ()
csv_handler . save_data () 이것은 100 줄의 CSV 파일을 생성합니다. FOONT foo 의 한 번의 실행 중에 기록 된 에너지 소비를 포함하는 각 라인. 다른 사전 정의 된 Handler 클래스는 MongoDB 및 Panda Dataframe으로 데이터를 내보내기 위해 존재합니다.
Python 코드가 가장 많은 에너지를 소비하는 " 핫스팟 "이 어디에 있는지 알고 싶다면 측정 프로세스 중에 " 중단 점 "을 추가 할 수 있고이 중단 점 사이에 소비되는 에너지의 양을 알 수 있도록 태그를 붙입니다.
이를 위해서는 에너지 소비를 측정하기 위해 컨텍스트 관리자를 사용해야합니다. 데코레이터로 구성 가능합니다. 예를 들어, 여기서는 EnergyContext 사용하여 CPU 1 및 NVIDIA GPU 0 의 전력 소비를 측정하고 CSV 파일로보고합니다.
from pyJoules . energy_meter import EnergyContext
from pyJoules . device . rapl_device import RaplPackageDomain
from pyJoules . device . nvidia_device import NvidiaGPUDomain
from pyJoules . handler . csv_handler import CSVHandler
csv_handler = CSVHandler ( 'result.csv' )
with EnergyContext ( handler = csv_handler , domains = [ RaplPackageDomain ( 1 ), NvidiaGPUDomain ( 0 )], start_tag = 'foo' ) as ctx :
foo ()
ctx . record ( tag = 'bar' )
bar ()
csv_handler . save_data ()이것은 소비 된 에너지를 기록합니다.
EnergyContext 의 시작과 ctx.record 메소드의 호출 사이ctx.record 메소드의 호출과 EnergyContext 의 끝 사이측정 된 각 부분은 CSV 파일로 작성됩니다. 부품 당 한 줄.
RAPL 도메인은이 이미지에 설명 된대로 CPU 소켓의 일부와 일치합니다.
Pyjoules는 PowerApi 이니셔티브의 일부인 Wrowals Research Group (University of Lille and Inria)이 개발 한 오픈 소스 프로젝트입니다.
문서는 여기에서 제공됩니다.
최신 뉴스를 따르고 메일 링리스트를 구독하여 질문을 할 수 있습니다.
코드를 기여하려면 코드를 기부하고 리포지토리를 포크하고 풀 요청을 보낼 수 있습니다.
코드를 제출할 때 코드를 최대한 읽을 수 있도록 기존 코딩 규칙 및 스타일을 따르기 위해 모든 노력을 기울이십시오.