チュートリアル:Azure Batch を使用したシーンのレンダリングTutorial: Render a scene with Azure Batch

Azure Batch は、クラウド規模のレンダリング機能を従量課金ベースで提供します。Azure Batch provides cloud-scale rendering capabilities on a pay-per-use basis. Azure Batch は、Autodesk Maya、3ds Max、Arnold、V-Ray などのレンダリング アプリをサポートしています。Azure Batch supports rendering apps including Autodesk Maya, 3ds Max, Arnold, and V-Ray. このチュートリアルでは、Azure コマンド ライン インターフェイスを使用して Batch で小さいシーンをレンダリングする手順を紹介します。This tutorial shows you the steps to render a small scene with Batch using the Azure Command-Line Interface. 学習内容は次のとおりです。You learn how to:

  • Azure Storage にシーンをアップロードするUpload a scene to Azure storage
  • レンダリング用の Batch プールを作成するCreate a Batch pool for rendering
  • 単一フレーム シーンをレンダリングするRender a single-frame scene
  • プールをスケーリングしてマルチフレーム シーンをレンダリングするScale the pool, and render a multi-frame scene
  • レンダリングされる出力をダウンロードするDownload rendered output

このチュートリアルでは、Arnold レイ トレース レンダラーを使用して Batch で 3DS Max シーンをレンダリングします。In this tutorial, you render a 3ds Max scene with Batch using the Arnold ray-tracing renderer. Batch プールは、従量課金制ライセンスを提供しているプリインストール済のグラフィックス アプリケーションやレンダリング アプリケーションによって Microsoft Azure Marketplace イメージを使用します。The Batch pool uses an Azure Marketplace image with pre-installed graphics and rendering applications that provide pay-per-use licensing.

前提条件Prerequisites

Batch で従量課金制のレンダリング アプリケーションを使用するには、従量課金制サブスクリプションまたはその他の Azure 購入オプションが必要です。You need a pay-as-you-go subscription or other Azure purchase option to use rendering applications in Batch on a pay-per-use basis. 金融クレジットを提供する無料の Azure オファーを使用する場合、従量課金制ライセンスはサポートされません。Pay-per-use licensing isn't supported if you use a free Azure offer that provides a monetary credit.

このチュートリアル用のサンプル 3DS Max シーンは、サンプルの Bash スクリプトと JSON 構成ファイルと共に GitHub にあります。The sample 3ds Max scene for this tutorial is on GitHub, along with a sample Bash script and JSON configuration files. 3DS Max シーンは、Autodesk 3DS Max サンプル ファイルに含まれています The 3ds Max scene is from the Autodesk 3ds Max sample files. (Autodesk 3DS Max のサンプル ファイルは、Creative Commons Attribution-NonCommercial-Share Alike ライセンスで入手可能です。(Autodesk 3ds Max sample files are available under a Creative Commons Attribution-NonCommercial-Share Alike license. Copyright © Autodesk, Inc.)。Copyright © Autodesk, Inc.)

Azure Cloud Shell を開くOpen Azure Cloud Shell

Azure Cloud Shell は、Azure でホストされる対話型のシェル環境で、ブラウザーを介して使用されます。Azure Cloud Shell is an interactive shell environment hosted in Azure and used through your browse. Azure Cloud Shell では、bash または PowerShell のいずれかのシェルを使用して、Azure サービスで動作するさまざまなツールを実行できます。Azure Cloud Shell allows you to use either bash or PowerShell shells to run a variety of tools to work with Azure services. Azure Cloud Shell にはコマンドがプレインストールされており、ローカル環境に何もインストールしなくても、この記事の内容を実行できるようになっています。Azure Cloud Shell comes pre-installed with the commands to allow you to run the content of this article without having to install anything on your local environment.

この記事に含まれるコードを Azure Cloud Shell で実行するには、Cloud Shell セッションを開き、コード ブロック上の [コピー] ボタンを使ってコードをコピーし、Ctrl + Shift + V キー (Windows と Linux) または command + Shift + V キー (macOS) を押して Cloud Shell セッションに貼り付けます。To run any code contained in this article on Azure Cloud Shell, open a Cloud Shell session, use the Copy button on a code block to copy the code, and paste it into the Cloud Shell session with Ctrl+Shift+V on Windows and Linux, or Cmd+Shift+V on macOS. テキストを貼り付けても自動的には実行されません。コードを実行するには、Enter キーを押します。Pasted text is not automatically executed, so press Enter to run code.

