レンダリング > クラスタ
クラスタとの接続のオン/オフを切り替えます。 クラスタ レンダリングを使用して、複数のコンピュータでレンダリング プロセスを共有することで、レンダリング時間を短縮します。内部的には、シーングラフはネットワーク経由で各コンピュータに転送された後、レンダリング用のタイルに分割されます。その結果がホストに送り返され、最終的なイメージが構成されます。
クラスタを設定するには、クラスタを実行する各ホストの IP アドレスまたは名前を把握しておく必要があります。各ホストには、クラスタ サービスまたは VRED Professional バージョンがインストールされている必要があります。
不要なレンダー ノードのライセンスをチェック アウトすることを避けるには、クラスタ サービスにある個々のホストを無効にします。
ヘッドおよびレンダリング ノードは、ネットワーク経由で接続されます。環境設定はグローバル オプション、ネットワーク オプション、各レンダリング ノードのオプションで構成されます。
VRED は、テクスチャベースのライトマップ用の GPU および CPU クラスタ化をサポートします。ただし、次の点に留意してください。
localhost がクラスタ設定に含まれている場合は、localhost マスターにシーンを 2 回保持する必要があるため、このマスターのグラフィック カードに十分なメモリがあることを確認してください。localhost がクラスタの設定に含まれている場合は、十分な RAM を確保してください。ライトマップとライトマップ UV 生成の計算を複数のマシンに分散させるには、VRED Cluster を使用します。
GPU レイトレーシングまたは VRED Cluster を使用して頂点ベースのシャドウを計算することはできません。
[レンダリング] > [クラスタ]を選択して、[クラスタ]モジュールを開きます。
![[クラスタ]モジュール](../../images/Cluster_module.png)
左側のパネルで[オプション]を選択し、[編集] > [ネットワークを追加]を選択します。
次の手順のいずれかを実行します。
レンダリング ノードを個別に追加するには、[編集] > [計算ノードを追加]を選択して、右側のパネルの[計算ノード]の下で[名前]を入力します。
一度に多くのノードを追加するには、[編集] > [クラスタ設定]を選択して、[クラスタ設定]ダイアログ ボックスを開きます。
[設定]テキスト ボックスで設定を追加します。VRED の旧リリースのクラスタ モジュールの接続文字列を含む、幅広い形式が認識されます。
PC1 PC2 PC3 PC4
PC1, PC2, PC3, PC4
PC1 - PC4
Master1 {PC1 PC2 PC3}
Master1 [forwards=PC1|PC2|PC3]
Master1 {C1PC01 - C1PC50} Master2 {C2PC00 - C2PC50}
また、外部で生成されたファイルから設定を読み込むこともできます。たとえば、スタートアップ スクリプトは、すべての使用可能なクラスタ ノードの名前を含むファイルを生成できます。[ファイルから設定を読み込む]フィールドに有効なファイル名が入力されている場合、[開始]ボタンをクリックするたびに設定が読み込まれます。
クラスタ ノードが VRED を実行しているホストからアクセスできないローカル ネットワークにある場合は、中間ノードを設定する必要があります。 このノードは、VRED を実行しているホストと同じネットワークに接続されており、さらに 2 番目のネットワーク カードを介してクラスタ ネットワークに接続されている必要があります。この設定では、2 つのネットワークを設定する必要があります。最初のものは、ゲートウェイ ノードがある VRED を接続するネットワークです。2 番目のものは、クラスタ ノードに接続されたネットワークです。

