Q100225: Nuke スクリプトをプロファイリングしてパフォーマンスの問題を特定する

まとめ

この記事では、スクリプトの速度低下の原因を特定する際に、 Nukeノードのパフォーマンスをテストするために使用できる 2 つの代替方法について説明します。


詳細情報

Nukeスクリプトのどの部分が再生/レンダリング時間を遅くしているのかを見つけるのは難しい場合があります。

このプロセスを容易にするために、 Nukeパフォーマンス タイマープロファイルノードの使用という、スクリプト内のノードのパフォーマンスをプロファイリングする 2 つの代替方法を提供しています。
どちらの方法も、特に遅いノードを特定し、ワークフローを最適化するのに役立つ分析情報を提供します。プロファイリングを行うと、ノードは緑から赤まで色分けされ、赤が遅いノードです。
以下の例から、Defocus は遅いノードである一方、Merge はまったく作業を行っていないことがわかります。

パフォーマンスタイマーの使用

パフォーマンス タイマー モードでは、各ノードの分析とノード上のさまざまなメトリックを表示できます。
パフォーマンスタイマーを有効にしてNukeを起動する

パフォーマンスタイマーを有効にしてNukeを実行するには、 Nuke起動時に-Pフラグを使用します。各オペレーティングシステムごとの設定手順は以下をご覧ください。
ウィンドウズ:
コマンド プロンプト ウィンドウを開き、次のコマンドを実行します。

"C:\Program Files\Nuke16.0v4\Nuke16.0.exe" -P

macOS:
ターミナル ウィンドウを開き、次のコマンドを実行します。

/Applications/ Nuke 16.0v4/ Nuke 16.0v4.app/Contents/MacOS/ Nuke 16.0 -P
リナックス:
ターミナルを開いて次のコマンドを実行します。

/usr/local/ Nuke 16.0v4/ Nuke 16.0 -P

注:これらの手順は、 Nukeデフォルトの場所にインストールされていることを前提としています。そうでない場合は、カスタムインストール場所から実行できるようにコマンドを変更する必要があります。
パフォーマンス タイマーを有効にしてNukeを起動すると、以下に示すように、 Nuke UI のパフォーマンス メニューでタイマーをリセット、開始、停止できます。
Python を使用したパフォーマンス タイマーの有効化
どのNukeセッションでも、スクリプト エディターで次のコマンドを実行して、パフォーマンス タイマーを開始または停止することもできます。
nuke .startPerformanceTimers()
nuke .stopPerformanceTimers()
これらのコマンドの詳細については、以下のドキュメントをご覧ください。
パフォーマンスタイマーの使用中に報告される情報
パフォーマンス タイマーが有効になっている場合、各ノードは次の情報を報告します。
CPU - すべての CPU スレッドを合計した、CPU が処理コードの実行に費やした時間 (マイクロ秒単位)。
例えば、マルチスレッド処理の場合、この値は通常、実際の経過時間よりもはるかに長くなります。スレッドあたりの平均CPU時間(CPU使用時間を使用スレッド数で割った値)が実際の経過時間よりもはるかに短い場合、CPUスレッドがコードを実行していない時間や、ロック待ちなどの理由で多くの時間を費やしていることを示しており、パフォーマンスに問題がある可能性があります。

:macOSとWindowsでは、CPU時間は現在正確ではありません。macOSでは、CPU値は常に実時間に近い値になります。

wall - 壁掛け時計で計測した場合の所要時間。処理が完了するまでに実際に待機する必要がある時間です。この wall 時間はマイクロ秒単位で測定されます。

ops - ノード内で呼び出されるオペレータの数。オペレータはNukeの構成要素であり、特定のタスクを実行します。ノードには1つ以上のopsを含めることができます。
たとえば、ノードが何かのサイズを変更する必要がある場合、同じことを行うために独自の実装ではなく Transform オペレーションを使用します。

メモリ- ノードによって使用されるシステムメモリの合計量。
Nukeパフォーマンス プロファイリング モードで起動すると、以下に示すように、 Nuke UI のパフォーマンス メニューでタイマーをリセット、開始、停止できます。

プロファイルノード

Nuke 11.1 では、プロファイル ノードが追加されました。これにより、ユーザーはプロファイル ノードが配置された時点でノード ツリーのメトリックを計算できるようになりました。
プロファイル ノードのプロパティで、プロファイル パネルを開くと、 Nukeスクリプトのプロファイリングのコントロールにアクセスできます。
Nukeスクリプトをプロファイルするには、プロファイルするスクリプトの部分に Profile ノードを接続し、選択したフレーム範囲とデータ タイプを入力して、 profile をクリックします。
データが収集されると、プロファイル パネルには、以下に示すように、使用率に基づいて収集されたデータがグラフで表示されます。
注:このデータのフィルタリングの詳細については、 プロファイルデータのフィルタリングのドキュメントを参照してください。

方法の違い

プロファイル ノードは、チャートやその他の GUI ベースの診断などの多くの新機能を提供しますが、パフォーマンス タイマーが使用するタイマー ベースの分析ではなく、パーセント ベースの分析に基づいてパフォーマンスを計算します。


追加情報
両方の方法に関する詳細は、パフォーマンス プロファイリングまたはプロファイルノードのドキュメントでそれぞれ参照できます。

    私たちはそれを聞いて申し訳ございません

    理由をお聞かせください