Azure Cloud Shell は次の方法で起動できます。You can launch Azure Cloud Shell with:

コード ブロックの右上隅にある [使ってみる] を選択します。Select Try It in the upper-right corner of a code block. テキストが自動的に Cloud Shell にコピーされるわけでは__ありません__。This doesn't automatically copy text to Cloud Shell. Azure Cloud Shell の [使ってみる] の例
ブラウザーで shell.azure.com を開きます。Open shell.azure.com in your browser. Azure Cloud Shell の起動ボタンLaunch Azure Cloud Shell button
Azure Portal の右上隅にあるメニューの [Cloud Shell] ボタンを選択します。Select the Cloud Shell button on the menu in the upper-right corner of the Azure portal. Azure Portal の [Cloud Shell] ボタン

CLI をローカルにインストールして使用する場合、このチュートリアルでは、Azure CLI バージョン 2.0.20 以降を実行していることが要件です。If you choose to install and use the CLI locally, this tutorial requires that you are running the Azure CLI version 2.0.20 or later. バージョンを確認するには、az --version を実行します。Run az --version to find the version. インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。If you need to install or upgrade, see Install Azure CLI.

Batch アカウントを作成するCreate a Batch account

サブスクリプションにリソース グループ、Batch アカウント、リンクされているストレージ アカウントをまだ作成してない場合は作成します。If you haven't already, create a resource group, a Batch account, and a linked storage account in your subscription.

az group create コマンドでリソース グループを作成します。Create a resource group with the az group create command. 次の例では、myResourceGroup という名前のリソース グループを eastus2 に作成します。The following example creates a resource group named myResourceGroup in the eastus2 location.

az group create \
    --name myResourceGroup \
    --location eastus2

az storage account create コマンドを使用して、リソース グループ内に Azure ストレージ アカウントを作成します。Create an Azure Storage account in your resource group with the az storage account create command. このチュートリアルでは、ストレージ アカウントを使用して、入力の 3DS Max シーンとレンダリングされた出力を格納します。For this tutorial, you use the storage account to store an input 3ds Max scene and the rendered output.

az storage account create \
    --resource-group myResourceGroup \
    --name mystorageaccount \
    --location eastus2 \
    --sku Standard_LRS

az batch account create コマンドを使用して Batch アカウントを作成します。Create a Batch account with the az batch account create command. 次の例では、mybatchaccount という名前の Batch アカウントを myResourceGroup に作成し、作成したアカウントをリンクします。The following example creates a Batch account named mybatchaccount in myResourceGroup, and links the storage account you created.

az batch account create \
    --name mybatchaccount \
    --storage-account mystorageaccount \
    --resource-group myResourceGroup \
    --location eastus2

コンピューティング プールとジョブを作成および管理するには、Batch による認証が必要です。To create and manage compute pools and jobs, you need to authenticate with Batch. az batch account login コマンドを使用してアカウントにログインします。Log in to the account with the az batch account login command. ログインしたら、az batch コマンドでこのアカウントのコンテキストを使用します。After you log in, your az batch commands use this account context. 次の例では、Batch アカウントの名前とキーに基づいて、共有キー認証を使用します。The following example uses shared key authentication, based on the Batch account name and key. Batch は、個々のユーザーまたは自動アプリケーションを認証するために、Azure Active Directory による認証もサポートしています。Batch also supports authentication through Azure Active Directory, to authenticate individual users or an unattended application.

az batch account login \
    --name mybatchaccount \
    --resource-group myResourceGroup \
    --shared-key-auth

ストレージへのシーンのアップロードUpload a scene to storage

