Pyjoulesは、Pythonコードの実行に沿ってホストマシンのエネルギーフットプリントを測定するソフトウェアツールキットです。次のようなホストマシンの特定のデバイスによって消費されるエネルギーを監視します。
Pyjoulesは、CPU、RAM、および統合GPUの消費電力を推定するIntelの「実行平均電力制限」(RAPL)テクノロジーを使用しています。この技術は、Sandy Bridge Generation(2010)以来、Intel CPUで入手できます。
Pyjoulesは、Nvidia " Nvidia Management Library "テクノロジーを使用して、Nvidiaデバイスのエネルギー消費を測定しています。エネルギー測定APIは、Volta Architecture(2018)を備えたNvidia GPUでのみ利用可能です
現時点では、GNU/Linuxサポートのみが利用可能です。 Macサポートに取り組んでいます
RAPLエネルギーは、数分または数時間後にオーバーフローに対抗し、偽陰性エネルギーの測定値を引き起こす可能性があります。
Pyjoulesはこれを考慮し、カウンターの最大値の最大値であるmax_energy_range_ujを負のエネルギー測定に追加します。ただし、1回のエネルギー測定中にカウンターが2回オーバーフローする場合、報告されたエネルギーはmax_energy_range_uj期待値よりも少なくなります。
Pyjouleは、ハードウェア測定ツール(Intel RAPL、NVIDIA GPUツールなど)を使用して、デバイスのエネルギー消費を測定します。これらのツールには、デバイスに依存するメサルメント周波数があります。したがって、Pyjouleを使用して、デバイスエネルギー測定周波数よりも短い期間中にエネルギー消費を測定することはできません。 Pyjouleは、測定期間が短くなる場合、null値を返します。
PyjoulesをPIP: pip install 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の実行中にすべての監視可能なデバイスの記録されたエネルギー消費が印刷されます。
デコレーターの基本的な使用法は、この形式で正体化を印刷します。
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ファイルが生成されます。関数fooの1回の実行中に記録されたエネルギー消費を含む各ライン。他の事前定義されたHandlerクラスは、データをMongodbおよびPandaデータフレームにエクスポートするために存在します。
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ファイルに記述されます。パーツごとに1行。
この画像で説明されているように、RAPLドメインはCPUソケットの一部を一致させます。
Pyjoulesは、Powerapiイニシアチブの一部であるSpirals Research Group(Lille University of Lille and Inria)によって開発されたオープンソースプロジェクトです。
ドキュメントはこちらから入手できます。
最新のニュースに従って、メーリングリストを購読することで質問をすることができます。
コードを提供したい場合は、リポジトリを分岐してプルリクエストを送信することで、GitHubを介してそうすることができます。
コードを送信するときは、コードをできるだけ読みやすくするために、既存のコーディング規則とスタイルに従うためにあらゆる努力をしてください。