"AzureBatch" (バッチ計算プロバイダ)

詳細

Azure Batchは,クラウドベースのバッチ計算サービスであり,Microsoft Azureプラットフォーム上で実行されている,管理されたバーチャルマシンノードのプール間でコンテナ化されたジョブをスケジュールに入れる.
Wolfram言語で"AzureBatch"のバッチ計算プロバイダを使えるように設定するには,Azure Batchのバッチ計算プロバイダを設定するのワークフローに記載の指示に従われたい.
"AzureBatch"のバッチ計算プロバイダは,それぞれのジョブに必要なvCPU数に基づいてジョブをプールノードにパックする.複数のジョブは,各ジョブを専用のコンテナで実行することで,単一ノードで同時に実行することが可能である.
"AzureBatch"のバッチ計算プロバイダは,ジョブを実行するAzure BatchアカウントにリンクされているAzure Blob Storageアカウント内のジョブの入出力データとコンソールログを保存する.ファイルは,MicrosoftのBatchファイル規則の標準に従って,Azure Blob Storageコンテナ内に整理される.
"AzureBatch"のバッチ計算プロバイダは,Linuxベースのジョブのみをサポートする.

環境特性

以下の特性が"AzureBatch" プロバイダのRemoteBatchSubmissionEnvironmentオブジェクトでサポートされる.
  • "PoolID"(必須)ジョブが送信されるAzure BatchのプールのID
  • 有効なRemoteBatchSubmissionEnvironmentオブジェクトを構築するためには,"PoolID"の特性が必要である.
    最初にRemoteBatchSubmissionEnvironment["AzureBatch",]を評価する際には,Azure BatchとAzure Blob StorageのサービスのAPIの認証情報を収集するためにダイアログが表示される.ダイアログ内の"Save Connection"にチェックマークが入っていると,供給された認証情報が永続的に保存され,将来のセッションで自動的に使われる.
    保存された認証情報を無視して,認証ダイアログを再度表示するためには,環境設定"ServiceObject""New"を指定する. »
    Azure Batchのバッチ計算プロバイダを設定するのワークフローに,自動化されたAzure Resource Managerテンプレートを使って,自分のMicrosoft Azureサブスクリプションに必要な全環境リソースを作成する方法が記載されている.

    ジョブ設定

    "AzureBatch"のプロバイダを使う場合に,以下の設定がRemoteProviderSettingsオプションでサポートされる.
  • "ContainerImage"ジョブコンテナに使うイメージの名前またはURL
    "JobPriority"0ジョブの優先順位,-1から+1まで
    "VCPUCount"1vCPUの数(整数) »
  • Azure Batchのプールは,各"job"に1つあるいは複数の"tasks"を含む形で,"jobs"を実行する.RemoteBatchSubmitRemoteBatchMapSubmitに使用される用語は,以下のようにこの構造に対応している.
  • RemoteBatchSubmitのジョブ("single"ジョブ)単一のタスクを含むAzure Batchジョブ
    RemoteBatchMapSubmitの配列ジョブ複数のタスクを含むAzure Batchジョブ
    RemoteBatchMapSubmitの配列の子ジョブAzure Batchジョブ内のタスク
  • Azure Batchは,各タスクに必要な「スロット」 に基づいて,タスクをプールノードにパックする.各タスクを専用のコンテナ内で実行することによって,複数のタスクを同時に実行することができる.
    "AzureBatch"のバッチ計算プロバイダは,各タスクに必要なスロットを"VCPUCount"設定に等しく設定する.プールレベルの「ノードごとのタスクスロット」の設定は,プールのノードVMサイズ内のvCPUの数に等しく設定されているものと想定する.この詳細は,Microsoftの並列タスク実行プールのノードサイズについてのドキュメントを参照されたい.
    "VCPUCount"設定の値は,ジョブのスケジューリングと,ジョブコンテナ内の$ProcessorCount$DefaultKernelsの設定のみに使われる.CPUのスケジューリングや,リモートカーネルプロセスで使用可能なCPUリソースの量には影響しない. »
    "JobPriority"設定の値は,-1(優先度が最も低い)から+1(優先度が最も高い)までである.与えられたプール内で,より優先度の高いジョブがより優先度が低いジョブの前にスケジュールされる.詳細は,Microsoftのジョブの優先順位についてのドキュメントを参照されたい.
    "ContainerImage"設定の値は,Docker対応のイメージ参照文字列である.GPUベースのジョブを実行していない場合には,"wolframresearch/wolframengine:cuda-azurebatch""wolframresearch/wolframengine:latest"に変更することで,プールノードにダウンロードされるイメージサイズを減少させることができる.
    "wolframresearch/wolframengine:cuda-azurebatch"イメージが,GPUドライバの非互換性により,最新のWolfram Engineのバージョンに遅れを取ることがある.常に最新のWolfram EngineとWolfram言語のバージョンを使うためには, "wolframresearch/wolframengine:latest"イメージを選ぶ.

    ジョブの状態

    "AzureBatch"プロバイダを使っているときには, "Single"ジョブあるいは"ArrayChild"ジョブの"JobStatus"のジョブ特性の値として,以下の値が可能である.典型的なジョブが渡される順にリストされている.
  • "Active"ジョブタスクがキューに入れられていて実行可能であるが,計算ノードにはまだスケジュールされていない
    "Running"ジョブタスクが計算ノード上で実行中である
    "Succeeded"ジョブタスクの実行に成功し,出力がアップロードされた
    "Failed"ジョブタスクの実行に失敗した
  • "Running"状態のジョブは,入力ファイルをダウンロードしている,ジョブコードを評価している,あるいは出力データをアップロードしている過程にあるかもしれない.
    以下は,"AzureBatch"プロバイダを使っているときの,"Array"ジョブの"JobStatus"のジョブ特性の典型的な値である.
  • "Active"配列ジョブは,子ジョブタスクを実行している,あるいは子ジョブタスクが送信されるのを待っている
    "Completed"すべての子ジョブタスクが完了した,あるいは終了された
  • 詳細は,Microsoftのタスクの状態およびジョブの状態についてのドキュメントを参照されたい.

    ジョブ特性

    "AzureBatch"プロバイダを使っているときには,RemoteBatchJobObjectがサポートする標準特性に加えて,"Single"タイプのジョブオブジェクトから以下の特性が使用できる.
  • "JobExitCode"ジョブコンテナ内のカーネルによって返される終了コード
    "JobLog"ジョブコンテナからの標準出力コンソールログ
    "JobStandardErrorLog"ジョブコンテナからの標準エラーコンソールログ
    "JobStatusReason"ジョブが現在の状態にある理由を説明する文字列
    "ProviderJobID"Azure Batch内のジョブに対する一意的な識別子
    "ProviderTaskID"Azure Batch内のジョブタスクに対する一意的な識別子
  • "AzureBatch"プロバイダを使っているときには,RemoteBatchJobObjectがサポートする標準特性に加えて,"Array"タイプのジョブオブジェクトから以下の特性が使用できる.
  • "ChildJobExitCodes"各配列の子ジョブの"JobExitCode"特性
    "ChildJobStatusReasons"各配列の子ジョブの"JobStatusReason"特性
    "JobStatusReason"配列ジョブが現在の状態にある理由を説明する文字列
    "ProviderFirstTaskID"最初の子ジョブの順次番号の識別子
    "ProviderJobID"Azure Batch内の配列ジョブに対する一意的な識別子
  • "AzureBatch"プロバイダを使っているときには,RemoteBatchJobObjectがサポートする標準特性に加えて,"ArrayChild"タイプのジョブオブジェクトから以下の特性が使用できる.
  • "JobExitCode"子のジョブコンテナ内のカーネルによって返される終了コード
    "JobLog"子のジョブコンテナからの標準出力コンソールログ
    "JobStandardErrorLog"子のジョブコンテナからの標準エラーコンソールログ
    "JobStatusReason"
  • ジョブが現在の状態にある理由を説明する文字列
  • "ProviderJobID"Azure Batch内の親の配列ジョブに対する一意的な識別子
    "ProviderTaskID"Azure Batch内の子ジョブタスクに対する一意的な識別子
  • "JobExitCode"特性の可能な値のいくつかについて,その意味がExitのドキュメントページにリストさている. 1539950006
    "JobStatusReason"特性の値は,Azure Batchが提供する情報に基づいており,ジョブの現在の状態によっては,与えられたジョブにない場合もある.
    Azure Batchは,タスクのプロセスの標準出力と標準エラーのストリームを別々に保存するので,"JobLog"特性と "JobStandardErrorLog"特性に分かれている.ほとんどの場合,"JobStandardErrorLog"特性は空である.
    "JobLog"特性と"JobStandardErrorLog"特性の値は,実行中のジョブの計算ノードおよび完了したジョブのAzure Blob Storageから通常取り出される.
    "ProviderJobID"特性と"ProviderTaskID"/"ProviderFirstTaskID"特性の値は,それぞれAzure Batch内のジョブとタスクのIDに対応している.
    シングルジョブのタスクIDは通常,文字列"10000000"である.配列の子ジョブのタスクIDは通常,"10000001"で始まる順次番号文字列である.
    保存されたジョブの出力データとログは,手動で削除される,あるいは保存アカウントのライフサイクル管理ポリシーに基づいて自動的に有効期限が切れるまで,Azure Blob Storage内に残される.
    ジョブの式の戻り値が"EvaluationResult"特性で使用可能であるのに加えて,ジョブコンテナの作業ディレクトリ内のディレクトリ./JobOutput/にエキスポートされた追加の出力ファイルがMicrosoftのBatchファイル規則の標準に従って,ジョブのAzure Blob Storageコンテナにアップロードされる.しかし,そのような追加の出力ファイルは,Wolfram言語内からダウンロードすることはできない.

    例題

    すべて開くすべて閉じる

      (2)

    "AzureBatch"のバッチ計算プロバイダを,Azure Batchのバッチ計算プロバイダを設定するのワークフローに説明されるように設定してから,"AzureBatch"RemoteBatchSubmissionEnvironmentオブジェクトを作成する:

    ジョブの状態についてのクエリを行う:

    ジョブが完了してから,もう一度ジョブの状態についてのクエリを行う:

    ジョブの出力をダウンロードする:

    GPU計算を使って事前訓練されたニューラルネットワークで推論を行うAzure Batchに,配列ジョブを送信する:

    配列ジョブの出力をダウンロードする:

    ジョブ設定  (1)

    "VCPUCount"  (1)

    Azure Batchに,送信されたジョブを少なくとも4個のvCPUが使用できるノードにスケジュールするように指示する:

    ジョブ特性  (2)

    "Single"ジョブ  (1)

    RemoteBatchSubmitを使ってAzure Batchにバッチジョブを送信する:

    ジョブの状態についてのクエリを行い,コードを終了する:

    ジョブコンテナからコンソール出力を取得する:

    "Array"および"ArrayChild"のジョブ  (1)

    RemoteBatchMapSubmitを使ってAzure Batchに配列ジョブを送信する:

    それぞれの子ジョブの状態についてクエリを行う:

    最初の子ジョブを表すRemoteBatchJobObject式を得る:

    子ジョブの状態についてクエリを行い,コードを終了する:

    子のジョブコンテナからコンソール出力を得る:

    特性と関係  (1)

    ジョブがRemoteBatchJobAbortで終了された場合には,"JobStatusReason"特性の値は,終了リクエストがWolfram言語から出されたことを示す:

    考えられる問題  (1)

    Azure Batchの認証ダイアログ内の"Save Connection"にチェックマークがもとから入っていた場合には,供給された認証情報が永続的に保存され,将来のセッションで自動的に使用される.保存された認証情報を無視して,認証ダイアログが再度表示されるようにするためには,環境特性を"ServiceObject""New"に指定する: