ハイブリッド レンダー ファームの概念実証を実施する


このドキュメントでは、Google Cloud でハイブリッド レンダー ファームを構築するために概念実証(PoC)を実施する方法について説明します。このドキュメントは、ハイブリッド レンダー ファームの構築に付属するものであり、Google Cloud でアニメーション、映画、コマーシャル、ビデオゲームのレンダリングのテストとベンチマークを円滑に行えるようにすることを目的としています。

テストスコープを重要なコンポーネントだけに絞り込む場合は、Google Cloud でハイブリッド レンダー ファームの概念実証を実行できます。エンドツーエンドのソリューション全体を設計する場合と異なり、この概念実証は次のことを目的としています。

  • オンプレミスのレンダリング環境をクラウド上で再現する方法を決める。
  • オンプレミス レンダー ワーカーとクラウド インスタンスを比較し、レンダリングとネットワークのパフォーマンスの違いを測定する。
  • オンプレミス ワークロードとクラウド ワークロードの費用の相違を特定する。

次の作業は重要性が低く、PoC を延期できます。また、PoC から削除することもできます。

  • 施設とクラウドの間でアセットの同期状況を特定する(同期が行われている場合)。
  • キュー管理ソフトウェアを使用して、クラウド レンダー ワーカーにジョブをデプロイする方法を決める。
  • Google Cloud に接続する最適な方法を判断する。
  • 施設と Google データセンター間のレイテンシを測定する。

接続

レンダリング概念実証の場合、Google へのエンタープライズ クラスの接続は必要ありません。公共のインターネット経由の接続で十分です。レンダリング パフォーマンスの場合、接続速度、レイテンシ、帯域幅は最重要項目ではありません。

概念実証用に Dedicated Interconnect または Partner Interconnect を調整するには時間がかかるため、接続性の評価は別の概念実証で行います。この評価はレンダリング テストと並行して実行できます。

目標

  • Compute Engine インスタンスを作成して、レンダー ワーカーとして機能するようにカスタマイズする。
  • カスタム イメージを作成する。
  • レンダー ワーカーをデプロイする。
  • アセットをレンダー ワーカーにコピーする。
  • レンダーのベンチマークを実行する。
  • 評価を行うため、テストレンダーをレンダー ワーカーからローカル ワークステーションにコピーする。

料金

予想使用量を見積もる場合は、オンプレミスとクラウドベースのレンダー ワーカーの費用の違いを見積もります。

このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。 新しい Google Cloud ユーザーは無料トライアルをご利用いただける場合があります。

このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。

始める前に

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Google Cloud プロジェクトで課金が有効になっていることを確認します

  4. Google Cloud CLI をインストールします。
  5. gcloud CLI を初期化するには:

    gcloud init
  6. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  7. Google Cloud プロジェクトで課金が有効になっていることを確認します

  8. Google Cloud CLI をインストールします。
  9. gcloud CLI を初期化するには:

    gcloud init
  10. Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。

    Cloud Shell をアクティブにする

    Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。

  11. このドキュメントでは、操作の大半を Cloud Shell で行いますが、オンプレミス マシンから Cloud Storage にデータをコピーするには、そのマシンで Google Cloud CLI を実行する必要があります。

環境設定

  • Cloud Shell で、Compute Engine ゾーンを設定します。

    gcloud config set compute/zone [ZONE]
    

    [ZONE] は、すべてのリソースが作成されているゾーンです。

インスタンスのデプロイ

概念実証の場合、オンプレミスのレンダー ワーカー ハードウェアを再作成することをおすすめします。Google Cloud では、独自のハードウェアに合わせてさまざまな CPU プラットフォームを使用できますが、クラウドベースの仮想マシンのアーキテクチャは、オンプレミスのレンダー ファームのベアメタル レンダー ブレードと異なります。

Google Cloud では、リソースは仮想化され、他のリソースとは独立しています。仮想マシン(インスタンス)は、次の主要コンポーネントから構成されています。

  • 仮想 CPU(vCPU)
  • メモリ(RAM)
  • ディスク

    • ブートディスクとゲスト OS
    • 追加のストレージ ディスク
  • NVIDIA Tesla GPU(オプション)

また、ネットワーク、ファイアウォール ルール、ユーザー アクセスなど、リソースの他の要素も制御できます。ただし、PoC の場合は前述の 4 つの要素にのみ注意する必要があります。

インスタンスを作成する

  1. Cloud Shell で、プロトタイプのレンダー ワーカー インスタンスを作成します。

    gcloud compute instances create [INSTANCE_NAME] \
        --machine-type [MACHINE_TYPE] \
        --image-project [IMAGE_PROJECT] \
        --image-family [IMAGE_FAMILY] \
        --boot-disk-size [SIZE]
    

    ここで

    例:

    gcloud compute instances create render-worker-proto \
        --machine-type custom-24-32768 \
        --image-project centos-cloud \
        --image-family centos-7 \
        --boot-disk-size 100
    

    上記のコマンドでは、24 個の vCPU、32 GB の RAM、標準の 100 GB のブートディスクを持つ CentOS 7 インスタンスが作成されます。インスタンスは、デフォルトのコンピューティング ゾーンとして設定したゾーンで作成されます。

