建立及執行使用 TPU 的工作

本文說明如何建立及執行批次工作,並使用具備 Tensor Processing Unit (TPU) 的虛擬機器 (VM) 執行個體。TPU 是 Google 開發的客製化特殊應用積體電路 (ASIC),專門用來加速機器學習 (ML) 和人工智慧 (AI) 工作負載。建立批次工作時,您可以視需要指定 TPU 機型,加速容器化或指令碼型 AI 和機器學習推論、評估、微調和訓練工作負載。

如要進一步瞭解 TPU,請參閱 Compute Engine 說明文件中的「關於 Google Cloud上的 TPU」和「TPU 機型」。或者,您也可以改用 GPU,加快資料處理、AI 和機器學習工作負載。

事前準備

  1. 如果您從未使用過 Batch,請參閱「開始使用 Batch」,並完成專案和使用者的必要條件,啟用 Batch。
  2. 如要取得建立工作所需的權限,請要求管理員授予您下列 IAM 角色:

    如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

    您或許也能透過自訂角色或其他預先定義的角色,取得必要權限。

限制

如果工作使用 TPU,除了 Compute Engine 的 TPU 限制外,還須遵守下列所有限制。

  • 僅限單主機 TPU 配量:Batch 僅支援獨立 TPU VM,稱為單主機 TPU 配量。不支援多主機 TPU 配量,每個配量都由多個互連的 VM 組成。

    工作可以在一或多個單主機 TPU 配量上執行。舉例來說,如果工作將 taskCount 設為 4,並將 taskCountPerNode 設為 1,則執行工作的 VM 數量為 4 個以下。與多主機 TPU slice 不同,單一主機 TPU slice 各自做為獨立 VM 運作,不提供晶片間互連 (ICI) 網路,無法進行高頻寬、低延遲的通訊。

    如要進一步瞭解單一主機和多主機 TPU 切片,請參閱 Compute Engine 說明文件。

  • 支援的 TPU 版本和機型:Batch 僅支援下列 TPU 版本和機型的單一主機 TPU 配量 (獨立 TPU VM):

    • TPU7x (Ironwood):tpu7x-standard-4t
    • v6e (Trillium):ct6e-standard-1t、ct6e-standard-4t 和 ct6e-standard-8t

    • v5p:ct5p-hightpu-4t

    如要進一步瞭解各 TPU 機型 (例如支援的磁碟),請參閱 Compute Engine 說明文件中的「TPU 機型」。

  • 支援的消耗選項:Batch 不支援使用 TPU 的工作採用彈性啟動型 VM (FLEX_START 佈建模式)。除了彈性啟動型 VM 之外,您也可以根據 Compute Engine 說明文件中的「依 TPU 版本區分的用量選項可用性」,指定工作 TPU 版本支援的任何用量選項。

  • 必須指定單一可用區位置:建立使用 TPU 的工作時,必須將工作限制在特定可用區,方法是將工作的允許位置 (allowedLocations[] 欄位) 設為包含 TPU 版本或預留項目 (如適用) 的可用區。

  • 不支援的功能:使用 TPU 的工作不支援下列功能:

建立使用 TPU 的工作

如要建立使用 TPU 的工作,請按照下列步驟操作:

  1. 規劃使用 TPU 的工作設定。
  2. 使用您指定的設定建立工作。如需建立使用 TPU 的工作範例,請參閱本文的「建立使用 TPU 的工作」一節。

規劃使用 TPU 的工作設定

