このドキュメントでは、コンパクト プレースメント ポリシーを指定して、ジョブの VM 間のネットワーク レイテンシを短縮する方法について説明します。
1 つの zone 内で物理的に互いに近い VM ホストを持つことで、VM 間のネットワーク レイテンシを削減できます。このパフォーマンス上のメリットは、MPI ライブラリを使用して通信するタスクなどの密結合タスクを伴うジョブにおいて特に有効です。ジョブを作成するときに、コンパクト プレースメント ポリシーを指定することで、ジョブの VM を相互に近い場所に配置できます。それ以外の場合、デフォルトの VM 配置では通常、電源障害の影響を最小限に抑えるために、VM を複数のホストに分散します。
コンパクト プレースメント ポリシーの詳細については、「Compute Engine」ドキュメントのプレースメント ポリシーについてをご覧ください。
準備
- Batch を以前に使用したことがない場合は、Batch を使ってみるを確認し、プロジェクトとユーザーの前提条件を完了して Batch を有効にします。
-
ジョブの作成に必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。
-
プロジェクトのバッチジョブ編集者(
roles/batch.jobsEditor
) -
ジョブのサービス アカウントのサービス アカウント ユーザー(
roles/iam.serviceAccountUser
)。これは、デフォルトでは Compute Engine のデフォルトのサービス アカウントです。
ロールの付与の詳細については、アクセス権の管理をご覧ください。
-
プロジェクトのバッチジョブ編集者(
制限事項
バッチには、コンパクト プレースメント ポリシーの一般的な制限に加えて、次の制限があります。
- ジョブにコンパクト プレースメント ポリシーを指定すると、ジョブ VM のコンパクト プレースメント ポリシーを Batch が自動的に作成および削除します。ジョブに対して、既存のコンパクト プレースメント ポリシーを指定できます。。
- コンパクト プレースメント ポリシーに VM の数を指定することはできません。 ジョブのコンパクト プレースメント ポリシーは、ジョブが実行される VM の数に関係なく適用されます。
プレースメント ポリシーを使用するジョブを作成して実行する
ジョブでコンパクト プレースメント ポリシーを使用するように指定するには、gcloud CLI または Batch API を使用して、collocation
フィールドを COLLOCATED
に設定します。
gcloud
ジョブの構成の詳細を指定し、次の設定を行う JSON ファイルを作成し、
collocation
フィールドをCOLLOCATED
に設定します。たとえば、コンパクト プレースメント ポリシーを指定する基本的なスクリプト ジョブを作成するには、次の内容の JSON ファイルを作成します。
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from task ${BATCH_TASK_INDEX}" } } ] }, "taskCount": 3 } ], "allocationPolicy": { "placement": { "collocation": "COLLOCATED" } }, "logsPolicy": { "destination": "CLOUD_LOGGING" } }
ジョブを作成して実行するには、
gcloud batch jobs submit
コマンドを使用します:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
以下を置き換えます。
JOB_NAME
: ジョブの名前。LOCATION
: ジョブのロケーション。JSON_CONFIGURATION_FILE
: ジョブの構成の詳細を含む JSON ファイルへのパス。
API
collocation
フィールドを COLLOCATED
に設定するjobs.create
メソッドにPOST
リクエストを作成します。
たとえば、コンパクト プレースメント ポリシーを指定する基本的なスクリプト ジョブを作成するには、次のリクエストを作成します:
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello world from task ${BATCH_TASK_INDEX}"
}
}
]
},
"taskCount": 3
}
],
"allocationPolicy": {
"placement": {
"collocation": "COLLOCATED"
}
},
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
次のように置き換えます。
次のステップ
- ジョブの作成または実行に問題がある場合は、トラブルシューティングをご覧ください。
- ジョブとタスクを表示する。
- 別のジョブ作成オプションを学習する。