任意のサイズの VM を作成できます。最大 96 個までの vCPU、624 GB 以上の RAM、または複数の NVIDIA Tesla GPU を使用できます。これ以上の vCPU が必要な場合は、ultramem タイプを試してください。可能性は無限ですが、過剰なプロビジョニングには注意してください。ジョブの規模に合わせて、費用対効果に優れ、スケーラブルなクラウドベースのレンダー ファームを設計してください。

インスタンスへのログオン

  1. Cloud Shell で、SSH を使用してインスタンスに接続します。

    gcloud compute ssh [INSTANCE_NAME]
    
  2. オンプレミスのレンダー ワーカーと同様に、インスタンスにソフトウェアをインストールしてライセンスを取得します。

デフォルト イメージの作成

Linux カスタム カーネルや古い OS バージョンなどのカスタム ソフトウェアをテストする場合を除き、公開のディスク イメージを使用してソフトウェアを追加することをおすすめします。

独自のイメージをインポートする場合は、ゲスト OS が Google Cloud と通信できるように、追加のライブラリをインストールして、このイメージを構成する必要があります。

レンダリング ワーカーを設定する

  1. Cloud Shell で、前に作成したインスタンスにソフトウェアとライブラリをインストールして、オンプレミス ワーカーと同じようにレンダー ワーカーを設定します。

  2. インスタンスを停止します。

    gcloud compute instances stop [INSTANCE_NAME]
    

カスタム イメージを作成する

  1. Cloud Shell で、VM の起動ディスクの名前を確認します。

    gcloud compute instances describe [INSTANCE_NAME]
    

    次のように、インスタンスの起動ディスクの名前が返されます。

    mode: READ_WRITE
    source:https://www.googleapis.com/compute/v1/projects/[PROJECT]/zones/[ZONE]/disks/[DISK_NAME]
    

    ここで

    • [PROJECT] は Google Cloud プロジェクトの名前です。
    • [ZONE] は、ディスクが配置されているゾーンです。
    • [DISK_NAME] は、インスタンスに接続されている起動ディスクの名前です。通常、ディスク名はインスタンス名と同じまたは類似したものになります。
  2. インスタンスからイメージを作成します。

    gcloud compute images create [IMAGE_NAME] \
        --source-disk [DISK_NAME] \
        --source-disk-zone [ZONE]
    

    ここで

    • [IMAGE_NAME] は、新しいイメージの名前です。
    • [DISK_NAME] は、新しいイメージを作成するディスクです。
    • [ZONE] は、ディスクが配置されているゾーンです。

レンダー ワーカーをデプロイする

必要な OS、ソフトウェア、ライブラリを備えたカスタム イメージを用意したので、公開イメージではなく、カスタム イメージを使用してレンダー ワーカー インスタンスをデプロイできます。

  • Cloud Shell で、レンダー ワーカー インスタンスを作成します。このインスタンスから Cloud Storage に書き込めるように、スコープ devstorage.read_write を追加します。

    gcloud compute instances create [WORKER_NAME] \
        --machine-type [MACHINE_TYPE] \
        --image [IMAGE_NAME] \
        --scopes https://www.googleapis.com/auth/devstorage.read_write \
        --boot-disk-size [SIZE]
    

    ここで、[WORKER_NAME] はレンダー ワーカーの名前です。

ライセンス ソフトウェア

PoC 中にオンプレミス ライセンス サーバーを使用してライセンスを提供できます。新しいクラウドベースのライセンス サーバーにライセンスを再発行する必要はありません。クラウド インスタンスからオンプレミスのライセンス サーバーに安全に接続するには、必要なポートを経由するトラフィックのみを許可するファイアウォール ルールを作成します。このファイアウォール ルールでは、オンプレミス インターネット ゲートウェイやライセンス サーバー自体の IP アドレスからのトラフィックも許可されます。

Google Cloud インスタンスからのトラフィックがオンプレミス ライセンス サーバーに届くように、施設のインターネット ゲートウェイを構成する必要があります。

オンプレミス ライセンス サーバーを使用する

ファイアウォール ルールを作成することで、Virtual Private Cloud(VPC)ネットワークへのトラフィックを許可できます。

  • Cloud Shell で、次のファイアウォール ルールを作成します。

    gcloud compute firewall-rules create [RULE_NAME] \
       --direction=INGRESS \
       --priority=1000 \
       --network=default \
       --action=ALLOW \
       --rules=[PROTOCOL]:[PORT] \
       --source-ranges=[IP_ADDRESS]
    