建立使用 TPU 的工作前,請務必完成下列事項:

  1. 選擇 TPU 版本:選取適合工作負載的 TPU 版本。如需依工作負載類型列出的 TPU 版本清單,請參閱「依工作負載類型推薦的 TPU 版本」。

    請務必選取其中一個支援的 TPU 版本。

  2. 選擇 TPU 使用模式:根據工作負載、時間長度和成本需求,選擇最合適的使用模式。請務必選取其中一個支援的用量方案。下表匯總了各項使用選項的用途和工作需求。

    用量方案和工作需求

    預留項目繫結 (日曆模式的未來預留項目或容量區塊的未來預留項目)

    • 用途:如果工作需要高度確保特定時間範圍內的 TPU 資源可用性,建議使用取決於預留項目的用量方案。在 Compute Engine 中,這些功能稱為日曆模式的未來預留項目 (1 到 90 天) 和容量區塊的未來預留項目 (1 年以上)。

    • 詳細資料:建立工作前,您必須先取得或找出所選 TPU 版本和 RESERVATION_BOUND 佈建模式的預留項目。預留項目建立後,就會產生指定 VM 的費用,價格與執行 VM 相同,直到您刪除預留項目為止。使用預留項目的 VM 不會產生額外費用,但無論是否使用預留項目,都會產生費用。

      詳情請參閱 Compute Engine 說明文件中的「選擇預留項目類型」。

    如果工作符合下列所有條件,Batch 會使用預留項目繫結的預留項目:

    • 將 provisioningModel 欄位設為 RESERVATION_BOUND。
    • 明確指定相容的預留項目。將 reservation 欄位設為簡稱 (如果預留項目位於相同專案和可用區),或預留項目、預留項目區塊或預留項目子區塊的完整資源路徑。

    以量計價

    • 用途:隨選模式可快速、簡單地試用,因此是大多數工作的預設消耗選項。不過,如果有其他更符合優先順序的消費選項,或您經常遇到資源取得問題,則不建議使用隨選模式。

    • 詳細資料:隨選通常是存取 Compute Engine VM 的預設方式。隨選模式可讓您在提出要求時存取資源 (如有)。在工作完成或達到執行時間限制之前,系統不會刪除資源。

    根據預設,Batch 會使用隨選資源執行大部分工作。如要確保工作使用隨選資源,請完成下列所有操作:

    • 將 provisioningModel 欄位設為 STANDARD。
    • 避免使用預留項目。如要防止工作自動使用相容的預留項目,請將 reservation 欄位設為 NO_RESERVATION。詳情請參閱「建立及執行無法使用預留 VM 的工作」。

    Spot VM

    • 用途:建議您使用 Spot VM 降低容錯工作負載的成本。

    • 詳細資料:如果建立使用 Spot VM 的工作要求獲得滿足,VM 會按照 Spot VM 定價收費,這類價格可能經常變動,且可能提供最大折扣,最多可享隨選價格 91% 的折扣。不過,Spot VM 不一定隨時可用,且可能隨時遭到先占。

      進一步瞭解 Spot VM 和使用 Spot VM 的工作建議。

    Batch 會將 Spot VM 用於符合下列所有條件的工作:

    • 將 provisioningModel 欄位設為 SPOT。
    • (選用) 防止預留項目用量。Spot VM 無法與預留項目搭配使用。具體來說,工作可以選擇將 reservation 欄位設為 NO_RESERVATION。詳情請參閱「建立及執行無法使用預留 VM 的工作」。

  3. 選取所選 TPU 可用的可用區:如要使用 TPU 版本,工作的 allowedLocations[] 欄位必須設為包含所選 TPU 的可用區,如下所示:

    • 如果您選擇使用預留項目的消耗選項,則必須使用預留項目所在的可用區。
    • 否則,請根據 TPU 供應情形,選取包含 TPU 版本的可用區。

    無論是哪一種情況,可用區都必須位於 Batch 支援的區域。

  4. 確認專案有足夠的 TPU 配額:如果建立的工作會使用 TPU 搭配隨選或 Spot VM,您必須在要使用的區域有足夠的 TPU 配額。建立工作時,如果使用會耗用 TPU 預留項目的 TPU,則不需要任何 TPU 配額,因為配額會在建立預留項目時使用。如需 TPU 配額名稱清單,請參閱「TPU 配額」;如需查看配額的操作說明,請參閱「查看及管理配額」。

  5. 選擇 TPU 機型:為所選 TPU 版本選取 TPU 機型。如果選擇使用預留項目的用量模式,則必須使用預留項目的機型。如要查看各 TPU 版本適用的機型清單,請參閱「TPU 機型」。

    基於限制,您必須為 TPU 機器類型使用單一主機拓撲。