入力のシーンをストレージにアップロードするには、まず、ストレージ アカウントにアクセスして、BLOB 用にアップロード先コンテナーを作成する必要があります。To upload the input scene to storage, you first need to access the storage account and create a destination container for the blobs. Azure ストレージ アカウントにアクセスするには、AZURE_STORAGE_KEY 環境変数と AZURE_STORAGE_ACCOUNT 環境変数をエクスポートします。To access the Azure storage account, export the AZURE_STORAGE_KEY and AZURE_STORAGE_ACCOUNT environment variables. 最初の Bash シェル コマンドでは、az storage account keys list コマンドを使用して、最初のアカウント キーを取得します。The first Bash shell command uses the az storage account keys list command to get the first account key. これらの環境変数を設定した後、ストレージ コマンドはこのアカウントのコンテキストを使用します。After you set these environment variables, your storage commands use this account context.

export AZURE_STORAGE_KEY=$(az storage account keys list --account-name mystorageaccount --resource-group myResourceGroup -o tsv --query [0].value)

export AZURE_STORAGE_ACCOUNT=mystorageaccount

ここで、シーン ファイル用にストレージ アカウントに BLOB コンテナーを作成します。Now, create a blob container in the storage account for the scene files. 次の例では、az storage container create コマンドを使用して、パブリック読み取りアクセスを許可する scenefiles という名前の BLOB コンテナーを作成します。The following example uses the az storage container create command to create a blob container named scenefiles that allows public read access.

az storage container create \
    --public-access blob \
    --name scenefiles

シーン MotionBlur-Dragon-Flying.maxGitHub からローカルの作業ディレクトリにダウンロードします。Download the scene MotionBlur-Dragon-Flying.max from GitHub to a local working directory. 例: For example:

wget -O MotionBlur-DragonFlying.max https://github.com/Azure/azure-docs-cli-python-samples/raw/master/batch/render-scene/MotionBlur-DragonFlying.max

シーン ファイルをローカルの作業ディレクトリから BLOB コンテナーにアップロードします。Upload the scene file from your local working directory to the blob container. 次の例では、az storage blob upload-batch コマンドを使用します。これにより、複数のファイルをアップロードできます。The following example uses the az storage blob upload-batch command, which can upload multiple files:

az storage blob upload-batch \
    --destination scenefiles \
    --source ./

レンダリング プールの作成Create a rendering pool

az batch pool create コマンドを使用して、レンダリング用の Batch プールを作成します。Create a Batch pool for rendering using the az batch pool create command. この例では、JSON ファイルでプールの設定を指定します。In this example, you specify the pool settings in a JSON file. 現在のシェル内で、mypool.json という名前のファイルを作成し、次の内容をコピーして貼り付けます。Within your current shell, create a file name mypool.json, then copy and paste the following contents. すべてのテキストが正しくコピーされるようにしてください Be sure all the text copies correctly. (このファイルは GitHub からダウンロードできます)。(You can download the file from GitHub.)

{
  "id": "myrenderpool",
  "vmSize": "standard_d2_v2",
  "virtualMachineConfiguration": {
    "imageReference": {
      "publisher": "batch",
      "offer": "rendering-windows2016",
      "sku": "rendering",
      "version": "1.3.2"
    },
    "nodeAgentSKUId": "batch.node.windows amd64"
  },
  "targetDedicatedNodes": 0,
  "targetLowPriorityNodes": 1,
  "enableAutoScale": false,
  "applicationLicenses":[
         "3dsmax",
         "arnold"
      ],
  "enableInterNodeCommunication": false 
}

Batch では専用ノードと低優先度ノードがサポートされているため、ご利用のプールではそのいずれかまたは両方を使用できます。Batch supports dedicated nodes and low-priority nodes, and you can use either or both in your pools. 専用ノードは、プール用に予約されています。Dedicated nodes are reserved for your pool. 低優先度ノードは、Azure の VM の余剰容量から割引価格で提供されます。Low-priority nodes are offered at a reduced price from surplus VM capacity in Azure. 低優先度ノードは、Azure に十分な容量がない場合に使用できなくなります。Low-priority nodes become unavailable if Azure does not have enough capacity.

