本教學課程會說明如何使用兩個 A4 虛擬機器 (VM) 執行個體,在多節點 Slurm 叢集上微調 Gemma 3 大型語言模型 (LLM)。在本教學課程中,您將執行下列操作:
建立自訂映像檔。
設定 RDMA 網路。
執行分散式微調工作。如要有效率地進行多節點訓練,請使用搭配 Fully Sharded Data Parallel (FSDP) 的 Hugging Face Accelerate 程式庫。
本教學課程適合機器學習 (ML) 工程師、平台管理員和營運人員,以及有興趣使用 Slurm 工作排程功能處理微調工作負載的資料和 AI 專家。
目標
使用 Hugging Face 存取 Gemma 3。
準備環境。
建立 A4 Slurm 叢集。
準備工作負載。
執行微調工作。
監控工作。
清除所用資源。
費用
在本文件中,您會使用下列 Google Cloud的計費元件:
- Compute Engine
- Google Kubernetes Engine (GKE) Enterprise edition
- Filestore
- Cloud Storage
- Cloud Logging
如要根據預測用量估算費用,請使用 Pricing Calculator。
事前準備
-
安裝 Google Cloud CLI。
-
設定 gcloud CLI,使用您的聯合身分。
詳情請參閱「使用聯合身分登入 gcloud CLI」。
-
執行下列指令,初始化 gcloud CLI:
gcloud init -
選取或建立專案所需的角色
- 選取專案:選取專案時,不需要具備特定 IAM 角色,只要您在專案中獲派角色,即可選取該專案。
-
建立專案:如要建立專案,您需要「專案建立者」角色 (
roles/resourcemanager.projectCreator),其中包含resourcemanager.projects.create權限。瞭解如何授予角色。
-
建立 Google Cloud 專案:
gcloud projects create PROJECT_ID
將
PROJECT_ID替換為您要建立的 Google Cloud 專案名稱。 -
選取您建立的 Google Cloud 專案:
gcloud config set project PROJECT_ID
將
PROJECT_ID替換為 Google Cloud 專案名稱。
啟用必要的 API:
啟用 API 時所需的角色
如要啟用 API,您必須具備
serviceusage.services.enable權限。如果您建立了專案,可能已透過「擁有者」角色 (roles/owner) 取得這項權限。否則,您可以透過「服務使用情形管理員」角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。gcloud services enable compute.googleapis.com file.googleapis.com logging.googleapis.com cloudresourcemanager.googleapis.com servicenetworking.googleapis.com
-
將角色授予使用者帳戶。針對下列每個 IAM 角色,執行一次下列指令:
roles/compute.admin, roles/iam.serviceAccountUser, roles/file.editor, roles/storage.admin, roles/serviceusage.serviceUsageAdmingcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
更改下列內容:
PROJECT_ID:專案 ID。USER_IDENTIFIER:使用者帳戶的 ID。 帳戶。如需範例,請參閱「 在 IAM 政策中代表工作團隊集區使用者」。ROLE:授予使用者帳戶的 IAM 角色。
- 為 Google Cloud 專案啟用預設服務帳戶:
gcloud iam service-accounts enable PROJECT_NUMBER-compute@ \ --project=PROJECT_ID
將 PROJECT_NUMBER 替換為專案編號。如要查看專案編號,請參閱「 取得現有專案」。
- 將編輯者角色 (
roles/editor) 授予預設服務帳戶:gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:PROJECT_NUMBER-compute@" \ --role=roles/editor
- 為使用者帳戶建立本機驗證憑證:
gcloud auth application-default login
- 為專案啟用 OS 登入功能:
gcloud compute project-info add-metadata --metadata=enable-oslogin=TRUE
- 登入或建立 Hugging Face 帳戶。
使用 Hugging Face 存取 Gemma 3
如要使用 Hugging Face 存取 Gemma 3,請按照下列步驟操作:
建立 Hugging Face
read存取權杖。 依序點選「你的個人資料」>「設定」>「存取權杖」>「+ 建立新權杖」複製並儲存
read access權杖值。本教學課程稍後會用到這項資訊。
安裝 Cluster Toolkit
如要進一步瞭解如何使用 gcluster 和管理叢集,請參閱「Cluster Toolkit 總覽」。
準備 Cluster Toolkit 版本:
下載版本:
定義
gcluster路徑:
準備環境
如要準備環境,請按照下列步驟操作:
設定預設環境變數:
更改下列內容:
YOUR_PROJECT_ID:您要建立 Cloud Storage bucket 的Google Cloud 專案 ID。YOUR_ZONE:預訂項目所在的可用區。YOUR_REGION:預訂項目所在的區域。RESERVATION_NAME:您要用來建立 Slurm 叢集的預訂網址或名稱。YOUR_CLUSTER_NAME:要建立的 Slurm 叢集名稱。YOUR_GCS_BUCKET:Cloud Storage bucket 的名稱,必須符合bucket 命名規定。YOUR_HF_TOKEN:您在上一個章節中建立的 Hugging Face 存取權杖。
建立 Cloud Storage bucket:
建立 A4 Slurm 叢集
如要建立 A4 Slurm 叢集,請按照下列步驟操作:
建立
a4high-slurm-deployment.yaml檔案:準備資訊清單:
建立 Terraform 資訊清單:
修補資訊清單:
部署叢集:
gcluster deploy指令包含兩個階段,如下所示:第一階段會建構預先安裝所有軟體的自訂映像檔,最多可能需要 45 分鐘才能完成。
第二階段會使用該自訂映像檔部署叢集。這個程序通常比第一階段更快完成。
如果第一階段成功,但第二階段失敗,您可以嘗試略過第一階段,再次部署 Slurm 叢集:
準備工作負載
如要準備工作負載,請按照下列步驟操作:
建立工作負載指令碼
如要建立微調工作負載使用的指令碼,請按照下列步驟操作:
如要設定 Python 虛擬環境,請建立
install_environment.sh檔案,並加入下列內容:如要指定微調工作的設定,請建立
accelerate_config.yaml檔案,並加入下列內容:如要指定工作在 Slurm 叢集上執行的工作,請建立
submit.slurm檔案,並加入下列內容:如要指定微調工作的依附元件,請建立
requirements.txt檔案,並加入下列內容:如要指定工作指令,請建立
train.py檔案,並加入下列內容:
將指令碼上傳至 Slurm 叢集
如要將上一節建立的指令碼上傳至 Slurm 叢集,請按照下列步驟操作:
擷取叢集的登入節點名稱,然後設定
LOGIN_NODE變數:LOGIN_NODE變數會儲存類似${CLUSTER_NAME}-login-001的值。將指令碼上傳至登入節點的主目錄:
連線至 Slurm 叢集
連線至登入節點,並將 Hugging Face 權杖傳播至新工作階段:
安裝架構和工具
連線至登入節點後,請設定 Python 虛擬環境,並安裝必要的依附元件:
啟動微調工作負載
如要啟動微調工作負載,請按照下列步驟操作:
將工作提交至 Slurm 排程器,並收集工作 ID:
在 Slurm 叢集的登入節點上,您可以檢查
home目錄中建立的輸出檔案,監控工作進度:如果工作順利啟動,
.err檔案會顯示進度列,並隨著工作進度更新。
監控工作負載
您可以監控 Slurm 叢集中的 GPU 使用情形,確認微調作業是否有效率地執行。如要這麼做,請在瀏覽器中開啟下列連結:
https://console.cloud.google.com/monitoring/metrics-explorer?project=PROJECT_ID&pageState=%7B%22xyChart%22%3A%7B%22dataSets%22%3A%5B%7B%22timeSeriesFilter%22%3A%7B%22filter%22%3A%22metric.type%3D%5C%22agent.googleapis.com%2Fgpu%2Futilization%5C%22%20resource.type%3D%5C%22gce_instance%5C%22%22%2C%22perSeriesAligner%22%3A%22ALIGN_MEAN%22%7D%2C%22plotType%22%3A%22LINE%22%7D%5D%7D%7D
監控工作負載時,您可以查看下列資訊:
GPU 使用率:如果微調工作正常運作,您應該會看到所有 16 個 GPU (叢集中每個 VM 有 8 個 GPU) 的使用率在訓練期間上升並穩定在特定程度。
工作時間:這項工作大約需要一小時才能完成。
清除所用資源
為避免因為本教學課程所用資源,導致系統向 Google Cloud 帳戶收取費用,請刪除含有相關資源的專案,或者保留專案但刪除個別資源。
刪除 Slurm 叢集
如要刪除 Slurm 叢集,請按照下列步驟操作:
如要刪除與專案相關聯的所有虛擬私有雲網路、防火牆規則、路由器、IP 和子網路,請按照下列步驟操作:
刪除專案
刪除 Google Cloud 專案:
gcloud projects delete PROJECT_ID