本教學課程會說明如何在多節點 Slurm 叢集上,微調 Gemma 3 大型語言模型 (LLM),該叢集使用兩個 A4 虛擬機器 (VM) 執行個體。在本教學課程中,您將執行下列操作:
建立自訂映像檔。
設定 RDMA 網路。
執行分散式微調工作。如要有效率地進行多節點訓練,請使用 Hugging Face Accelerate 程式庫搭配 Fully Sharded Data Parallel (FSDP)。
本教學課程適用於機器學習 (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) 取得這項權限。否則,您可以透過「Service Usage 管理員」角色 (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存取權杖值。本教學課程稍後會用到。
安裝 Cluster Toolkit
如要進一步瞭解如何使用 gcluster CLI 和管理叢集,請參閱「Cluster Toolkit 總覽」。
準備 Cluster Toolkit 版本:
下載版本:
定義
gcluster路徑:
準備環境
如要準備環境,請按照下列步驟操作:
設定預設環境變數:
更改下列內容:
YOUR_PROJECT_ID:您要建立 Cloud Storage bucket 的Google Cloud 專案 ID。YOUR_ZONE:預留項目所在的可用區。YOUR_REGION:預留項目所在的區域。YOUR_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檔案:準備資訊清單:
使用
gcluster create指令建立 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 叢集,請執行 gcluster destroy 指令:
如要刪除與專案相關聯的所有虛擬私有雲網路、防火牆規則、路由器、IP 和子網路,請按照下列步驟操作:
刪除專案
刪除 Google Cloud 專案:
gcloud projects delete PROJECT_ID