Houdini 17.5 TOPsを使ってプロシージャルディペンデンシーグラフ(PDG)を構築する方法

PDGとレンダーファームソフトウェアの統合

異なるスケジューラを使って、ワークのスケジュールを組んで実行する方法。

On this page

概要

ネットワークを走らせる際にあなたが指定したワークを実際に処理させるには、 何か が、実行準備の整ったコマンドを受け取って、その実行環境を構築して、それらのコマンドを実行しなければなりません。 TOPネットワークでは、この 何かスケジューラ ノードに相当します。

TOPネットワーク内に2個以上のスケジューラノードを配置することができますが、そのネットワークをクックするスケジューラは、TOP Networkノードで指定します。

TOPネットワーク内に複数のスケジューラを配置することで、異なる"プロファイル"をセットアップして、スケジューラ間でそれを切り替えることができます(例えば、小規模なテストをする時にはローカルスケジューラを使用し、プロダクションでフル稼働させる時にはレンダーファームスケジューラに切り替えることができます)。

特定のノードで使用するスケジューラをオーバーライドすることができます。 これによって、ローカルで軽いジョブを実行してファイルシステムの修正を行なうことができるので、ファームにそれらのジョブを送信するオーバーヘッドの負荷を回避することができます(さらに、一部のノードをまったくスケジュールに組ませずにメインプロセスでワークを処理するためのオプションがあります)。 他にも、スケジューラノードは特定のトップレベルのジョブパラメータをオーバーライドすることもできます。

新しいTOPネットワークに対してデフォルトのスケジューラノードは、プロセスキューを使ってワークのスケジュールを組みます。 作業負荷によりますが、これによってオーバーヘッドが小さくなるため、実際にレンダーファームを使用するよりも高速化することができます。

すぐに使えるように、TOPsにはいくつかのレンダーファームパッケージ用のビルトインのスケジューラノードが用意されています(以下参照)。

TOPsは、制御マシンとすべてのサーバーがネットワークファイルシステムを共有している場所で分散されたセットアップのみを扱います。

スケジューラのタイプ

Local Scheduler

デフォルトのスケジューラ:ローカルマシン上のプロセスキューを使って、ワークのスケジュールを組みます。

HQueue Scheduler

これはHoudiniの無料の管理ソフトウェアで、小規模なレンダーファームに適しています。 HQueueのインストール方法を参照してください。

Deadline Scheduler

Thinkboxソフトウェア社の計算管理ツールキットです。

Tractor scheduler

Pixar社のレンダー管理ソフトウェアです。

カスタムスケジューラ

カスタムスケジューラのバインドを使用することで、他のサードパーティ製または内製のソフトウェアと統合させることができます。

スケジューラのオーバーライド(上書き)

To...Do this

単一ノードで使用するスケジューラをオーバーライドする

  1. オーバーライドしたいスケジューラのノードを選択します。

  2. パラメータエディタで、 Schedulers タブをクリックします。

  3. TOP Scheduler Path に、使用したいスケジューラノードのノードパスを設定します。

    たいていの場合、TOP Networkノードは(サブネットを使わずに)トップレベルで全体を定義するので、TOP Networkノードはスケジューラノードと同じレベルにいるようなものです。 その場合、スケジューラの相対パスは、local_schedulerといったスケジューラノードの名前だけになります。

    別の方法として、フィールドの隣にあるノード選択アイコンをクリックすることで、インタラクティブにスケジューラノードを選択することができます。 この方法だと、スケジューラの絶対パスが入ります。

TOP Networkノードで指定されたデフォルトのスケジューラを使用するようにノードの設定を戻すには、このノードの TOP Scheduler Path フィールドを空っぽに設定してください。

単一ノードのジョブ実行パラメータをオーバーライドする

スケジューラには、スケジュールの組み方とコマンドの実行方法に関する個々のパラメータがあります。それらの設定をノード単位でオーバーライドすることができます。

  1. オーバーライドしたいスケジューラのノードを選択します。

  2. パラメータエディタで、 Schedulers タブをクリックします。

  3. このタブには、ネットワーク内のスケジューラノード毎にサブタブがあります。オーバーライドしたい設定のスケジューラに該当するタブをクリックします(そのスケジューラがこのノードをクックしているスケジューラである場合にのみ、このオーバーライドが適用されます)。

  4. そのサブタブ内の Override Job Parameters を有効にします。

    下図は、オーバーライド可能なスケジューラパラメータセットを載せています。