指定されたプールには、Batch Rendering サービス用のソフトウェアを搭載した Windows Server イメージを実行している 1 つの低優先度ノードが含まれています。The pool specified contains a single low-priority node running a Windows Server image with software for the Batch Rendering service. このプールには、3DS Max および Arnold を使用してレンダリングするためのライセンスが付与されています。This pool is licensed to render with 3ds Max and Arnold. 後の手順では、より多くのノードに合わせてプールをスケーリングします。In a later step, you scale the pool to a larger number of nodes.

JSON ファイルを az batch pool create コマンドに渡すことで、プールを作成します。Create the pool by passing the JSON file to the az batch pool create command:

az batch pool create \
    --json-file mypool.json

プールのプロビジョニングには数分かかります。It takes a few minutes to provision the pool. プールの状態を確認するには、az batch pool show コマンドを実行します。To see the status of the pool, run the az batch pool show command. 次のコマンドは、プールの割り当ての状態を取得します。The following command gets the allocation state of the pool:

az batch pool show \
    --pool-id myrenderpool \
    --query "allocationState"

プールの状態が変化している間にジョブとタスクを作成するには、次の手順を続行します。Continue the following steps to create a job and tasks while the pool state is changing. 割り当ての状態が steady となり、ノードが実行されていると、プールは完全にプロビジョニングされます。The pool is completely provisioned when the allocation state is steady and the nodes are running.

出力用 BLOB コンテナーの作成Create a blob container for output

このチュートリアルの例では、レンダリング ジョブの各タスクで出力ファイルが作成されます。In the examples in this tutorial, every task in the rendering job creates an output file. ジョブのスケジュールを設定する前に、出力ファイルの保存先として BLOB コンテナーをストレージ アカウントに作成します。Before scheduling the job, create a blob container in your storage account as the destination for the output files. 次の例では、az storage container create コマンドを使用して、パブリック読み取りアクセスを持つ job-myrenderjob コンテナーを作成します。The following example uses the az storage container create command to create the job-myrenderjob container with public read access.

az storage container create \
    --public-access blob \
    --name job-myrenderjob

コンテナーに出力ファイルを書き込むために、Batch は Shared Access Signature (SAS) トークンを使用する必要があります。To write output files to the container, Batch needs to use a Shared Access Signature (SAS) token. az storage account generate-sas コマンドを使用してトークンを作成します。Create the token with the az storage account generate-sas command. この例では、このアカウントの BLOB コンテナーに書き込むトークンを作成します。このトークンの有効期限は 2018 年 11 月 15 日に切れます。This example creates a token to write to any blob container in the account, and the token expires on November 15, 2018:

az storage account generate-sas \
    --permissions w \
    --resource-types co \
    --services b \
    --expiry 2019-11-15

このコマンドによって返されたトークンを書き留めておきます。これは次のようになります。Take note of the token returned by the command, which looks similar to the following. このトークンは、後の手順で使用します。You use this token in a later step.

se=2018-11-15&sp=rw&sv=2017-04-17&ss=b&srt=co&sig=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

単一フレーム シーンのレンダリングRender a single-frame scene

ジョブを作成するCreate a job

az batch job create コマンドを使用して、プールで実行するレンダリング ジョブを作成します。Create a rendering job to run on the pool by using the az batch job create command. 最初、ジョブにはタスクがありません。Initially the job has no tasks.

az batch job create \
    --id myrenderjob \
    --pool-id myrenderpool

タスクを作成します。Create a task

az batch task create コマンドを使用して、ジョブにレンダリング タスクを作成します。Use the az batch task create command to create a rendering task in the job. この例では、JSON ファイルでタスクの設定を指定します。In this example, you specify the task settings in a JSON file. 現在のシェル内で、myrendertask.json という名前のファイルを作成し、次の内容をコピーして貼り付けます。Within your current shell, create a file named myrendertask.json, then copy and paste the following contents. すべてのテキストが正しくコピーされるようにしてください Be sure all the text copies correctly. (このファイルは GitHub からダウンロードできます)。(You can download the file from GitHub.)

このタスクでは、3DS Max コマンドを指定して、単一フレームの MotionBlur-DragonFlying.max シーンをレンダリングします。The task specifies a 3ds Max command to render a single frame of the scene MotionBlur-DragonFlying.max.

