このドキュメントでは、コンパクト プレースメント ポリシーを指定して、ジョブの VM 間のネットワーク レイテンシを短縮する方法について説明します。
VM ホストをゾーン内で物理的に近づけることで、VM 間のネットワーク レイテンシを短縮できます。このパフォーマンスは、MPI ライブラリを使用して通信するタスクなどの密結合なタスクを持つジョブで特に役立ちます。コンパクト プレースメント ポリシーを指定すると、ジョブの作成時に、ジョブの VM を相互に近い場所に配置できます。それ以外の場合は、通常、デフォルトの VM 配置は、電源障害の影響を最小限に抑えるために別々のホストに VM を分散します。
コンパクト プレースメント ポリシーの詳細については、Compute Engine ドキュメントのプレースメント ポリシーについてをご覧ください。
準備
- Batch を以前に使用したことがなかった場合は、Batch を使ってみるを確認し、プロジェクトとユーザーの前提条件を完了して Batch を有効にします。
-
ジョブの作成に必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。
-
プロジェクトのバッチジョブ編集者(
roles/batch.jobsEditor
) -
ジョブのサービス アカウントのサービス アカウント ユーザー(
roles/iam.serviceAccountUser
)。これは、デフォルトでは Compute Engine のデフォルトのサービス アカウントです。
ロールの付与の詳細については、アクセスの管理をご覧ください。
-
プロジェクトのバッチジョブ編集者(
制限事項
コンパクト プレースメント ポリシーの一般的な制限事項に加えて、Batch には次の制限事項もあります。
- ジョブにコンパクト プレースメント ポリシーを指定すると、ジョブ 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"
}
}
次のように置き換えます。
次のステップ
- ジョブの作成または実行に問題がある場合は、トラブルシューティングをご覧ください。
- ジョブとタスクを表示する。
- 別のジョブ作成オプションを学習する。