[AWS Deadline Cloud] Windows+Blender 環境における CMF(Customer-Managed Fleets) を使用したクラウドレンダリング [1/3]
- 第 2 回: [AWS Deadline Cloud] Windows+Blender 環境における CMF(Customer-Managed Fleets) を使用したクラウドレンダリング [2/3]
- 第 3 回: [AWS Deadline Cloud] Windows+Blender 環境における CMF(Customer-Managed Fleets) を使用したクラウドレンダリング [3/3]
対象読者
- クラウドレンダリングに興味がある方
- AWS Deadline Cloud の基本を理解し、より高度な制御を求める方
- AWS Deadline Cloud の基本的な操作については こちら
- Customer-Managed Fleet (CMF) を使用してカスタマイズされたレンダリング環境を構築したい方
- Windows OS 環境で Blender を使用している方
- 自社のインフラストラクチャを AWS 上で管理・活用したい方
参考ページ
- https://docs.aws.amazon.com/ja_jp/deadline-cloud/latest/userguide/manage-cmf.html
- https://docs.aws.amazon.com/deadline-cloud/latest/developerguide/manage-cmf.html
- https://github.com/aws-deadline
検証環境
OS(ローカル): Windows 11 (23H2)
OS(EC2): Amazon Linux 2023
Blender: 4.2.7
Customer-Managed Fleet (CMF) とは
Customer-Managed Fleet (CMF) は、AWS Deadline Cloud において、ユーザー自身がコンピューティングリソースを管理するフリートタイプです。 CMF では、 EC2 インスタンスやオンプレミスのマシンなど、自分で用意したコンピューティングリソースをワーカーとして登録し、レンダリングジョブを処理させることができます。これにより、特定のハードウェア要件や既存のインフラストラクチャに合わせた柔軟なレンダリング環境を構築できます。
本記事では、ローカル環境に Windows 、ワーカーとしてのクラウド環境に Linux を利用する方法を解説します。 なおワーカーとして Linux を利用しているのには、 Windows OS のライセンス費用がかからないため低コストで機能実現できるという背景があります。
SMF と CMF の違い
特徴 | Service-Managed Fleet (SMF) | Customer-Managed Fleet (CMF) |
---|---|---|
リソース管理 | AWS が自動的に管理 | ユーザーが管理 |
スケーリング | 自動的にスケールアップ・ダウン | ユーザーが手動で設定・調整 |
インスタンスタイプ | 事前定義されたタイプから選択 | 任意の EC2 インスタンスタイプを選択可能 |
カスタマイズ性 | 限定的 | 高い(OS やソフトウェア構成を自由に設定可能) |
管理の手間 | 小さい | 大きい |
オンプレミス統合 | 不可 | 可能(オンプレミスマシンをワーカーとして追加可能) |
CMF を選ぶべき状況
以下のような状況では、SMF よりも CMF を選択することが適切です:
-
特定のハードウェア要件がある場合
- 特定の GPU タイプ(NVIDIA A100 など)が必要
- 大量のメモリや高速なストレージが必要なレンダリングタスク
-
既存のインフラストラクチャを活用したい場合
- すでに所有している EC2 インスタンスを利用したい
- オンプレミスのレンダリングマシンをクラウドと統合したい
-
高度なカスタマイズが必要な場合
- 特定のOSバージョンやカーネル設定が必要
- 特殊なドライバーやライブラリをインストールしたい
- 独自のセキュリティ設定を適用したい
CMF のセットアップ手順
CMF のセットアップ手順のアウトラインは以下のようになります。
- Deadline Cloud コンソールで設定を行う
- EC2 インスタンスを作成して環境を作成し、Deadline Cloud にワーカーとして登録する
- ローカル環境でサブミッターの設定を行う
本記事では第 1 回として、AWS Deadline Cloud コンソール上での設定手順を紹介します。 AWS Deadline Cloud コンソール のページで、Deadline Cloud の設定を行います。プロジェクトの単位である ファーム を作成し、ファーム下に キュー と フリート を作成します。 キュー は、レンダリングジョブの優先順位付けと順序管理を行う仕組みです。 フリート は、ワーカーの集合体を指します。
モニターの作成
AWS Deadline Cloud コンソール のページにいき、左上のハンバーガーメニューを開いて ダッシュボード
を選択します。 ※ トップページの Deadlline Cloud をセットアップ
は今回使用しません。
画面上部のバーの モニター設定に移動
を選択し、任意の名前を付けて作成します。
ファームの作成
AWS Deadline Cloud ダッシュボード の ファーム > Set up farm > スタンドアロンファームをセットアップ
を選択します。任意の名前を付けてファームを作成します。
アクセス管理 > グループを追加
を選択し、モニターを通してファームにアクセスできるユーザーを追加します。ユーザー/グループが未作成の場合は、 IAM アイデンティティセンター でユーザー/グループを作成してください。
Storage profiles > ストレージプロファイルを作成
を選択し、ストレージプロファイルを 2 つ作成します。サブミッター用の Windows 向けストレージプロファイル と、ワーカー用の Linux 向けストレージプロファイル をそれぞれ作成します。 パス名
は DeadlineCloud 、 ストレージタイプ
は Local 、 ファイルシステムの場所のパス
はそれぞれ下記のようにします。
ファイルシステムの場所のパス |
|
---|---|
Windows 向け | C:\mnt\deadline-data |
Linux 向け | /mnt/deadline-data |
他の項目はデフォルトのまま作成してかまいません。
フリートの作成
Fleets > フリートを作成
からフリートを作成します。任意の名前を設定し、フリートタイプ
に カスタマーマネージド 、ストレージプロファイル
に 先に設定したワーカー用の Linux 向けストレージプロファイル を設定します。
他の項目はデフォルトのまま作成してかまいません。
キューの作成
キュー > キューを作成
からキューを作成します。任意の名前を設定し、使用する S3 バケットを設定します。今回は S3 バケットを新しく作ります。すでにある S3 バケットを使用したい場合はそうしてもかまいません。 カスタマーマネージドフリート (CMF) との関連付けを有効にする
の項目では、 有効にする を選択します。
run-as ユーザー
では キュー設定ユーザー を選択し、 ユーザー設定として実行
項目では POSIX 認証情報の追加 を Active にして次の認証情報を追加します。これは、 この後の手順で作成するワーカーインスタンスにログインできるようにするための設定 です。
ユーザー名 |
グループ名 |
---|---|
deadline-job-user | deadline-job-users |
フリートを関連付ける - オプション
で、 先に作成したフリート を選択します。
Allowed storage profiles
に 先に作成したストレージプロファイル 2 つ を追加します。ファイルシステムの場所には DeadlineCloud を設定します。
デフォルトの Conda キュー環境
の チェックを外します 。自身で構築したワーカーでキューが正しく動作するよう、この後の手順で Conda キュー環境を設定します。
キューを作成したら、キューの詳細ページの Queue environments > Create queue environment
で Conda キュー環境を作成します。 YAML エディタを使用
を選択し、次の内容を入力します。なお、この YAML ファイルは こちらのページ を参考にしています。
parameterDefinitions:
- name: CondaPackages
type: STRING
description: >
This is a space-separated list of additional Conda packages to install.
Leave empty to use system-installed Blender 4.2.7 without creating a Conda environment.
default: ""
userInterface:
control: LINE_EDIT
label: Additional Conda Packages
- name: CondaChannels
type: STRING
description: >
This is a space-separated list of Conda channels from which to install
additional packages. Only used if CondaPackages is not empty.
default: "conda-forge defaults"
userInterface:
control: LINE_EDIT
label: Conda Channels
environment:
name: Blender
script:
actions:
onEnter:
command: "/opt/deadline/queue_environments/blender_env.sh"
args:
[
"{{Session.WorkingDirectory}}/.env",
"{{Param.CondaPackages}}",
"{{Param.CondaChannels}}",
"{{Env.File.OpenJDVarsStart}}",
"{{Env.File.OpenJDVarsCapture}}",
]
onExit:
command: "rm"
args: ["-rf", "{{Session.WorkingDirectory}}/.env"]
embeddedFiles:
- name: OpenJDVarsStart
filename: openjd-vars-start.py
type: TEXT
data: |
import json
import os
import sys
# Exclude the env var "_" as it has special meaning to shells
before = dict(os.environ)
if "_" in before:
del before["_"]
with open(sys.argv[1], "w", encoding="utf8") as f:
json.dump(before, f)
- name: OpenJDVarsCapture
filename: openjd-vars-capture.py
type: TEXT
data: |
import json
import os
import sys
# Get the snapshot from `openjd-vars-start.py`, and the current environment state.
with open(sys.argv[1], "r", encoding="utf8") as f:
before = json.load(f)
after = dict(os.environ)
# Exclude the env var "_" as it has special meaning to shells
if "_" in after:
del after["_"]
# Identify the modified and deleted environment variables
vars_to_put = {k: v for k, v in after.items() if v != before.get(k)}
vars_to_delete = {k for k in before if k not in after}
# Print the env var changes following the Open Job Description specification
for k, v in vars_to_put.items():
kv = json.dumps(f"{k}={v}", ensure_ascii=True)
print(f"openjd_env: {kv}")
for k in vars_to_delete:
print(f"openjd_unset_env: {k}")
補足: /opt/deadline/queue_environments/blender_env.sh について
YAML 内で指定されている blender_env.sh
スクリプトは下記のとおりです。これはワーカーの EC2 インスタンスで Blender 4.2.7 を実行するための環境を設定するカスタムスクリプトです。このスクリプトを作成するタイミングについてなど、詳しくは第 2 回以降の記事で解説予定です。
#!/bin/bash
set -euo pipefail
ENV_DIR="$1"
CONDA_PACKAGES="$2"
CONDA_CHANNELS="$3"
VARS_START_SCRIPT="$4"
VARS_CAPTURE_SCRIPT="$5"
echo "Setting up environment for Blender 4.2.7..."
# Check if we need to create a Conda environment
if [ -z "$CONDA_PACKAGES" ]; then
echo "Using system-installed Blender 4.2.7 without Conda environment."
export PATH="/usr/local/bin:/opt/blender-4.2.7:$PATH"
python "$VARS_START_SCRIPT" .vars
echo "Blender version:"
blender --version
exit 0
fi
# Create minimal environment for additional packages
echo "Creating Conda environment with additional packages..."
conda create --yes --quiet -p "$ENV_DIR" python=3.11
source $(conda info --base)/etc/profile.d/conda.sh
conda activate "$ENV_DIR"
# Install deadline-cloud-for-blender via pip
echo "Installing deadline-cloud-for-blender in Conda environment..."
pip install deadline-cloud-for-blender
# Make sure system Blender is in PATH
export PATH="/usr/local/bin:/opt/blender-4.2.7:$PATH"
# Install additional packages if specified
echo "Installing additional packages: $CONDA_PACKAGES"
CHANNEL_OPTS=""
for channel in $CONDA_CHANNELS; do
CHANNEL_OPTS="$CHANNEL_OPTS -c $channel"
done
conda install --yes --quiet $CHANNEL_OPTS $CONDA_PACKAGES || echo "Warning: Some packages could not be installed."
# Capture environment variables
python "$VARS_START_SCRIPT" .vars
python "$VARS_CAPTURE_SCRIPT" .vars
# Print information about the environment
conda info
which blender || echo "Warning: Blender not found in PATH"
blender --version || echo "Warning: Could not get Blender version"
他の項目はデフォルトのまま作成してかまいません。
AWS Deadline Cloud コンソールでの設定は、これで以上となります。
おわりに
本記事では、AWS Deadline Cloud を使用し Windows+Blender のクラウドレンダリングを実現する方法について、 AWS Deadline Cloud コンソール上での設定手順を紹介しました。次回以降の記事では 残りの下記手順についても解説していく予定です。
- EC2 インスタンスを作成して環境を作成し、Deadline Cloud にワーカーとして登録する
- ローカル環境でサブミッターの設定を行う
本シリーズの他の記事もぜひご覧ください。