クラスタを使用してレンダリングする

レンダリング > クラスタ

クラスタとの接続のオン/オフを切り替えます。 クラスタ レンダリングを使用して、複数のコンピュータでレンダリング プロセスを共有することで、レンダリング時間を短縮します。内部的には、シーングラフはネットワーク経由で各コンピュータに転送された後、レンダリング用のタイルに分割されます。その結果がホストに送り返され、最終的なイメージが構成されます。

クラスタを設定するには、クラスタを実行する各ホストの IP アドレスまたは名前を把握しておく必要があります。各ホストには、クラスタ サービスまたは VRED Professional バージョンがインストールされている必要があります。

不要なレンダー ノードのライセンスをチェック アウトすることを避けるには、クラスタ サービスにある個々のホストを無効にします。

ヘッドおよびレンダリング ノードは、ネットワーク経由で接続されます。環境設定はグローバル オプション、ネットワーク オプション、各レンダリング ノードのオプションで構成されます。

テクスチャベースのライトマップのクラスタ化

VRED は、テクスチャベースのライトマップ用の GPU および CPU クラスタ化をサポートします。ただし、次の点に留意してください。

ライトマップとライトマップ UV 生成の計算を複数のマシンに分散させるには、VRED Cluster を使用します。

注:

GPU レイトレーシングまたは VRED Cluster を使用して頂点ベースのシャドウを計算することはできません。

クラスタを設定する方法

  1. [レンダリング] > [クラスタ]を選択して、[クラスタ]モジュールを開きます。

    [クラスタ]モジュール

  2. 左側のパネルで[オプション]を選択し、[編集] > [ネットワークを追加]を選択します。

  3. 次の手順のいずれかを実行します。

    • レンダリング ノードを個別に追加するには、[編集] > [計算ノードを追加]を選択して、右側のパネルの[計算ノード]の下で[名前]を入力します。

    • 一度に多くのノードを追加するには、[編集] > [クラスタ設定]を選択して、[クラスタ設定]ダイアログ ボックスを開きます。

[設定]テキスト ボックスで設定を追加します。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 番目のものは、クラスタ ノードに接続されたネットワークです。

アクセスできないクラスタ ノード

  1. ダイアログの右側のパネルで、クラスタ、ネットワーク、レンダー ノードのオプションを設定します。

    • クラスタ オプションを表示するには、左側のパネルで[オプション]を選択します。

    • ネットワーク オプションを表示するには、左側のパネルで[ネットワーク]ノードを選択します。

    • レンダー ノード オプションを表示するには、左側のパネルでノードを選択します。

レガシー クラスタの設定をインポートする方法

VRED 2016 SR1 以降ではレイトレーシング クラスタ設定が、そして VRED 2017 以降ではディスプレイ クラスタ設定が変更されています。古い環境設定を読み込み、新しい形式に変換することができます。

[クラスタ]ダイアログ ボックスで、[ファイル] > [レガシーを読み込み]を選択します。

同じクラスタ ノードを複数回使用する方法

複数の VRED インスタンスから、同じクラスタ ノードに接続することができます。ただし、これを行うと使用可能なリソースが複数の VREDClusterServer インスタンス間で共有されるため、問題が発生する場合があります。

たとえば、予測できない負荷バランスの発生や、他の VREDClusterServer インスタンスによる CPU 消費などのために、パフォーマンスが低下することが挙げられます。同じクラスタ ノードに二人目のユーザが接続しようとすると、次のメッセージが表示されます。

要求された 1 つまたは複数のクラスタ ノード上で VREDClusterServer が既に実行されています。クラスタ化を開始して、パフォーマンスの問題のリスクを冒しますか?

もう 1 つの問題は、使用可能なメモリ容量です。大規模なモデルを使用している場合、クラスタ ノードのメモリに複数のモデルをロードすることが不可能になる場合があります。VRED は必要とするメモリ容量を予測しようとします。必要なメモリ容量を確保できない場合、次のメッセージが表示されます。

要求された 1 つまたは複数のクラスタ ノード上で VREDClusterServer が既に実行されていて、空きメモリが不足している可能性があります。クラスタ化を開始して、サーバが不安定になるリスクを冒しますか?

