自動化調度管理

如要使用 Vertex AI 訓練叢集,請與業務代表聯絡以取得存取權。

Vertex AI 訓練叢集使用 Simple Linux Utility for Resource Management (Slurm) 做為協調器,管理及排定叢集上的工作。

Slurm 是廣受採用的開放原始碼叢集管理和工作排程系統,以擴充性和容錯能力著稱。

Slurm 的主要功能

  • Slurm 會分配一組運算節點,供特定作業在一段時間內專用。確保作業專用存取權,可存取執行作業所需的資源,不會受到干擾。
  • Slurm 提供架構,可管理作業的完整生命週期,包括提交、執行、監控和完成。這個系統專門用來處理在一組已分配節點上執行的平行工作。
  • Slurm 會維護待處理工作的佇列,並使用精密的優先順序引擎來仲裁運算資源的存取權。這個系統會考量工作大小、使用者優先順序和等待時間等因素,確保叢集資源得到公平且有效率的運用。

基本叢集設定

您必須先定義 Slurm 叢集的基本結構,才能執行工作。本節將詳細說明基本設定,包括如何將運算節點劃分為多個分割區、指定專屬登入節點集區,以及為使用者設定共用主目錄。

分區

分區會將節點分組為邏輯集合,方便您管理不同機器類型或存取層級。這些定義為 slurm_spec 的 partitions 欄位中的清單。

每個分割區物件都必須包含下列欄位:

  • id:分區的專屬 ID。
  • node_pool_ids:清單,內含屬於這個分割區的一或多個節點集區 ID。

例如:

"partitions": [
  {
    "id": "a4",
    "node_pool_ids": [ "a4" ]
  }
]

登入節點

登入節點集區提供專屬節點,做為使用者與叢集互動的主要進入點。login_node_pool_id 欄位會指定這個集區的專屬 ID。

例如:

"login_node_pool_id": "login"

主目錄儲存空間

home_directory_storage 欄位會指定要掛接為叢集中所有節點上 /home 目錄的 Filestore 執行個體。這會為所有使用者提供共用的持續性住家目錄。

您必須提供 Filestore 執行個體的完整資源名稱,做為這個值。

例如:

"home_directory_storage": "projects/PROJECT_ID/locations/REGION-ZONE/instances/FILESTORE_INSTANCE_NAME"

進階 Slurm 設定

您可以在 Vertex AI 訓練叢集中自訂一組選定的 slurm.conf 參數,但請注意,這些設定只能在叢集建立初期設定,之後就無法變更。

會計

Vertex AI 訓練叢集提供內建的會計功能,可追蹤叢集內的資源用量。如需監控工作專屬 CPU 時間和記憶體用量等指標的完整指南,請參閱官方 Slurm 會計文件

參數 範例
AccountingStorageEnforce 以半形逗號分隔的字串 associations,limits,qos

先占和優先順序

如要管理工作的排程和優先順序,Vertex AI 訓練叢集可讓您設定 Slurm 的工作搶占功能。搶占功能會搭配多重因素優先順序外掛程式,判斷是否應暫停執行中的工作,讓優先順序較高的工作得以執行。

如需完整的概念總覽,請參閱 Slurm 官方說明文件,瞭解多重因素優先順序外掛程式搶占

搶占參數

參數 範例
PREEMPT_TYPE 字串 preempt/partition_prio
PREEMPT_MODE 以半形逗號分隔的字串 SUSPEND,GANG
PREEMPT_EXEMPT_TIME 字串 00:00:00

優先順序參數

參數 範例
PRIORITY_TYPE 字串 priority/multifactor
PRIORITY_WEIGHT_AGE 整數 0
PRIORITY_WEIGHT_ASSOC 整數 0
PRIORITY_WEIGHT_FAIRSHARE 整數 0
PRIORITY_WEIGHT_JOB_SIZE 整數 0
PRIORITY_WEIGHT_PARTITION 整數 0
PRIORITY_WEIGHT_QOS 整數 0
PRIORITY_WEIGHT_TRES 以半形逗號分隔的字串 cpu=100,mem=150

Prolog 和 epilog 指令碼

