コンパクト プレースメント ポリシーを使用してレイテンシを短縮する

このドキュメントでは、コンパクト プレースメント ポリシーを指定して、ジョブの VM 間のネットワーク レイテンシを短縮する方法について説明します。

1 つの zone 内で物理的に互いに近い VM ホストを持つことで、VM 間のネットワーク レイテンシを削減できます。このパフォーマンス上のメリットは、MPI ライブラリを使用して通信するタスクなどの密結合タスクを伴うジョブにおいて特に有効です。ジョブを作成するときに、コンパクト プレースメント ポリシーを指定することで、ジョブの VM を相互に近い場所に配置できます。それ以外の場合、デフォルトの VM 配置では通常、電源障害の影響を最小限に抑えるために、VM を複数のホストに分散します。

コンパクト プレースメント ポリシーの詳細については、「Compute Engine」ドキュメントのプレースメント ポリシーについてをご覧ください。

準備

制限事項

バッチには、コンパクト プレースメント ポリシーの一般的な制限に加えて、次の制限があります。

  • ジョブにコンパクト プレースメント ポリシーを指定すると、ジョブ VM のコンパクト プレースメント ポリシーを Batch が自動的に作成および削除します。ジョブに対して、既存のコンパクト プレースメント ポリシーを指定できます。。
  • コンパクト プレースメント ポリシーに VM の数を指定することはできません。 ジョブのコンパクト プレースメント ポリシーは、ジョブが実行される VM の数に関係なく適用されます。

プレースメント ポリシーを使用するジョブを作成して実行する

ジョブでコンパクト プレースメント ポリシーを使用するように指定するには、gcloud CLI または Batch API を使用して、collocation フィールドCOLLOCATED に設定します。

gcloud

  1. ジョブの構成の詳細を指定し、次の設定を行う 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"
      }
    }
    
  2. ジョブを作成して実行するには、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"
  }
}

次のように置き換えます。

次のステップ