VRED がクラスタ サーバを強制的に開始すると、サーバで予測できないクラッシュが発生する可能性があります。

クラスタ サービスからホストを無効にする

クラスタ レンダリングから個々のホストを無効にすることができます。無効になったホストは、レンダー ノード ライセンスをチェック アウトしません。

  1. メニュー バーで[レンダリング] > [レンダリング設定]を選択し、[レンダリング設定]ダイアログ ボックスを開きます。
  2. [レンダリング設定]ダイアログ ボックスで、[クラスタ]セクションまでスクロールダウンして、[クラスタを有効化]を選択し、ホスト名を入力します。
  3. 無効にするホスト名の後に、[RT=0] を追加します。

ディスプレイ クラスタを設定する

ディスプレイ クラスタを設定すると、ネットワークに接続されているいくつものホストからシーンを表示することができます。完全に機能するディスプレイ クラスタを設定するには、次の情報を環境設定する必要があります。

ハードウェアの同期を有効化する

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 を手動で実行する必要があります。

  1. ダイアログ ボックスの下部にある[クラスタを開始]をクリックします。

    これにより、Windows で VREDClusterService が開始されます。このサービスが VRED の代わりにレンダリングを処理します。

  2. メイン メニューで[レンダリング] > [レンダリング設定]を選択し、レンダリングを保存するパスを入力します。

  3. [レンダリング設定]ダイアログ ボックスで、[レンダリング]をクリックします。

    [クラスタのスナップショット]ダイアログ ボックスが開きます。ここには、レンダリングのプレビューとその進行状況が表示されます。

  4. レンダリング処理の実行中に、[クラスタのスナップショット]ダイアログ ボックスで[プレビューを更新]をクリックすると、プレビュー イメージが更新されます。

  5. 実行中に[キャンセルして保存]をクリックすると、レンダリングを中止し、それまでの状態をファイルに保存できます。あるいは、レンダリングが完了するまで待ち、[保存]をクリックします。

クラスタ サービスからホストを無効にする

クラスタ サービスから単一のホストを無効にすることができます。除外されたホストはレンダー ノード ライセンスをチェック アウトしません。

  1. メイン メニューで[レンダリング] > [レンダリング設定]を選択し、[レンダリング設定]ダイアログ ボックスを開きます。
  2. [レンダリング設定]ダイアログ ボックスで、[クラスタ]セクションまでスクロールして、[クラスタを有効化]を選択します。
  3. ホスト名を入力し、無効にするホスト名の後ろに [RT=0] を追加します。

Linux における VRED クラスタ

Linux のインストールの抽出

Linux の VREDCluster のインストーラは、自己解凍バイナリ形式で出荷されています。パッケージのファイル名にバージョン番号とビルド日付が示されています。パッケージの内容を現在のディレクトリに抽出するには、シェル コマンドでインストーラを実行します。

sh VREDCluster-2016-SP4-8.04-Linux64-Build20150930.sh

これにより VREDCluster-8.04 というフォルダが作成され、クラスタ レンダリングに必要なすべてのファイルがそこに抽出されます。各クラスタ ノードに、このディレクトリに対する読み取り許可を与える必要があります。これは各ノードに個別にインストールすることも、共有ネットワーク ドライブにインストールすることもできます。

クラスタ ノードに接続できるようにするには、クラスタ サービスを開始する必要があります。そのためには次のコマンドを手動で入力して呼び出すか、Linux の起動プロセスのスクリプトに追加します。

VREDCluster-8.04/bin/clusterService

Linux の起動時に自動的に VRED クラスタ サービスを開始する

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 }

この設定では、スイッチ間で転送されるデータ量が効率的に削減されます。

トラブルシューティング

レンダリング ノードに接続できない

インフィニバンドを使用してクラスタ サーバに接続できない

他の高いフレーム レートによってハングするときがある

フレーム レートが、期待するほど高くない

ネットワーク使用率が 100% より小さいのはなぜか

CPU 使用率が 100% より小さいのはなぜか

Windows で Mellanox InfiniBand を使用する場合