您可以使用下列欄位,設定在每個工作開始 (序言) 和結束 (結尾) 時自動執行的自訂 Bash 指令碼:

  • prolog_bash_scripts:字串清單,每個字串都包含要在工作開始前執行的完整 Bash 指令碼內容。
  • epilog_bash_scripts:字串清單,每個字串都包含作業完成後要執行的 Bash 指令碼完整內容。

這對於設定專屬工作環境或執行自動清除工作很有幫助。

叢集規格範例

以下範例顯示建立訓練叢集的完整 JSON 設定。您可以根據自身需求調整這項規格。

{
  // ... other cluster configurations ...
  "orchestratorSpec": {
    "slurmSpec": {
      "partitions": [
        {
          "id": "a4",
          "node_pool_ids": ["a4"]
        }
      ],
      "login_node_pool_id": "login",
      "home_directory_storage": "projects/PROJECT_ID/locations/REGION-ZONE/instances/FILESTORE_INSTANCE_ID",
      "accounting": {
        "accounting_storage_enforce": "ACCOUNTING_STORAGE_ENFORCE"
      },
      "scheduling": {
        "priority_type": "PRIORITY_TYPE",
        "priority_weight_age": PRIORITY_WEIGHT_AGE,
        "priority_weight_assoc": PRIORITY_WEIGHT_ASSOC,
        "priority_weight_fairshare": PRIORITY_WEIGHT_FAIRSHARE,
        "priority_weight_job_size": PRIORITY_WEIGHT_JOB_SIZE,
        "priority_weight_partition": PRIORITY_WEIGHT_PARTITION,
        "priority_weight_qos": PRIORITY_WEIGHT_QOS,
        "priority_weight_tres": "PRIORITY_WEIGHT_TRES",
        "preempt_type": "PREEMPT_TYPE",
        "preempt_mode": "PREEMPT_MODE",
        "preempt_exempt_time": "PREEMPT_EXEMPT_TIME"
      },
      "prolog_bash_scripts": [
        "#!/bin/bash\necho 'First prolog script running'",
        "#!/bin/bash\necho 'Second prolog script running'"
      ],
      "epilog_bash_scripts": [
        "#!/bin/bash\necho 'Epilog script running'"
      ]
      // ... other Slurm settings ...
    }
  }
}

叢集管理與作業

管理執行中的叢集

使用所選的會計和搶占設定建立叢集後,您可以使用 Slurm 的指令列工具管理使用者帳戶,以及監控工作排程。

使用 sacctmgr 管理帳戶

sacctmgr 指令是管理 Slurm 資料庫中使用者和帳戶資訊的主要工具。舉例來說,如要將新使用者新增至帳戶,並授予該使用者存取分割區的權限,請執行下列指令:

sudo sacctmgr add User Accounts=<account> Partition=<partition> <user>

如需完整的 sacctmgr 選項清單,請參閱官方的 Slurm 會計說明文件

檢查工作優先順序

如要檢查佇列中每項工作的優先順序元件,請使用 sprio 公用程式。這有助於瞭解特定工作排定在其他工作之前執行的原因。

如要瞭解詳細用法,請參閱 sprio 公用程式說明文件。

搶占範例

Slurm 官方說明文件提供多個不同搶占策略的運作範例。您可以在「Slurm Preemption」頁面中找到這些資訊。

後續步驟

以下內容著重於機器學習生命週期的最後幾個步驟:管理、部署及監控訓練好的模型。

  • 部署模型以進行推論:將經過訓練的模型部署至 Vertex AI 端點,大規模處理線上推論要求。
  • 管理模型生命週期:使用 Vertex AI Model Registry 建立模型版本、比較模型及管理模型。您可以設定管道,在訓練成功後自動註冊新模型。
  • 監控管道執行和模型效能:
  • 降低費用及管理叢集生命週期:使用自動化管道時,請考量執行頻率,管理叢集的生命週期。
    • 如果執行次數不多,請新增最後一個管道步驟來刪除叢集,以節省費用。這通常需要建立自訂管道元件,呼叫刪除函式。
    • 如果經常執行,請讓叢集保持運作,縮短工作啟動時間。