JSON ファイルの blobSource 要素と containerURL 要素を、ストレージ アカウントと SAS トークンの名前が含まれるように変更します。Modify the blobSource and containerURL elements in the JSON file so that they include the name of your storage account and your SAS token.

ヒント

containerURL の末尾には SAS トークンが使用され、次のようになります。Your containerURL ends with your SAS token and is similar to:

https://mystorageaccount.blob.core.windows.net/job-myrenderjob/$TaskOutput?se=2018-11-15&sp=rw&sv=2017-04-17&ss=b&srt=co&sig=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
{
  "id": "myrendertask",
  "commandLine": "cmd /c \"%3DSMAX_2018%3dsmaxcmdio.exe -secure off -v:5 -rfw:0 -start:1 -end:1 -outputName:\"dragon.jpg\" -w 400 -h 300 MotionBlur-DragonFlying.max\"",
  "resourceFiles": [
    {
        "blobSource": "https://mystorageaccount.blob.core.windows.net/scenefiles/MotionBlur-DragonFlying.max",
        "filePath": "MotionBlur-DragonFlying.max"
    }
  ],
    "outputFiles": [
        {
            "filePattern": "dragon*.jpg",
            "destination": {
                "container": {
                    "containerUrl": "https://mystorageaccount.blob.core.windows.net/job-myrenderjob/myrendertask/$TaskOutput?Add_Your_SAS_Token_Here"
                }
            },
            "uploadOptions": {
                "uploadCondition": "TaskSuccess"
            }
        }
    ],
  "userIdentity": {
    "autoUser": {
      "scope": "task",
      "elevationLevel": "nonAdmin"
    }
  }
}

次のコマンドを使用してジョブにタスクを追加します。Add the task to the job with the following command:

az batch task create \
    --job-id myrenderjob \
    --json-file myrendertask.json

Batch によってタスクのスケジュールが設定され、プール内のノードが使用可能になるとすぐにタスクが実行されます。Batch schedules the task, and the task runs as soon as a node in the pool is available.

タスク出力の表示View task output

タスクの実行には数分かかります。The task takes a few minutes to run. az batch task show コマンドを使用して、タスクの詳細を表示します。Use the az batch task show command to view details about the task.

az batch task show \
    --job-id myrenderjob \
    --task-id myrendertask

このタスクによって、コンピューティング ノードに dragon0001.jpg が生成され、ストレージ アカウント内の job-myrenderjob コンテナーにアップロードされます。The task generates dragon0001.jpg on the compute node and uploads it to the job-myrenderjob container in your storage account. 出力を表示するには、az storage blob download コマンドを使用して、ファイルをストレージからローカル コンピューターにダウンロードします。To view the output, download the file from storage to your local computer using the az storage blob download command.

az storage blob download \
    --container-name job-myrenderjob \
    --file dragon.jpg \
    --name dragon0001.jpg

コンピューター上の dragon.jpg を開きます。Open dragon.jpg on your computer. レンダリングされたイメージは次のようになります。The rendered image looks similar to the following:

レンダリングされたドラゴンのフレーム 1

プールのスケーリングScale the pool

ここで、複数のフレームを使用して、より大きなレンダリング ジョブに備えるようにプールを変更します。Now modify the pool to prepare for a larger rendering job, with multiple frames. Batch には、タスク要求の変更に応じてノードを追加または削除する自動スケールなど、コンピューティング リソースをスケーリングする方法は多数あります。Batch provides a number of ways to scale the compute resources, including autoscaling which adds or removes nodes as task demands change. この基本的な例では、az batch pool resize コマンドを使用して、プール内の低優先度ノードの数を 6 に引き上げます。For this basic example, use the az batch pool resize command to increase the number of low-priority nodes in the pool to 6:

az batch pool resize --pool-id myrenderpool --target-dedicated-nodes 0 --target-low-priority-nodes 6

プールのサイズ変更には数分かかります。The pool takes a few minutes to resize. その処理の実行中に、既存のレンダリング ジョブで次に実行するタスクを設定します。While that process takes place, set up the next tasks to run in the existing rendering job.