ここで

  • [RULE_NAME] は、ファイアウォール ルールの名前です。
  • [PROTOCOL] は、トラフィックのプロトコルです。
  • [PORT] は、トラフィックが通過するポート番号です。
  • [IP_ADDRESS] は、オンプレミス ライセンス サーバーの IP アドレスです。

クラウドベースのライセンス サーバーを使用する

クラウドベースのライセンス サーバーは、オンプレミス ネットワークに接続する必要はありません。レンダー ワーカーと同じ VPC ネットワーク上で動作します。ライセンのス提供は比較的軽いタスクのため、小規模なインスタンス(2〜4 の vCPU、6〜8 GB の RAM)で、少数のレンダー ワーカーにライセンスを提供するワークロードを処理できます。

ライセンスの種類によっては、ライセンス サーバーの MAC アドレスなど、固有のハードウェア ID 番号を再入力する必要があります。他のライセンス マネージャーは、インターネットに接続された任意のホストからソフトウェア ライセンスを検証します。ライセンス マネージャーは多数存在しています。手順については、製品のライセンスに関するドキュメントをご覧ください。

インスタンス間の通信を許可する

レンダー ワーカーとライセンス サーバー インスタンスは相互に通信する必要があります。ファイアウォール ルール default-allow-internal を使用すると、プロジェクトのすべてのインスタンスが相互に通信できるようになります。このファイアウォール ルールは、新しいプロジェクトを作成するときに作られます。新しいプロジェクトを使用している場合、このセクションはスキップできます。既存のプロジェクトを使用している場合は、ファイアウォール ルールが Google Cloud プロジェクトにまだ存在するかどうかを確認する必要があります。

  1. Cloud Shell で、ファイアウォール ルールがプロジェクトに含まれているかどうかを確認します。

    gcloud compute firewall-rules list \
        --filter="name=default-allow-internal"
    

    ファイアウォール ルールがプロジェクトに存在する場合、次のような出力が返されます。

    NAME                   NETWORK DIRECTION PRIORITY ALLOW DENY                   DISABLED
    default-allow-internal default INGRESS   65534m   tcp:0-65535,udp:0-65535,icmp False
    

    ファイアウォール ルールがプロジェクトにない場合、出力には何も表示されません。

  2. ファイアウォール ルールを作成する必要がある場合は、次のコマンドを使用します。

    gcloud compute firewall-rules create default-allow-internal \
        --direction=INGRESS \
        --priority=65534 \
        --network=default \
        --action=ALLOW \
        --rules=tcp:0-65535,udp:0-65535,icmp \
        --source-ranges=0.0.0.0/0
    

アセットの保存

1 つの会社内でもレンダー パイプラインが大きく異なる可能性があります。最小限の構成で PoC を迅速に実装する場合、レンダー ワーカー インスタンスのブートディスクにアセットを格納します。この PoC では、データの同期など、高度なストレージ ソリューションの評価は行わないでください。これらのオプションには別の概念実証を使用できます。

Google Cloud では多くのストレージ オプションを使用できますが、スケーラブルな共有ストレージ ソリューションのテストは別の概念実証で行うことをおすすめします。

複数のレンダー ワーカー構成のテストで共有のファイル システムが必要な場合は、Filestore ボリュームを作成し、NFS でレンダー ワーカーにマウントできます。Filestore は、ファイル サーバーとして機能するマネージド ファイル ストレージ サービスで、複数のインスタンスに対する読み取り / 書き込みに使用できます。

Google Cloud にデータを渡す

レンダリング概念実証を実行するには、シーンファイル、キャッシュ、アセットをレンダー ワーカーに渡す必要があります。10 GB を超える大規模なデータセットの場合、gsutil を使用して Cloud Storage にデータをコピーしてから、レンダー ワーカーにコピーできます。10 GB 未満のデータセットの場合は、gcloud CLI を使用して、データをレンダー ワーカーのパスに直接コピーできます(Linux のみ)。

レンダー ワーカーに宛先ディレクトリを作成する

  1. Cloud Shell で、SSH を使用してレンダー ワーカーに接続します。

    gcloud compute ssh [WORKER_NAME]
    

    [WORKER_NAME] は、実際のレンダー ワーカーの名前です。

  2. データの保存先ディレクトリを作成します。

    mkdir [ASSET_DIR]
    

    [ASSET_DIR] は、レンダー ワーカー上の任意の場所にあるローカル ディレクトリです。

gsutil を使用して大量のデータをコピーする

