NVIDIA Xavier 消費電力測定

NVIDIA製の自律動作マシン向け組み込みAIプラットフォームである「Jetson AGX Xavier」(以降、単に Xavier)。
今までのJetsonシリーズ (TK1、TX1、TX2) と比べて遥かに高いスペックを持っているため、ISPでも多くの業務で活躍しています。

このXavierは組み込みAIとして低消費電力も掲げているのですが、実際にはどのくらいの消費電力なのでしょうか?
今回は社内にあるツールを使って、実際の消費電力を計測してみました。

実行モードについて

Jetsonシリーズは「nvpmodel」というコマンドを用いて動作モードを変更することができます。
Xavierの場合、mode 0から mode 6までの計7つのモードを利用可能です。

今回は、そのうち以下の4つのモード (1、2、3、0) での計測を行いました。

mode 名称 内容
mode 1 MODE 10W 省電力モード。2コアのみ使用し、最も消費電力が少ない。
mode 2 MODE 15W 初回起動時のモード。4コアを使用。
mode 3 MODE 30W ALL 消費電力 30W のモード (※) のうち、8コア全てを使用。
mode 0 MAX N 最大動作のモード。8コア全てを使用。

(※) mode 3 ~ mode 6 はすべて消費電力 30W で動作する。使用するコア数はそれぞれ 8・6・4・2。

[参照]
  JetsonHacks NVPModel – NVIDIA Jetson AGX Xavier Developer Kit
各モードの詳しい内容は上記ページ参照のこと。

計測手法

system_all

計測機器による違いがないことを確認するため、AC側・DC側の両側で計測することにしました。

AC側 : ワットチェッカー

( 当社所員の私物をお借りしました。)
ACアダプタとコンセントの間に挟むだけで消費電力を測定できます。(15Aまで)

DC側 : オシロスコープ

system_dc

当社ハードエンジニア協力のもとDC側電源ケーブルを拡張。電源ケーブルの間に抵抗を挟んでオシロスコープで電圧測定しました。
I (電流) = V (電圧) ÷ R (抵抗) により電流が計算でき、さらに消費電力 W = I × V が算出できます。

XavierのACアダプタの電圧は19.48V、検証のために取り付けた抵抗は 0.025Ω±5%です。(実際は0.1Ω抵抗4本を並列化。)
よって、例えば10mV (= 0.01V) が検出された場合、
  I = V ÷ R = 0.01 ÷ 0.025 = 0.4 (A)
  W = I × V = 0.4 × 19.48 ≒ 7.8 (W)
となります。

測定機器 (Xavier)

対象のXavierは最新状態にしています。

JetPack

2019/06時点で最新の 4.2 を導入。すべてのミドルウェア (CUDA、cuDNN、OpenCV for Tegra、…) をインストールしました。

検出処理

今回は、以下 github に登録されている Keras + TensorFlow による YOLO v3 を行う処理を利用しました。
  https://github.com/qqwweee/keras-yolo3

動画判別モードで毎フレームの検出処理が行われている時点の消費電力を測定します。

なお、各モードにおける動画検出処理の fps は以下の通りでした。( 動画サイズ 1280px × 720px)

mode 1 mode 2 mode 3 mode 0
1 ~ 2fps 2 ~ 3fps 3 ~ 4fps 4 ~ 5fps

測定タイミング

Xavierの実行モード (mode1 ~ 3、mode 0) ごとに次の4箇所で消費電力を測定しました。

A) 起動時
B) 起動後、安定したとき。(デスクトップ画面が表示され、jetson_clockコマンドを実行した後)
C) 検出処理起動時。(重みファイルの読み込み、メモリへの展開時)
D) 検出処理実行中。

測定結果

測定した結果、AC側とDC側で大きな違いは現れませんでした。
よって、以下AC側の結果を示します。

  mode 1 mode 2 mode 3 mode 0
A) 12W 12W 12W 12W
B) 8W 8W 8W 8W
C) 10W 10W 15W 15W
D) 14W 18W 21W 36W

A) の消費電力はおおよその平均値です。
A) および B) ではmodeごとの違いは出ませんでした。

検出処理では、C) の時点で急激に消費電力が上がり、そのあと D) で最大消費電力を続ける状態となりました。
mode 1およびmode 2では、消費電力が公称値よりも高くなりましたが、mode 3では公称値の30Wまで到達しませんでした。

オシロスコープによる計測

オシロスコープのほうの結果はスナップショットを撮影しました。
それぞれのタイミングのスナップショットを示します。

なお、特に断りがない場合、

  • スナップショットは mode 0 のものを使用
  • 縦軸の1メモリは 10mV = 0.4A ≒ 7.8W
  • 横軸の1メモリは 200msec

です。

凡例
sample

A) 電源投入時

投入直後に一瞬だけピークが立ちますが、そのあとは安定していました。

0A

B) 起動後

一定の消費電力で安定していました。

0B

C) 検出処理起動時

ニューラルネットワークの重みを読み込み時に消費電力がグッと上がりました。ネットワークをメモリに展開するためでしょうか。

mode 1 :

一番ピーク が 0.9A ≒ 16W。

1C_checked
mode 0 :

一番ピーク が 2.3A ≒ 44W!!

0C_checked

D) 検出処理実行中

検出処理は画像1枚ずつ順次処理しているためか、一定周期でピークが現れる形となっています。
以下、各モードの1周期が見える状態にスケーリングしたスナップショットです。

mode 1 (スケール = 100msec) :
1D
mode 2 ( スケール = 50msec):
2D
mode 3 (スケール = 50msec) :
3D
mode 0 (スケール = 20msec):
0D

まとめ

Xavierの消費電力をAC・DC両方から計測してみました。
公称値と比較して大きくずれていることはありませんでしたが、ニューラルネットワークの読み込み時など、急激に消費電力が上がるケースを見て取れたので、ロボットへ組み込んで動かすとき等、安定した電源でない場合は気を付ける必要がありそうです。

おまけ ~ 学習中の消費電力 ~

今回は検出処理の消費電力測定でした。
オシロスコープで見ると、画像1枚1枚の判別処理ごとにピークが立つような形状をしていましたが、学習の時はどうなるのでしょうか?

mode 0でMNIST の学習を試してみました。
なお、GPUをフルで使えるよう、学習のバッチサイズを大きく (約500枚) しています。
また、学習に使用したフレームワークはTensorFlowです。

mode 0 D) のグラフと同じスケールでオシロスコープのスナップショットを取ってみました。
検出処理の時と比べて、非常に細かい周期で処理が動いていることがわかりました。

検出時の処理と比べて一周期内で高い電圧を維持している割合が多いので、非常に効率よく動いていると言えそうです。

0E