ワークアイテムのオーバーヘッドを回避する方法

別々のプロセスでオペレーションを開始させるのも、ファーム上でワークのスケジュールを組むのも、ネットワークファイルシステム上にデータを移すのも、どれもこれもTOP内での作業でオーバーヘッド(余計な負荷)が発生します。 一部のノードには、TOPグラフをクックしているプロセス内で小さいジョブを行なうためのオプションがあり、ファーム上でそれらの小さいジョブのスケジュールを組まずに、同じマシン上でそれらのジョブを実行できるようにそれらの小さなワークアイテムをオーバーライドすることができます。

しかし、HDA Processorノードをローカルで実行させた場合でさえも、そのアセットがすぐにクックを完了するようであれば、それを別々のプロセスで実行させるオーバーヘッドは、パフォーマンス全体に影響を与えてしまいます。 このオーバーヘッドを最適化または回避するために、あなたができる事がいくつかあります:

  • HDA Processorノードの代わりにROP Geometryノードを使ってジオメトリを生成し、時間/フレーム番号を使ってWedgeを行なってください。

    同じHIPファイル内に、アセットをTOP Networkとしてインスタンス化して、SOPネットワークのROP Geometryノードを指定します。 そのROP Geometryノードの ROP Fetch タブにある All Frames in One Batch を有効にします。 これによって、1度に1フレームで全フレーム範囲をクックする単一プロセスが作成されます。通常では、これはシミュレーションで使用しますが、軽量なジオメトリのジョブの効率性を上げる際にもよく使用します。

    特定のバッチサイズで試すこともできます。例えば、 All Frames in One Batch の代わりに、1バッチで20フレームを使用するようにすることができます。

  • 可能であれば、HDA Processorノードの代わりにInvokeノードを試してみるのも良いでしょう。Invokeノードは、独自のプロセス内ではなく、TOPグラフをクックしているプロセス内でSOPチェーンをクックします。このInvokeノードの制限事項は、コンパイルブロックでしか使用できないことです。小さい/すぐに処理が終わるようなオペレーションでは、この方が 非常に 効率的です。

  • Local Schedulerノードで、ローカルマシンのプロセスの数を上げることができます。デフォルトの最大プロセス数は、ローカルマシンが低速にならないように非常に低く設定(コア数/4)されていますが、小さなジョブがローカルで実行されるようにオーバーライドする場合には、おそらく、この数をコア数まで上げた方が良いでしょう。

  • Local Schedulerノードの HDAProcessor Pool を有効にして、0よりも大きい数値を設定します。これは、それぞれの新しいHDAProcessorジョブを別々のインスタンスで実行するのではなくて、HDAProcessorジョブに対してHDAProcessorインスタンスが再利用できるようにプールを作成します。

Houdiniの今後のバージョンでは、おそらくこのHDAProcessorにバッチ処理を追加する予定なので、ROP Geometryのバッチモードと同様に、単一プロセスで複数のアセットバリエーションをクック(Wedge)できるようになります。

TOPsを使ってプロシージャルディペンデンシーグラフ(PDG)を構築する方法

基本

次のステップ

リファレンス

  • すべてのTOPsノード

    TOPノードは、データをネットワークに送り込んで"ワークアイテム"に変換し、色々なノードでそれを制御するワークフローを定義します。たいていのノードは、ローカルマシンまたはサーバーファーム上で実行可能な外部プロセスを表現しています。

  • プロセッサ系ノードのコールバック

    プロセッサ系ノードは、スケジューラで実行可能なワークアイテムを生成します。

  • パーティショナー系ノードのコールバック

    パーティショナー系ノードは、複数の上流ワークアイテムを単一パーティションにグループ化します。

  • Python API

    ディペンデンシーグラフを扱うためのPython PDGパッケージのクラスと関数。