マルチフレーム シーンのレンダリングRender a multiframe scene

単一フレームの例と同様、az batch task create コマンドを使用して、myrenderjob という名前のジョブにレンダリング タスクを作成します。As in the single-frame example, use the az batch task create command to create rendering tasks in the job named myrenderjob. ここでは、myrendertask_multi.json という JSON ファイルでタスクの設定を指定します Here, specify the task settings in a JSON file called myrendertask_multi.json. (このファイルは GitHub からダウンロードできます)。6 つのタスクそれぞれで、Arnold コマンド ラインを指定して、3DS Max シーン MotionBlur-DragonFlying.max の 1 つのフレームをレンダリングします。(You can download the file from GitHub.) Each of the six tasks specifies an Arnold command line to render one frame of the 3ds Max scene MotionBlur-DragonFlying.max.

現在のシェルに myrendertask_multi.json という名前のファイルを作成し、ダウンロードしたファイルから内容をコピーして貼り付けます。Create a file in your current shell named myrendertask_multi.json, and copy and paste the contents from the downloaded file. JSON ファイルの blobSource 要素と containerURL 要素を変更して、ストレージ アカウントと SAS トークンの名前を含めます。Modify the blobSource and containerURL elements in the JSON file to include the name of your storage account and your SAS token. 6 つのタスクそれぞれで設定を変更するようにしてください。Be sure to change the settings for each of the six tasks. ファイルを保存し、次のコマンドを実行してタスクをキューに登録します。Save the file, and run the following command to queue the tasks:

az batch task create --job-id myrenderjob --json-file myrendertask_multi.json

タスク出力の表示View task output

タスクの実行には数分かかります。The task takes a few minutes to run. az batch task list コマンドを使用して、タスクの状態を表示します。Use the az batch task list command to view the state of the tasks. 例: For example:

az batch task list \
    --job-id myrenderjob \
    --output table

az batch task show コマンドを使用して、個々のタスクの詳細を表示します。Use the az batch task show command to view details about individual tasks. 例: For example:

az batch task show \
    --job-id myrenderjob \
    --task-id mymultitask1

このタスクにより、dragon0002.jpg - dragon0007.jpg という名前の出力ファイルがコンピューティング ノード上に生成され、ストレージ アカウント内の job-myrenderjob コンテナーにアップロードされます。The tasks generate output files named dragon0002.jpg - dragon0007.jpg on the compute nodes and upload them to the job-myrenderjob container in your storage account. 出力を表示するには、az storage blob download-batch コマンドを使用して、ファイルをローカル コンピューター上のフォルダーにダウンロードします。To view the output, download the files to a folder on your local computer using the az storage blob download-batch command. 例: For example:

az storage blob download-batch \
    --source job-myrenderjob \
    --destination .

コンピューター上のファイルのいずれかを開きます。Open one of the files on your computer. レンダリングされたフレーム 6 は次のようになります。Rendered frame 6 looks similar to the following:

レンダリングされたドラゴンのフレーム 6

リソースのクリーンアップClean up resources

必要がなくなったら、az group delete コマンドを使用して、リソース グループ、Batch アカウント、プール、およびすべての関連リソースを削除できます。When no longer needed, you can use the az group delete command to remove the resource group, Batch account, pools, and all related resources. 次のように、リソースを削除します。Delete the resources as follows:

az group delete --name myResourceGroup

次の手順Next steps

このチュートリアルで学習した内容は次のとおりです。In this tutorial, you learned about how to:

  • Azure Storage にシーンをアップロードするUpload scenes to Azure storage
  • レンダリング用の Batch プールを作成するCreate a Batch pool for rendering
  • Arnold で単一フレーム シーンをレンダリングするRender a single-frame scene with Arnold
  • プールをスケーリングしてマルチフレーム シーンをレンダリングするScale the pool, and render a multi-frame scene
  • レンダリングされる出力をダウンロードするDownload rendered output

クラウド規模のレンダリングの詳細については、Batch Rendering サービスのオプションを確認してください。To learn more about cloud-scale rendering, see the options for the Batch Rendering service.