Amazon Web Services ブログ
AWS Thinkbox DeadlineでRezをサポート
この記事は、“AWS Thinkbox Deadline adds support for Rez” を翻訳したものです。
AWS Thinkbox Deadline 10.2.0.10 から Rez のサポートが追加されました。
「Rezとはサードパーティや一般的に使用されているDCC(Digital Content Creation)ツール用にスタンドアロンの構成済み環境を作成する、オープンソースのクロスプラットフォームパッケージマネージャーです。Rezは、他の多くのパッケージマネージャーのようにパッケージを環境に直接インストールするのではなく、すべてのパッケージバージョンをディスク上のリポジトリにインストールし、動的に作成されたスタンドアロン環境でそれらを実行します。Rezはコンテンツ制作のパイプラインにおいて広く使用されており、視覚効果 (VFX) やアニメーション制作の開発者が抱えているパッケージ管理に関する数多くの課題を解決しています。」 – Academy Software Foundation (ASWF.io)
図1: Rez はパッケージを一度インストールするだけで、その後のソフトウェアの実行環境を動的に構成することが出来ます (via GitHub)
Rezは、アーティストが特定のタスクに取り組む際、動的に解決された環境で適切なパッケージがワークステーションにすべて揃っていることを保証しなければならない、という課題を解決します。たとえば、これらのパッケージを使用して、特定のツールにエイリアスを設定したり、ファイルパスを追加したり、環境変数を設定することができます。Rezを使うと、この強力な組み合わせにより、アプリケーションの起動、カスタムソフトウェアをソースし、ライセンス環境変数の設定などが可能な環境を構成できるため、VFX(視覚効果)パイプライン上でアーティストが扱うツールをきめ細かく制御することができます。
レンダーファームの観点から見ても、アーティスト用に設定されたRez環境から投入されたジョブは、同じ設定で実行され、同じファイルパス、カスタムソフトウェア、ライセンスが含まれるはずです。
従来の方法
これまでは、お客様はRezをDeadlineに統合するために自社での開発を必要としていました。その一般的なアプローチは次の2つです。
- ジョブを投入する側のワークステーションで、投入時にRezで設定された環境変数をDeadlineのジョブオブジェクトに書き込みます。環境変数は、特定のアプリケーション、ライブラリ、Pythonパッケージのファイルパスの設定を容易にするため、これでジョブの一部として適切なパッケージがロードできるようになります。環境変数は、タスクの実行時にDeadline Workerに自動的に適用されます。これが最も単純な実装方法ですが、次のような制限があります。Workerに適用されるのは環境変数だけであり、WorkerはRezから提供されたコンテキストを元に動的に解決することは出来ません。また、Deadlineのレンダリングプラグインそれぞれに対して、特定のRez toolおよび、特定のレンダリング実行ファイルを使用するように、簡単に設定できる方法はありません。
- 送信側のワークステーションで、送信側のRez解決環境内のImplicitパッケージ(暗黙的に追加されるパッケージ)以外のRez解決済みパッケージのリストを、Extra Info Keyとして OnJobSubmitted イベントを介してDeadlineのジョブに注入します。次に、Worker上で ModifyCommandLineCallback を使用してすべてのレンダリングコマンドに rez-envコマンドでプレフィックスを付け、RezパッケージのExtra Info値リストを動的に解決します。これはDeadlineのScripting API を巧妙に利用した方法ですが、やはりDeadlineのレンダリングプラグインごとに使用するレンダリング実行ファイルを設定できる簡単な仕組みを提供するものではありません。
どちらのソリューションにおいても、Deadlineに組み込まれたスクリプトAPIを使用してカスタムコードを作成する必要があります。これはAWSで言う、付加価値を生まない重労働であり、改善の余地があります。
より深いインテグレーション
以下は、RezをAWS Thinkbox Deadlineに統合した際の概略図です。
図2: VFX Platform CY2022で構成された環境を介してRezをDeadlineに統合した例
実際にDeadlineでオープンソースのDCCツールであるBlenderを使用して、これがどのように機能するか見てみましょう。
DCCツールでの例
DeadlineでRezを使用する前に、Rezが作業用ワークステーションとWorkerマシンにインストール・設定されていることを確認してください。標準のインストール手順で記されている通り、DeadlineはRezがシステムのPATH上にあることを前提としています。Rezをインストール後はRezイベントプラグインを使用することができます。Rezイベントプラグインの設定にアクセスするには、Deadline MonitorでSuper Userモードに入り、メニューから [Tools] → [Configure Events] を選択します。そして左側のリストからRezを選択します。有効にすると、RezイベントプラグインはデフォルトでREZ_USED_RESOLVEを使用します。
図3: Rez: Deadlineのイベントプラグインの設定画面
ジョブの投入
ジョブを投入する際にDeadlineは自動的にワークステーション上でRezによって設定された環境変数REZ_USED_RESOLVEの内容から、REZ_USED_IMPLICIT_PACKAGESから取得されるRezによって定義された暗黙的なパッケージを除いたものをExtra Info Key Value : DEADLINE_REZ_REQUEST_PACKAGESとしてDeadlineのジョブに添付します。さらに、Deadlineは、rez-context –toolsをサブプロセスとして実行し、その出力をパースしてジョブで使用できるRez toolsのリストを作成することで、ジョブに DEADLINE_REZ_TOOLSのExtra Info Keyを設定します。Deadlineがパッケージまたはツールリストを取得できない場合、Warningがlogに記録された上で、Rezなしでジョブの投入を完了します。これは、すべてのRezプラグインモードで同様に行われます。
ジョブの投入後
Rezでジョブを投入後、ジョブのプロパティパネルから追加されたExtra Info Keyの値を確認できます。Monitor内のジョブをダブルクリックすると表示されます。DEADLINE_REZ_REQUEST_PACKAGESはWorkerが解決を試みるパッケージバージョンのリストで、DEADLINE_REZ_TOOLSはRezの解決済みコンテキスト内で使用できるツール名のリストです。
図4: Rez: Deadlineのジョブ内にあるリクエストされるパッケージとツール
レンダリングプラグインの設定
RezをDeadlineの既存のレンダリングプラグインと組み合わせて使用するには、適切なレンダラーのRez toolをそのレンダリングプラグインの実行ファイルリストに追加する必要があります。たとえば、blenderというツールを含むblender Rezパッケージがある場合、BlenderプラグインのBlender実行ファイルのリストにツール名を追加する必要があります。レンダリングプラグインの設定は、Super Userモードに入り、Monitorのメニューから [Tools] → [Configure Plugins] を選択するとアクセスできます。Worker上でジョブを実行すると、他の実行ファイルのフルパスよりも先に、実行ファイルのリスト内にRez toolsがあるかチェックされます。
図5: Rez: Deadline内の、Rez blenderツールが記載されたBlenderの実行ファイルリスト(Executables)
ジョブの実行
WorkerはDeadlineジョブのタスクをデキューし、ジョブのDEADLINE_REZ_TOOLSのExtra Info Keyを参照してこれがRez対象ジョブであるかどうかを確認します。DEADLINE_REZ_TOOLSに値を持っている場合、DeadlinePlugin.GetRenderExecutable()スクリプト関数はDEADLINE_REZ_TOOLSのリストとDeadlineレンダリング実行ファイルリストの両方にある最初のRez toolを返します。Rez toolが見つからない場合は、通常どおり、レンダリング実行ファイルのリストを順番に検索します。次に、Workerは、下記の構文例を使用して、rez-env実行ファイルをレンダリングコマンドのインラインプレフィックスコマンドとして呼び出します。
rez-env DEADLINE_REZ_REQUEST_PACKAGES — $RENDERER $RENDER_ARGUMENTS
したがって、Blenderの例の場合は
/path/to/rez-env python-3.7.12 hello_world-1.0.0 blender-3.3.1 numpy-1.21.6 — blender -b /path/to/<scene-file>.blend -t 0 -s 1 -e 1 -a
ここで rez-envはジョブのExtra Info KeyのDEADLINE_REZ_REZ_REQUEST_PACKAGESで定義されているRezパッケージを使用してコンテキストの解決を試みます。その後、引き続きそのコンテキスト内でBlenderのレンダリングコマンドを実行し、コマンドが実行されたらすぐにRezコンテキストを終了します。
成功しました!Rezは、構成済みの環境をオンデマンドで動的に解決し、起動すべきレンダリングツールを正確に見つけて、ジョブの送信元のワークステーションと同じ作業フレームをDeadline Worker上でレンダリングするようになりました。
メモ
- Rezのイベントプラグインは、「Global Enabled」ではなく「Opt-In」に設定することができます。これにより、ジョブの投入時にどのDeadlineジョブがRez workflowをトリガーするのかを選択的に指定できます。これは、開発の初期段階や移行時、またスタジオの制作パイプライン上でのデバッグ時に役立つ可能性があります。
- ジョブ投入時のデフォルトのREZ_USED_RESOLVEのDeriveモードでは、~platform==windowsなどのImplicitパッケージが削除されます。これはWindowsワークステーションからDeadlineジョブを投入してLinuxのレンダーノードでレンダリングする場合に重要です。
- その他のRezのDeriveパッケージモードにも対応しています。詳細については、Rezのイベントプラグインのドキュメントをご覧ください。
- もしDeadlineのジョブに2つのExtra Info Keys(DEADLINE_REZ_REQUEST_PACKAGESとDEADLINE_REZ_TOOLS)が存在する場合、Workerは解決されたRezコンテキストでプロセスの起動を試みます。特定のDeadlineのジョブに対してRezを無効にするには、ジョブのプロパティでこれらのExtra Info Keysを削除するか、一時的に名前を変更する必要があります。
- Deadlineのレンダリングプラグイン設定に複数のRez toolsが記載されている場合、WorkerはDEADLINE_REZ_TOOLSで順序付けられた実行ファイルリストから最初のツールを選択します。
まとめ
この記事では、RezはサードパーティやDCCツール用にスタンドアロンの構成済み環境を作成する、オープンソースのクロスプラットフォームパッケージマネージャーであることを説明しました。RezはAWS Thinkbox Deadlineに深く統合されたため、お客様はオンプレミスかクラウドかを問わず、レンダーファーム上で同一の方法でレンダリングを実行できるパイプラインを構築することが出来るようになりました。
詳細については、ASWFのRezドキュメント、およびDeadlineのRezイベントプラグインについてのドキュメントとFAQを参照してください。