Doc:JA/2.6/Manual/Render/Performance/Netrender
"Technical Details" の一部未訳
解説
Blender 内部からのネットワークレンダリング
目的
- 透明性
- 柔軟性
使い方
バージョン 2.6 以降では、ユーザー設定の Addons パネルで「Network Render」を有効化しておく必要があります。
GUI
マスター/Master
一台のマシンでマスターサーバーを開始します。
- Blender を起動し、information ウィンドウのヘッダーにあるドロップダウン(「Scene」の隣)を使ってレンダリングエンジンを Network Render に切り替えます。
- (レンダリングモードを選択済みであることを確認してください)処理モードとして Master を選びます。
- 「オプションとして」待ち受ける IP address を指定します。port も同様です。サーバーを指定ポートのすべてのネットワークインターフェイスで待ち受けるときは、[default] のままにします。
- Start を押します(空のレンダリングウィンドウが開きます)。レンダリング状況を示すバーにはサーバーの動作が反映されます。
- マスターは、通常のレンダリングのキャンセルのように Esc を押すと停止します。それまでは実行を続けます。
マスターのウェブインターフェイス
開始後マスターは、スレーブとジョブに関するさらなる情報を与えるウェブインターフェイスも提供します。現在、二つのウェブインターフェイスがあります。
古いものは次の URLスキームで見られます。 http[s]://マスターのIPアドレス:マスターのポート
開発中の jQuery ベースの新しいものは次の URL スキームで見られます。 http[s]://マスターのIPアドレス:マスターのポート/html/newui
新インターフェイスに関する全情報は こちら をご覧ください。
スレーブ/Slave
別のマシンでレンダースレーブを開始します。
- Blender を起動し、レンダリングエンジンを Network Render にします。
- (レンダリングモードを選択済みであることを確認してください)処理モードとして Slave を選びます。
- (オプションで)マスターサーバーの IP address と port を指定します。ブロードキャストからスレーブにマスターを自動検知させるには、[default] のままにします。
- Start を押します(空のレンダリングウィンドウが開きます)。レンダリング状況を示すバーにはスレーブの動作が反映されます。
- スレーブは、通常のレンダリングのキャンセルのように Esc を押すと停止します。それまでは実行を続けます。
クライアント/Client
あなたのワークステーションからクラスタにジョブを送るには:
- レンダリングする blend ファイルを開きます。サイズ等のレンダリング設定を確認します。
- ファイルを保存します(ここで最後に保存したファイルが送信されます)。
- レンダーエンジンに Network Render を選びます。
- 処理モードとして Client を選びます。
- 次のいずれかを行います:
- マスターサーバーの IP address および port を指定します。
- ブロードキャストからクライアントにマスターサーバーを自動検知させるには、address の下にある Refresh ボタンを押します。
- アニメーションジョブをマスターサーバーに発信するには、Send Job を押します。
- 準備ができれば、アニメーションをレンダリングして(Ctrl-F12)、できたフレームを集めます。できたフレームは自動的に「現れ」ますが、進行中のフレームでは少し止まります。
- アニメーションの任意フレームで Render を押すこともできます。マスターから結果が取得されます。
- 簡単に言えば、「ネットワークでアニメーション」を押し、送られてくるフレームを待つだけでいいのです。レンダリング時間の合計はほぼスレーブの数に反比例します(転送時間を除く)。
ひとつのシステム上で、マスター、クライアント、スレーブを実行できます。
コマンドライン
- 前述のとおり、マスターを設定します。「Start Service」を押す代わりに、ファイルを保存します(例:master.blend)。
- スレーブの設定も同様に保存します(例:slave.blend)。
- 以下のようにしてマスターとスレーブを開始し、バックグラウンドレンダリングを行います:
- blender -b master.blend --addons netrender -a -noaudio -nojoystick
- blender -b slave.blend --addons netrender -a -noaudio -nojoystick
- マスターとスレーブは Ctrl-C で停止できます。スレーブをマスターより先に止めることをお勧めします。
オプション --addons netrender は、ネットワークレンダーのアドオンが読み込まれていることを保証します。オプション -noaudio -nojoystick は任意です。警告表示を避けるためだけに指定しています。
その他
最終結果がローカルのレンダリングとまったく同じになるように、完全なマルチレイヤーのレンダリング結果が使われます。もとのファイル内でこれを出力として指定する必要はありません。スレーブ上で自動的に行われます。
テスターは IRC (#blendercoders
) か電子メールで theeth と連絡をとるようお呼びがかかっています。
設定
レンダーエンジンのドロップダウンは、Blender ウィンドウの一番上にある Info ウィンドウにあります。ネットレンダー機能を使うには、ここで Network Render を選びます。
マスター/Master
- Network Settings(ネットワークの設定)
- Start Service: マスターサーバーを開始します。
- Path: マスターがジョブファイル、処理結果、ログやその他のものを保存する場所。master_<pid> という名前で新規ディレクトリを作ります。<pid> にはマスターサーバーの process ID が入ります。あとでマスターを再開できるように、フォルダのルートに "blender_master.data" という名前のファイルが保存されます。
- Server Address: マスターが待ち受けるネットワークインターフェイスのアドレスです。[default] は利用できるネットワークインターフェイスをすべて待ち受けます。
- Port: マスターの待ち受けポート。
- SSL: スレーブやクライアントとの接続に SSL(https)を使います。有効にすると、SSL の証明書と鍵を指定する二つの項目が新たに表示されます。自己署名証明書か、comodo や verisign のようなサードパーティ提供の証明書を使えます。トラストチェーン(chain of trust)があれば同じファイル内に入れることができますが、証明書は先に入れる必要があります。証明書、トラストチェーン、鍵は PEM ファイルとして渡さなければなりません。
- Open Master Monitor: ブラウザでウェブベースのマスターモニターを開きます。
- Master Settings(マスターの設定)
- Broadcast: マスターのアドレスとポートをローカルネットワークでブロードキャストします(10秒ごと)。
- Force Dependency Upload: ローカルにある既存の依存ファイルはクライアントのファイルに一致しても使わず、代わりにクライアントの依存ファイルをマスターにアップロードさせます。
- Clear on exit: マスターが停止したとき、Path 内に作られたディレクトリを取り除きます。有効にすると、何らかの理由でマスターの処理が止められたとき、あとでマスターが再開しないようにします。
スレーブ/Slave
- Network Settings(ネットワークの設定)
- Start Service: スレーブノードを開始します。
- Path: スレーブがジョブファイル、処理結果、ログを保存する場所。slave_<id> という名前で新規ディレクトリを作ります。<id> にはマスターサーバーによって割り当てられた Slave ID が入ります。
- Server Address: マスターの待ち受けアドレス。
- Port: マスターの待ち受けポート。
- Refresh: マスターのブロードキャストを受信し、アドレスとポートを決めます(最大で20秒かかります)。
- Open Master Monitor: ブラウザでウェブベースのマスターモニターを開きます。マスターのアドレスが正しいとき有効になります。
- Slave Settings(スレーブの設定)
- Tags: スレーブに割り当てられたタグの、セミコロン区切りの一覧です。ジョブの持つタグをスレーブがすべて持たない限りは、そのスレーブにジョブは割り当てられません。
- Clear on exit: スレーブが止められたとき、Path に作られたディレクトリを取り除きます。
- Generate thumbnails: スレーブ上のレンダリング結果のサムネイルを作ります(無効にするとマスターの要求があり次第作られます)。
- Output render log on console: レンダリングのサブプロセスからのログを、マスターに送られるレンダーログだけでなく、標準出力にも出力します。
- Threads: スレーブがレンダリングに使うスレッド数。
クライアント/Client
- Network Settings(ネットワークの設定)
- Path: クライアントが一時的なレンダリングの結果ファイルを保存する場所です。
- Server Address: マスターの待ち受けアドレス
- Port: マスターの待ち受けポート
- SSL: マスターとのやりとりに SSL(https)を使います。
- Refresh: マスターのブロードキャストを受信し、マスターのアドレスとポートを決めます(最大20秒かかります)。
- Open Master Monitor: ブラウザでウェブベースのマスターモニターを開きます。マスターのアドレスが正しいとき有効になります。
- Job Settings(ジョブの設定)
- Animation on network: 現在開いているファイルをジョブとしてマスターに送り、結果を待ちます(レンダリングが他の場所で行われること以外は、通常のアニメーションレンダリングのように動作します)
- Send job: 現在開いているファイルをジョブとしてマスターに送ります。返された job ID が current job ID になります。
- Bake on network: シーン内のポイントキャッシュやパーティクルシステムを使ってすべてのモディファイアとともにベイク処理のジョブを送ります。
- Send current frame job: 現在開いているファイルを、現在のフレームだけがレンダリングされるようにして、ジョブとしてマスターに送ります。返された job ID が current job ID になります。
- Name: ジョブの名前。[default] は blend ファイル名を使います。
- Category: ジョブのカテゴリで、オプション です。マスター上のジョブもカテゴリによって負荷分散されます。
- Tags: スレーブに割り当てられたタグの、セミコロン区切りの一覧です。ジョブの持つタグをスレーブがすべて持たない限りは、そのスレーブにジョブは割り当てられません。
- Engine: このジョブのレンダリングに使うレンダリングエンジン。
- Priority: ジョブの優先度。優先度は、マスターがジョブを X 個のジョブであるかのように数えさせるための乗数です(たとえば優先度1と優先度2のジョブの釣り合いをとると、それぞれ、作業量の33%と66%を受け取ります)。
- Chunks: ジョブチャンクの一部としてスレーブに割り振られるフレーム数。
- Save Before Job: ジョブとして割り振られる前に、現在のファイルをディスクに強制的に保存します。
- Slaves Status(スレーブの状態)
- List: マスターに接続している全スレーブの一覧。
- Refresh: マスターからのスレーブ情報を最新化します。
- Remove: 選択したスレーブをブラックリストに移動します。
- Slaves Blacklist(スレーブのブラックリスト)
- List: ブラックリストに登録した全スレーブの一覧。
- Remove: 選択したスレーブをブラックリストから取り除きます。
- Jobs(ジョブ)
- List: マスター上の全ジョブの一覧。
- Refresh: マスターからのジョブ情報を最新化します。
- Remove: マスターからジョブを取り除きます。
- Remove All: マスターから全ジョブを取り除きます。
- Get Results: 選択中のジョブから利用できる全フレームを取得します。結果は マルチレイヤー EXR 情報として現在の出力先ディレクトリにダウンロードされます。
物理演算のベイク処理
物理演算のベイク(bake)は最近 Netrender に追加された機能です。シーン(またはモディファイア、あるいはパーティクルシステム)で使われている各ポイントキャッシュについて、ベイクジョブの配信をサポートします。
ポイントキャッシュはそれぞれ、スレーブ上で独立してベイクされます。ベイク順や依存度は現在サポートされていません。
結果はウェブインターフェイスの該当ジョブのページから、zip ファイルとしてのダウンロードだけができます。ダウンロードができたら unzip し、ファイルに関連付けられた blendcache フォルダに結果を置き、ベイクしたモディファイアとパーティクルシステム用にディスクキャッシュを有効にします(この手順はある時点で自動で行われているはずです)。
ポイントキャッシュのベイク時に出力されるテキストは、ログファイルにパイプするには恐ろしく向かず、それほど有益なものではありません。したがってジョブのログファイルから多くの情報は得られないでしょう。この変更にはベイクコードを直接変える必要があります。
他の種類の物理演算(fluid 等)のベイクは、いずれサポートされるでしょう。
バージョン管理ジョブ
VCS(バージョン管理システム)をジョブタイプとして使うことで、ネットレンダーが通常使用する依存システムを無視し、代わりにバージョンづけシステムに依存できます。より組織化された製作では、依存エラーやディスク消費量、ジョブの割り振り時間を最小限にすることから、VCS を使うのは通常は良い考えです。
現時点で、サポートされているバージョン管理システムは Subversion(svn)と Git の二つだけです。新規追加は比較的容易で、要望があれば行います。
VCS を一つ選んだら、システム固有の設定を3つ指定する必要があります:
- Revision: 特定バージョンの認識に使われる文字列(svn: revision、git: commit hash)。
- Remote path: ファイルをダウンロードできるリモートパス(svn: server url、git: スレーブがチェックアウト可能な remote repository path)。ジョブファイルはすべて、このフォルダかサブフォルダになければなりません。
- Working copy: 作業コピーのルートフォルダ。ここにリモートファイルがダウンロードされます。同じファイルを何度もダウンロードしないように、ジョブ間で維持されます。ジョブがバージョン管理システムから、特定ファイルの新たなリビジョンを必要とするときにだけ変更されます。
Refresh ボタンは知り得る範囲で最善の設定を探します。
覚書および既知の不具合
- ノード間に共有ネットワーク空間を必要としません。
- さまざまなファイルを割り振ることができ、結果はすべて独立して取得できます(ファイルを閉じてあとで取り出したい場合は、割り振り後にファイルを保存してください)。
- ネットワークエラーの管理はほとんどないため、マスターを最初に閉じると壊れます。不正なアドレスを入力した場合も同じです。
- 同一ファイル名による多くの依存の問題: https://projects.blender.org/tracker/index.php?func=detail&aid=25783&group_id=9&atid=498
はい、現在のワークフローが理想から遠いことは わかっています、本格的な render farm の視点からは特に。Matt が私を鞭打ってもっとよいものを提案してくれることを期待しています。ローカルレンダーのように「ネットワーク上でアニメ」を押すだけで自動的にネットワークに割り振って結果を待つようにしたいです。すべての「本格的な」機能は随意選択式にすべきです。
負荷の分散/Load Balancing
基本的な負荷分散は、10秒ごとに各ジョブのクラスタの平均使用量を計算することで行われます。次に割り振られるジョブは使用量の一番低いもの(使っているスレーブ数が最小のもの)です。ジョブの優先度は約数の働きをします。優先度2のジョブは、ジョブが1つだけではなく2つあるかのように、クラスタの一定の割合を使います(たとえば優先度1のジョブとスレーブを共有する優先度2のジョブはそれぞれ、処理能力の33%と66%を使うでしょう)。さらに、例外と最優先ルールがあります:
例外
- ひとつのジョブは、それが唯一のジョブでない限りは、全体の N% より多いスレーブを使えません。これで、遅いジョブが速いジョブを停止させないようにします。現在は 75% にセットされていますが、カスタマイズ可能にすべきです。
最優先(基準)
- 割り振られたフレーム数が N より小さいもの(新しいジョブ優先)。エラーを早期に把握するためのものです。
- 最後の割り振りから N 分より長く経過したもの。優先度の高いジョブが他を停止させないようにします。
To do
- メモリからジョブを送る
- 可視性についてレンダーエンジンの選択に依存しない
- "熟練の" レンダー管理
- もっとうまく定義された通信プロトコル
- ノード上でのシミュレーション計算(cloth、smoke、...)を行なって、その後割り振ってレンダリングするためにポイントキャッシュをサーバーに送るオプション
- アップロード時にテクスチャをパックする
- 単一フレームをタイルとして割り振る
技術的詳細
期限切れです。コードを読んでここに情報を載せてください。
機能一覧
- ファイルに代えてパスをサポート
- client-server-slave: ジョブを特定ノードに制限
- client-server-slave: ノードマシンの状態を表示
- client-server-slave: エラーログのマネージャーへの報告(ノードからのすべての
stdout
とstderr
) - ジョブのキャンセル
- エラーフレームの再開始
- Windows でクラッシュレポートの無効化
- 1つ以上のフレームを一度に割り振り(フレームのシーケンス)
- リセット後、フレームでエラーのあるスレーブをブラックリスト登録
- Multiple paths on job announce
- 全ファイルを捕捉するまでジョブを遅らせる
- フレーム範囲の制限(フレーム範囲で必要とされるときだけポイントキャッシュファイルを送る)
- マスターにログの一部を送信
- TODO: スレーブにネットワークパス上の結果をコピーさせる
- TODO: client-master: ジョブをアーカイブに入れる(ソースファイルと結果の複製)
- TODO: master-slave: スレーブの性能を基準にしたジョブ制限
API 機能のウィッシュリスト
以下はネットレンダーの改善に必要に思える blender コードの一覧です。いくつかはバグで、いくつかはいつか搭載すべき(してほしい)機能です。
- API access to jobs, to be able to run masters and slaves in the background as well as render job notifiers on the client.
- Render result from multilayer image in memory
- Render and load tiles in render results