建立使用 TPU 的工作

下列各節說明如何建立範例工作,並為每個用量選項使用 TPU。

計費方案 工作操作說明範例
預留項目繫結 (日曆模式的未來預留項目或容量區塊的未來預留項目)

使用 TPU 搭配受預留項目限制的用量方案

隨選或 Spot VM

搭配隨選或 Spot VM 使用 TPU

搭配使用 TPU 與隨選或 Spot VM

您可以使用 gcloud CLI 或 Batch API,建立使用 TPU 搭配隨選或 Spot VM 的工作。

gcloud

  1. 建立 JSON 設定檔,指定支援的單一主機 TPU 機器類型、將佈建模式設為 STANDARD 或 SPOT,並在提供 TPU 機器類型的位置執行。

    舉例來說,如要建立基本指令碼工作,請建立包含下列內容的 JSON 檔案:

    {
      "taskGroups": [
        {
          "taskSpec": {
            "runnables": [
              {
                "script": {
                  "text": "echo Hello world from TPU task ${BATCH_TASK_INDEX}."
                }
              }
            ]
          },
          "taskCount": 3,
          "parallelism": 1
        }
      ],
      "allocationPolicy": {
        "instances": [
          {
            "policy": {
              "provisioningModel": "PROVISIONING_MODEL",
              "machineType": "MACHINE_TYPE"
            }
          }
        ],
        "location": {
          "allowedLocations": [
            "ALLOWED_LOCATIONS"
          ]
        }
      },
      "logsPolicy": {
        "destination": "CLOUD_LOGGING"
      }
    }
    

    更改下列內容:

    • PROVISIONING_MODEL:用量選項的佈建模式:STANDARD 代表隨選,SPOT 代表 Spot VM。

    • MACHINE_TYPE:支援的單一主機 TPU 機型,例如 ct5p-hightpu-4t。

    • ALLOWED_LOCATIONS:工作允許的位置。如果工作使用 TPU,您必須將 allowedLocations[] 欄位設為提供 TPU 機型的可用區,例如 zones/us-central1-a 提供 TPU 機型 ct5p-hightpu-4t。

  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

向 jobs.create 方法發出 POST 要求,指定支援的單一主機 TPU 機型、將佈建模型設為 STANDARD 或 SPOT,並在提供 TPU 機型的位置執行。

舉例來說,如要建立基本指令碼工作,請提出下列要求:

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 TPU task ${BATCH_TASK_INDEX}."
            }
          }
        ]
      },
      "taskCount": 3,
      "parallelism": 1
    }
  ],
  "allocationPolicy": {
    "instances": [
      {
        "policy": {
          "provisioningModel": "PROVISIONING_MODEL",
          "machineType": "MACHINE_TYPE"
        }
      }
    ],
    "location": {
      "allowedLocations": [
        "ALLOWED_LOCATIONS"
      ]
    }
  },
  "logsPolicy": {
    "destination": "CLOUD_LOGGING"
  }
}

更改下列內容:

  • PROJECT_ID:專案的專案 ID。

  • LOCATION:工作的位置。

  • JOB_NAME:工作名稱。

  • PROVISIONING_MODEL:用量選項的佈建模式:STANDARD 代表隨選,SPOT 代表 Spot VM。

  • MACHINE_TYPE:支援的單一主機 TPU 機型,例如 ct5p-hightpu-4t。

  • ALLOWED_LOCATIONS:工作允許的位置。如果工作使用 TPU,您必須將 allowedLocations[] 欄位設為提供 TPU 機型的可用區,例如 zones/us-central1-a 提供 TPU 機型 ct5p-hightpu-4t。

使用 TPU 搭配受預留項目限制的用量方案

您可以使用 gcloud CLI 或 Batch API,建立採用 TPU 的工作,並為預留繫結 (RESERVATION_BOUND) 佈建模式選擇消耗選項,包括容量區塊的未來預留項目或日曆模式的未來預留項目。