サイズの大きいデータセットをレンダー ワーカーに転送する場合は、中間ステップとして Cloud Storage で gsutil を使用します。サイズの小さいデータセットを転送する場合は、次のセクションに進み、gcloud CLI でデータを転送できます

  1. ローカル ワークステーションで Cloud Storage バケットを作成します。

    gsutil mb gs://[BUCKET_NAME_ASSETS]
    

    [BUCKET_NAME_ASSETS] は、コピーするファイルまたはディレクトリが存在する Cloud Storage バケットの名前です。

  2. ローカル ディレクトリからバケットにデータをコピーします。

    gsutil -m cp -r [ASSETS] gs://[BUCKET_NAME_ASSETS]
    

    [ASSETS] は、バケットにコピーするファイルまたはディレクトリのリストです。

  3. SSH を使用してレンダー ワーカーに接続します。

    gcloud compute ssh [WORKER_NAME]
    
  4. バケットの内容をレンダー ワーカーにコピーします。

    gsutil -m cp -r gs://[BUCKET_NAME_ASSETS]/* [ASSET_DIR]
    

gcloud CLI を使用して少量のデータをコピーする

サイズの小さなデータセットを転送する場合は、gcloud CLI を使用して、ローカル ワークステーションから実行中の Linux レンダー ワーカーに直接コピーできます。

  • ローカル ワークステーションで、ローカル ディレクトリとレンダー ワーカーの間でデータをコピーします。

    gcloud compute scp --recurse [ASSETS] [INSTANCE_NAME]:[ASSET_DIR]
    

    ここで

    • [ASSETS] は、バケットにコピーするファイルまたはディレクトリのリストです。
    • [INSTANCE_NAME] はレンダー ワーカーの名前です。
    • [ASSET_DIR] は、レンダー ワーカーのローカルパスです。

テストレンダーを実行する

レンダー ソフトウェアをインストールしてライセンスを取得し、シーンデータをコピーしたら、レンダーテストを実行できます。このプロセスは、レンダー パイプラインがレンダー コマンドを実行する方法によって変わります。

ベンチマーク ツール

オンプレミス ハードウェアに対してクラウド リソースのベンチマークを行う場合は、Perfkit Benchmarker を使用してネットワーク帯域幅やディスク パフォーマンスなどの統計情報を測定できます。

一部のレンダー ソフトウェアには、V-RayOctaneMaxon などの独自のベンチマーク ツールがあります。このツールをオンプレミスとクラウドの両方で実行して、一般的なレンダー構成を比較できます。

Google Cloud からデータを取得する

レンダーテストを実行して結果を確認する場合は、結果のレンダーをローカル ワークステーションにコピーする必要があります。転送するデータセットのサイズに応じて、gsutil または gcloud CLI を使用します。

ローカル ワークステーションにインストール先ディレクトリを作成する

  • ローカル ワークステーションで、レンダー用にディレクトリを作成します。

    mkdir [RENDER_DIR]
    

    [RENDER_DIR] は、レンダー ワーカーのローカルパスです。

gsutil を使用して大量のデータをコピーする

サイズの大きいデータセットを転送する場合は、gsutil を使用します。それ以外の場合は、次のセクションに進み、gcloud CLI を使用します。レンダー ワーカーから Cloud Storage バケットにデータをコピーする場合は、Cloud Storage バケットを別に作成して、レンダーとアセットデータを別々に維持します。

  1. ローカル ワークステーションで、新しい Cloud Storage バケットを作成します。

    gsutil mb gs://[BUCKET_NAME_RENDERS]
    

    [BUCKET_NAME_RENDERS] は、レンダリングされたデータ用の Cloud Storage バケットの名前を表します。

  2. SSH を使用してレンダー ワーカーに接続します。

    gcloud compute ssh [WORKER_NAME]
    
  3. レンダリングしたデータをバケットにコピーします。

    gsutil -m cp -r [RENDERS] gs://[BUCKET_NAME_RENDERS]
    

    ここで

    • [RENDERS] は、バケットにコピーするファイルまたはディレクトリのリストです。
  4. ローカル ワークステーションで、Cloud Storage バケットからローカル ディレクトリにファイルをコピーします。

    gsutil -m cp -r gs://[BUCKET_NAME_RENDERS]/* [RENDER_DIR]
    

gcloud CLI を使用して少量のデータをコピーする

小規模なデータセットをコピーする場合は、レンダー ワーカーからローカル ワークステーションに直接コピーできます。

  • ローカル ワークステーションで、レンダリング先ディレクトリにコピーします。

    gcloud compute scp --recurse [WORKER_NAME]:[RENDERS] [RENDER_DIR]
    

    [RENDERS] は、ローカル ワークステーションにコピーするファイルまたはディレクトリのリストです。

クリーンアップ

このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。

プロジェクトの削除

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

リソースを個別に削除する

  1. インスタンスを削除します。
    gcloud compute instances delete INSTANCE_NAME
  2. バケットを削除します。
    gcloud storage buckets delete BUCKET_NAME

次のステップ