ダイアログの右側のパネルで、クラスタ、ネットワーク、レンダー ノードのオプションを設定します。
クラスタ オプションを表示するには、左側のパネルで[オプション]を選択します。
ネットワーク オプションを表示するには、左側のパネルで[ネットワーク]ノードを選択します。
レンダー ノード オプションを表示するには、左側のパネルでノードを選択します。
VRED 2016 SR1 以降ではレイトレーシング クラスタ設定が、そして VRED 2017 以降ではディスプレイ クラスタ設定が変更されています。古い環境設定を読み込み、新しい形式に変換することができます。
[クラスタ]ダイアログ ボックスで、[ファイル] > [レガシーを読み込み]を選択します。
複数の VRED インスタンスから、同じクラスタ ノードに接続することができます。ただし、これを行うと使用可能なリソースが複数の VREDClusterServer インスタンス間で共有されるため、問題が発生する場合があります。
たとえば、予測できない負荷バランスの発生や、他の VREDClusterServer インスタンスによる CPU 消費などのために、パフォーマンスが低下することが挙げられます。同じクラスタ ノードに二人目のユーザが接続しようとすると、次のメッセージが表示されます。
要求された 1 つまたは複数のクラスタ ノード上で VREDClusterServer が既に実行されています。クラスタ化を開始して、パフォーマンスの問題のリスクを冒しますか?
もう 1 つの問題は、使用可能なメモリ容量です。大規模なモデルを使用している場合、クラスタ ノードのメモリに複数のモデルをロードすることが不可能になる場合があります。VRED は必要とするメモリ容量を予測しようとします。必要なメモリ容量を確保できない場合、次のメッセージが表示されます。
要求された 1 つまたは複数のクラスタ ノード上で VREDClusterServer が既に実行されていて、空きメモリが不足している可能性があります。クラスタ化を開始して、サーバが不安定になるリスクを冒しますか?
VRED がクラスタ サーバを強制的に開始すると、サーバで予測できないクラッシュが発生する可能性があります。
クラスタ レンダリングから個々のホストを無効にすることができます。無効になったホストは、レンダー ノード ライセンスをチェック アウトしません。
[RT=0] を追加します。ディスプレイ クラスタを設定すると、ネットワークに接続されているいくつものホストからシーンを表示することができます。完全に機能するディスプレイ クラスタを設定するには、次の情報を環境設定する必要があります。
ネットワーク設定: すべてのディスプレイ ノードとレイトレーシングを高速に行うためにオプションで追加するノードは、[クラスタ]ダイアログ ボックスで環境設定する必要があります。
投影設定: リモート ディスプレイで表示されるものを定義する必要があります。たとえば、ディスプレイをタイル状の壁として配置したり、CAVE の壁として配置することができます。
ディスプレイ設定: どのディスプレイで投影のどの部分が表示されるかを定義する必要があります。ビューポートの正確な位置を定義できます。パッシブまたはアクティブな設定を選択できます。
メニュー バーで[レンダリング] > [クラスタ]を選択し、[クラスタ]ダイアログ ボックスを開きます。
レイトレーシングのためのディスプレイ ノードと他の追加ノードを設定します。
[ディスプレイ設定]をクリックして[ディスプレイ設定]ダイアログ ボックスを開きます。
投影を設定します。
複数の投影タイプがサポートされています。投影にはタイルの壁、CAVE の壁、または任意の平面を定義できます。複数のディスプレイに対して複数の投影タイプを定義できます。たとえば、VRED は CAVE 投影に平行なタイル表示を処理できます。
[タイル表示]や[CAVE]などの投影タイプは、それぞれの単一ディスプレイに対する子投影を生成します。子投影は読み取り専用です。生成した投影を実世界の状態に一致するように変更しなければならない場合は、それらを右クリックし、[平面に変換]を選択して平面投影に変換します。 その後、各平面を個別に編集できます。
ディスプレイを設定します。
投影が定義されている場合は、各投影をいずれかのクラスタ ノードのウィンドウにマッピングする必要があります。 同じディスプレイに属するすべてのウィンドウをグループ化し、1 つのディスプレイ ノードにまとめることができます。
右クリック メニューを使用すると、ディスプレイ、ウィンドウ、ビューポートのコピーと貼り付けを行うことができます。ディスプレイ全体を同じウィンドウで構成する場合などは、この方法で定義を簡素化できます。
VRED は複数のクラスタ ノード間における入れ替え同期をサポートしています。NVidia Quadro Sync などの同期ハードウェアがインストールされ、適切に環境設定され、接続されている必要があります。これらの前提条件をすべて満たしている場合は、ディスプレイ プロパティの[ハードウェアの同期]プロパティを有効にすることができます。接続されているすべてのディスプレイでバッファ入れ替え同期を実行できます。
ネットワーク ハードウェアは、シーングラフがクラスタ内のレンダリング ノードに割り当てできる、達成可能な最大フレーム レートおよび速度を制限する要因となります。オートデスクでは、さまざまなネットワーク構成の 32 個のノードがあるクラスタ上でフレーム レートおよびデータ転送速度を計測しました。レンダリング速度が CPU に制約されていないことを確認するために、CPU ラスタライゼーションのある非常に単純なシーンを使用してイメージを生成しました。すべての計測値は、他のトラフィックがない専用のネットワーク内で適切に構成されたネットワーク コンポーネントで取得されました。
データ転送速度は、常にクラスタ内の最も遅いネットワーク リンクによって制限されます。インフィニバンドは理論上は最高 30GBit/s で転送できますが、ホストとのリンクは 10GBit であるため、この速度を達成することはできません。現在のところ、当社では 10 GB イーサネットで接続された大規模なクラスタの使用経験がありません。10 GB を超えるインフィニバンド構成を最大 300 ノードを使用してテストされました。
| ネットワーク | 非圧縮(MB/s) | 中(MB/s) | 高(MB/s) |
|---|---|---|---|
| 10 GB->インフィニバンド | 990 | 1100 | 910 |
| 10 GB->1 GB | 110 | 215 | 280 |
| 1 GB | 110 | 215 | 280 |
シーングラフの転送速度とは対照的に、フレーム レートは最も遅い接続によって制限されない場合があります。レンダリング ノードが、ホストへの 10GBit アップリンクで 1GBit スイッチに接続されている場合、10 個のレンダリング ノードは合計ですべての 10GBit アップリンクを利用できます。大規模なクラスタの場合、ネットワーク遅延の影響はさらに重要になります。推奨されるクラスタ ネットワークはインフィニバンドです。
| 解像度 | ネットワーク | 非圧縮(fps) | ロスレス(fps) | 中ロッシー(fps) | 高ロッシー(fps) |
|---|---|---|---|---|---|
| 1024x768 | 10 GB->インフィニバンド | 250 | 220 | 300 | 250 |
| 10 GB->1 GB | 250 | 220 | 300 | 250 | |
| 1 GB | 50 | 100 | 145 | 220 | |
| 1920x1080 | 10 GB->インフィニバンド | 130 | 120 | 200 | 130 |
| 10 GB->1 GB | 130 | 120 | 200 | 130 | |
| 1 GB | 20 | 40 | 50 | 130 | |
| 4096x2160 | 10 GB->インフィニバンド | 40 | 40 | 55 | 40 |
| 10 GB->1 GB | 40 | 40 | 55 | 40 | |
| 1 GB | 5 | 10 | 15 | 40 | |
| 8192x4320 | 10 GB->インフィニバンド | 10 | 12 | 14 | 13 |
| 10 GB->1 GB | 10 | 12 | 14 | 13 | |
| 1 GB | 1 | 2 | 3 | 10 |
オートデスクでは Mellanox と QLogic/Intel インフィニバンド カードをテストしました。10 GB イーサネットに対して Intel X540-T1 ネットワーク カードを使用しました。
VRED は、可能な限り多くの帯域幅を使用しようと試みます。これによって、同じネットワーク上の他のユーザに問題が生じることがあります。それ以外には、同じネットワーク上での大きなファイルの転送などでレンダリング速度が遅くなります。可能な場合は、クラスタに専用ネットワーク インフラストラクチャを使用してください。
クラスタ レンダリングでは、レンダリング サーバをレンダリング ノードで開始する必要があります。このプロセスの自動化を可能にするために、VREDClusterService を使用します。このプログラムは、要求に応じてクラスタ サーバを開始および停止します。
既定では、このサービスは受信接続用にポート 8889 をリッスンします。1 つのポートでは、1 つのサービスのみを一度に開始できます。複数のサービスを開始する必要がある場合は、各サービスが異なるポートを使用する必要があります。ポートを指定するには、-p オプションを使用します。
VREDClusterService のテストは、手動で開始することができます。オプション -e -c を追加すると、コンソールにデバッグ情報が生成されます。
Windows では、VRED インストーラは「VRED Cluster Daemon」システム サービスを追加します。このサービスによって、システム起動時に VREDClusterService が開始されます。Windows のコントロール パネルで[ローカル サービスの表示]を選択すると、これを確認できます。適切なインストールを指すパスを指定する必要があり、[スタートアップの種類]は[自動]、[サービスの状態]は[開始]である必要があります。
Linux でこのサービスを起動するには、init システムに bin/vredClusterService を追加するか、bin/clusterService を手動で実行する必要があります。
ダイアログ ボックスの下部にある[クラスタを開始]をクリックします。
これにより、Windows で VREDClusterService が開始されます。このサービスが VRED の代わりにレンダリングを処理します。
メイン メニューで[レンダリング] > [レンダリング設定]を選択し、レンダリングを保存するパスを入力します。
[レンダリング設定]ダイアログ ボックスで、[レンダリング]をクリックします。
[クラスタのスナップショット]ダイアログ ボックスが開きます。ここには、レンダリングのプレビューとその進行状況が表示されます。
レンダリング処理の実行中に、[クラスタのスナップショット]ダイアログ ボックスで[プレビューを更新]をクリックすると、プレビュー イメージが更新されます。
実行中に[キャンセルして保存]をクリックすると、レンダリングを中止し、それまでの状態をファイルに保存できます。あるいは、レンダリングが完了するまで待ち、[保存]をクリックします。
クラスタ サービスから単一のホストを無効にすることができます。除外されたホストはレンダー ノード ライセンスをチェック アウトしません。
[RT=0] を追加します。Linux の VREDCluster のインストーラは、自己解凍バイナリ形式で出荷されています。パッケージのファイル名にバージョン番号とビルド日付が示されています。パッケージの内容を現在のディレクトリに抽出するには、シェル コマンドでインストーラを実行します。
sh VREDCluster-2016-SP4-8.04-Linux64-Build20150930.sh
これにより VREDCluster-8.04 というフォルダが作成され、クラスタ レンダリングに必要なすべてのファイルがそこに抽出されます。各クラスタ ノードに、このディレクトリに対する読み取り許可を与える必要があります。これは各ノードに個別にインストールすることも、共有ネットワーク ドライブにインストールすることもできます。
クラスタ ノードに接続できるようにするには、クラスタ サービスを開始する必要があります。そのためには次のコマンドを手動で入力して呼び出すか、Linux の起動プロセスのスクリプトに追加します。
VREDCluster-8.04/bin/clusterService
Linux では、さまざまな方法でシステムの起動時にプログラムを開始することができます。ただし、それぞれの Linux 配布バージョンによって、その方法はいくらか異なります。可能な解決策の 1 つは、/etc/rc.local に起動コマンドを追加することです。このスクリプトは、起動時と各 runlevel の変更時に実行されます。
インストール ファイルがたとえば /opt/VREDCluster-8.04 に格納されている場合、rc.local ファイルを次のように編集します。
#!/bin/sh -e
killall -9 VREDClusterService
/opt/VREDCluster-8.04/bin/clusterService &
exit 0
このサービスをルートとして実行したくない場合は、たとえば vreduser としてサービスを開始することができます。
#!/bin/sh -e
killall -9 VREDClusterService
su - vreduser '/opt/VREDCluster-8.04/bin/clusterService &'
exit 0
その他に、init スクリプトを /etc/init.d に追加してシステムの起動時に VRED サービスを開始するという方法もあります。まず、init スクリプトをインストール ディレクトリ bin/vredClusterService から /etc/init.d にコピーします。次に、このスクリプトを異なる実行レベルでアクティブにする必要があります。
Redhat または CentOS Linux の場合: chkconfig vredClusterService on
Ubuntu の場合: update-rc.d vredClusterService 既定値
ライセンス サーバのアドレスは、ホーム フォルダにある環境設定ファイル .flexlmrc に保存するか、環境変数 ADSKFLEX_LICENSE_FILE として設定する必要があります。サーバ名が mylicenseserver である場合は、次のように設定します。
~/ .flexlmrc ファイルには、以下の情報が含まれています。ADSKFLEX_LICENSE_FILE=@ mylicenseserver
またはログイン スクリプトに次のように追加します。export ADSKFLEX_LICENSE_FILE=@ mylicenseserver
クラスタ サービスを開始するユーザのための環境を確実に設定してください。
ログ ファイルは /tmp/clusterServer/log ディレクトリに記録されます。ログ ファイルは Web ブラウザで表示する必要があります。トラブルシューティングを行う際には、クラスタ サービスをコンソール モードで開始すると役立ちます。実行中のクラスタ サービスを停止した後、手動で bin/clusterService -e -c と入力して起動します。これですべてのデバッグ メッセージとエラー メッセージがコンソールに書き出されます。
サービスが実行されているかを確認する: ps -C VREDClusterService
クラスタ サービスを停止する: killall -9 VREDClusterService
クラスタ サーバを停止する: killall -9 VREDClusterServer
完全な非ブロッキング ネットワークでは、完全なリンク速度で、すべての接続したノードが相互に通信できます。16 ポートのギガビット スイッチでは、このことはスイッチが 16 のポートのトラフィックの読み込みと書き込みを並行して処理できることを意味します。これは 32 GB/s の内部の帯域幅を必要とします。VRED は非ブロッキング ネットワークで最適に動作します。たとえば、シーングラフの転送は、パイプラインのようにノードからノードにパッケージを送信して行います。これは各ノードにシーン全体を直接送信するより、はるかに速くなります。
可能な場合は、ネットワーク ハブを使用しないでください。ハブは、受信パッケージを接続されたすべてのノードに送信します。これにより、シーングラフの転送速度が非常に遅くなります。
大規模なクラスタでは、完全な非ブロッキング ネットワークを使用するのは非常に高価な場合があります。クラスタ ノードが複数のスイッチに接続されている場合、接続しているスイッチによってレンダリング ノードを単にソートすることで、良好なパフォーマンスを実現できる場合があります。
たとえば、256 個のノードがあるクラスタがあり、それらのノードが 4 つのスイッチに接続されているなどです。最悪の設定は次のようになります。
Node001 Node177 Node002 Node200 Node090 ...
ソートしたリストを使用して、より良い結果を実現できます。
Node001 - Node256
この設定でパフォーマンスの問題が発生する場合は、設定にネットワーク トポロジをモデル化してみます。
Node001 { Node002 - Node064 }
Node065 { Node066 - Node128 }
Node129 { Node130 - Node192 }
Node193 { Node194 - Node256 }
この設定では、スイッチ間で転送されるデータ量が効率的に削減されます。
ib_write_bw を使用して 2 つのノード間の通信を確認します。ulimit -l を確認します。ロックされているメモリの量を無制限に設定する必要があります。ulimit -n を確認します。開いているファイル数を無制限または大きい値に設定する必要があります。Infiniband 上で VREDClusterServer を実行することができない場合、通常は、Infiniband 上の IP をパフォーマンスがほとんど低下することなく使用できます。レンダリング速度が CPU によって制限される場合、ネットワーク使用率は常に 100% 未満になります。この場合、高速ネットワークを使用しても高いフレーム レートを得ることはできません。
iperf などのツールを使用して、実現可能なネットワーク スループットを確認してみてください。 10 GB イーサネット上では、VRED は通信を高速化するために複数のチャネルを使用します。これは、iperf -P4 を使用してシミュレートできます。両方向のスループットを確認します。
ネットワーク速度は使用するネットワーク カードによって制限され、ネットワーク スイッチおよびハブによっても制限されます。ネットワークが多くのユーザによって使用されている場合、スループットは時によって大きく変動する場合があります。
テストでは、Windows 上で 10 GB イーサネット カードを 100% を使用するのは非常に困難であることが判明しています。最適化しない場合、50% の使用が期待できます。計測ツールを使用して、ネットワーク カードのパフォーマンス パラメータを調整することができます。レンダリング速度がネットワークによって非常に制限される場合は、イメージ圧縮を「ロスレス」以上に設定する必要があります。
Intel 10GB X540-T1 イーサネット カードでは、次のオプションによって、Windows 上のネットワーク スループットを向上させることができます。
Default = 2、4 に変更Default = 512、2048 に変更Default = 512、2048 に変更Linux では、/etc/sysctl.conf 内のパラメータ net.ipv4.tcp_rmem、net.ipv4.tcp_wmem、net.ipv4.tcp_mem を引き上げることができます。
Mellanox 社製の Windows 用 Infiniband ドライバ MLNX_VPI_WinOF を使用し、インフィニバンドを介した TCP を使ってクラスタ ノードに接続することができます。次のネットワーク設定を使用します。
Linux が「接続モード」を使用するように環境設定されている場合、Linux ネットワークに接続することはできません。接続されているすべてのノードの MTU が等しくなっていることを確認してください。