gcloud

  1. 建立 JSON 設定檔,指定單一主機 TPU 機器類型的預留項目、將佈建模式設為 RESERVATION_BOUND,並在預留項目的可用區中執行。

    舉例來說,如要建立基本指令碼工作,請建立包含下列內容的 JSON 檔案:

    {
      "taskGroups": [
        {
          "taskSpec": {
            "runnables": [
              {
                "script": {
                  "text": "echo Hello world from TPU task ${BATCH_TASK_INDEX}."
                }
              }
            ]
          },
          "taskCount": 3,
          "parallelism": 1
        }
      ],
      "allocationPolicy": {
        "instances": [
          {
            "policy": {
              "provisioningModel": "RESERVATION_BOUND",
              "reservation": "RESERVATION",
              "machineType": "MACHINE_TYPE"
            }
          }
        ],
        "location": {
          "allowedLocations": [
            "ALLOWED_LOCATIONS"
          ]
        }
      },
      "logsPolicy": {
        "destination": "CLOUD_LOGGING"
      }
    }
    

    更改下列內容:

    • RESERVATION:替換為下列其中一個預留項目路徑:

      • 如要使用日曆模式的未來預留項目,或容量區塊未來預留項目的任何部分,請指定預留項目:

        projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME
        
      • 如要使用未來預留項目中的特定容量區塊,請指定預留項目區塊:

        projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME/reservationBlocks/BLOCK_NAME
        
      • 如要使用未來預留項目 (適用於容量區塊) 中的特定子區塊,請指定預留項目子區塊:

        projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME/reservationSubBlocks/SUB_BLOCK_NAME
        
    • MACHINE_TYPE:預留項目的 TPU 機器類型,例如 ct5p-hightpu-4t。

    • ALLOWED_LOCATIONS:工作允許的位置。如果工作使用預留的 TPU,您必須將 allowedLocations[] 欄位設為預留項目的可用區,例如 zones/us-central1-a 提供 TPU 機型 ct5p-hightpu-4t。

  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

向 jobs.create 方法提出 POST 要求,指定單一主機 TPU 機型的預留項目、將佈建模式設為 RESERVATION_BOUND,並在預留項目的可用區中執行。

舉例來說,如要建立基本指令碼工作,請提出下列要求:

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 TPU task ${BATCH_TASK_INDEX}."
            }
          }
        ]
      },
      "taskCount": 3,
      "parallelism": 1
    }
  ],
  "allocationPolicy": {
    "instances": [
      {
        "policy": {
          "provisioningModel": "RESERVATION_BOUND",
          "reservation": "RESERVATION",
          "machineType": "MACHINE_TYPE"
        }
      }
    ],
    "location": {
      "allowedLocations": [
        "ALLOWED_LOCATIONS"
      ]
    }
  },
  "logsPolicy": {
    "destination": "CLOUD_LOGGING"
  }
}

更改下列內容:

  • PROJECT_ID:專案的專案 ID。

  • LOCATION:工作的位置。

  • JOB_NAME:工作名稱。

  • RESERVATION:替換為下列其中一個預留項目路徑:

    • 如要使用日曆模式的未來預留項目,或容量區塊未來預留項目的任何部分,請指定預留項目:

      projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME
      
    • 如要使用未來預留項目中的特定容量區塊,請指定預留項目區塊:

      projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME/reservationBlocks/BLOCK_NAME
      
    • 如要使用未來預留項目 (適用於容量區塊) 中的特定子區塊,請指定預留項目子區塊:

      projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME/reservationSubBlocks/SUB_BLOCK_NAME
      
  • MACHINE_TYPE:預留項目的 TPU 機器類型,例如 ct5p-hightpu-4t。

  • ALLOWED_LOCATIONS:工作允許的位置。如果工作使用預留的 TPU,您必須將 allowedLocations[] 欄位設為預留項目的可用區,例如 zones/us-central1-a 提供 TPU 機型 ct5p-hightpu-4t。

如要進一步瞭解如何建立會耗用預留項目的工作,請參閱「使用 VM 預留項目確保資源可用性」。

後續步驟