本教學課程會說明如何在 Google Cloud的多節點、多 GPU Slurm 叢集上,微調 mistralai/Mixtral-8x7B-v0.1 模型。叢集使用兩部a4-highgpu-8g虛擬機器 (VM) 執行個體,每部 VM 都有 8 個 NVIDIA B200 GPU。
本教學課程主要說明以下兩個程序:
- 使用Google Cloud Cluster Toolkit 部署高效能的正式版 Slurm 叢集。在這個部署作業中,您會建立已預先安裝必要軟體的自訂 VM 映像檔。您也會設定共用的 Lustre 檔案系統,並設定高速網路。
- 叢集部署完成後,您可以使用本教學課程隨附的指令碼集,執行分散式微調工作。這項工作會運用 PyTorch Fully Sharded Data Parallel (FSDP),您可以透過 Hugging Face Transformer Reinforcement Learning (TRL) 程式庫存取。
本教學課程適用於機器學習 (ML) 工程師、研究人員、平台管理員和營運人員,以及對跨多個節點和 GPU 分散 AI 工作負載感興趣的資料和 AI 專家。
目標
- 使用 Hugging Face 存取 Mixtral
- 安裝 Cluster Toolkit
- 準備環境
- 建立並部署正式級 A4 High-GPU Slurm 叢集。
- 設定多節點環境,使用 FSDP 進行分散式訓練。
- 使用 Hugging Face
trl.SFTTrainer類別微調 Mixtral 模型。 - 將資料暫存至本機 SSD。
- 監控工作。
- 清除所用資源。
費用
在本文件中,您會使用下列 Google Cloud的計費元件:
如要根據預測用量估算費用,請使用 Pricing Calculator。
事前準備
- 登入 Google Cloud 帳戶。如果您是 Google Cloud新手,歡迎 建立帳戶,親自評估產品在實際工作環境中的成效。新客戶還能獲得價值 $300 美元的免費抵免額,可用於執行、測試及部署工作負載。
-
安裝 Google Cloud CLI。
-
若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 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 lustre.googleapis.com
-
安裝 Google Cloud CLI。
-
若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 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 lustre.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。 例如:myemail@example.com。ROLE:授予使用者帳戶的 IAM 角色。
- 為 Google Cloud 專案啟用預設服務帳戶:
gcloud iam service-accounts enable PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --project=PROJECT_ID
將 PROJECT_NUMBER 替換為專案編號。如要查看專案編號,請參閱「 取得現有專案」。
- 將編輯者角色 (
roles/editor) 授予預設服務帳戶:gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \ --role=roles/editor
- 為使用者帳戶建立本機驗證憑證:
gcloud auth application-default login
- 為專案啟用 OS 登入功能:
gcloud compute project-info add-metadata --metadata=enable-oslogin=TRUE
- 登入或建立 Hugging Face 帳戶。
- 安裝使用 Cluster Toolkit 時所需的依附元件。
使用 Hugging Face 存取 Mixtral
如要使用 Hugging Face 存取 Mixtral,請按照下列步驟操作:
- 登入 Hugging Face 並探索 Mixtral 模型。
- 建立 Hugging Face
read存取權杖。 - 複製並儲存權杖值。您會在後續步驟中使用這項資訊。
安裝 Cluster Toolkit
Cluster Toolkit 是開放原始碼工具,可簡化在 Google Cloud上部署高效能運算 (HPC)、人工智慧 (AI) 和機器學習 (ML) 工作負載的程序。如要進一步瞭解如何使用 gcluster 和管理叢集,請參閱 Cluster Toolkit 總覽。
準備 Cluster Toolkit 版本:
下載版本:
定義
gcluster路徑:
準備環境
如要準備環境,請按照下列步驟操作:
設定預設環境變數:
更改下列內容:
YOUR_PROJECT_ID:要在其中建立 Slurm 叢集的 Google Cloud 專案名稱。YOUR_ZONE:預訂項目所在的可用區。YOUR_REGION:預訂項目所在的區域。YOUR_RESERVATION_NAME:您要用來建立 Slurm 叢集的預訂網址或名稱。YOUR_CLUSTER_NAME:部署作業的名稱。使用只含英文字母和數字的簡稱 (例如a4high)。這個名稱也會指派給部署作業建立的 Slurm 叢集。YOUR_GCS_BUCKET:儲存訓練檢查點結果的 bucket 名稱。指定現有值區或建立新值區。建立值區前,請先瞭解值區命名規定。YOUR_HF_TOKEN:您在上一個步驟中建立的 Hugging Face 權杖。
建立 Cloud Storage bucket:
建立 A4 Slurm 叢集
如要建立 A4 Slurm 叢集,請按照下列步驟操作:
執行下列指令,使用環境變數覆寫
examples/machine-learning/a4-highgpu-8g目錄中的a4high-slurm-deployment.yaml檔案:開啟
examples/machine-learning/a4-highgpu-8g目錄中的a4high-slurm-blueprint.yaml檔案,然後編輯檔案,為共用/home目錄使用 Managed Lustre,如下所示:- 使用
source: modules/file-system/filestore移除預設的homefs模組區塊。 - 啟用
lustrefs(含remote_mount: lustrefs的homefs區塊) 和private-service-access模組。 - 在
vars區塊中,設定下列項目:- 將
/var/tmp/slurm_vars.json中install_managed_lustre的值變更為true。 - 將
per_unit_storage_throughput參數設為500。 - 將
lustre_size_gib參數設為36000。 - 取消註解
lustre_instance_id: lustre-instance。 - 註解排除或移除未使用的
filestore_ip_range。
- 將
- 使用
部署叢集:
./gcluster deploy指令會啟動兩階段程序,如下所示:- 第一階段會建立預先安裝所有軟體的自訂映像檔,最多可能需要 35 分鐘。
- 第二階段會使用該自訂映像檔部署叢集。這個程序應該會比第一階段更快完成。
準備工作負載
如要準備工作負載,請按照下列步驟操作:
建立工作負載指令碼
如要建立微調工作負載使用的指令碼,請按照下列步驟操作:
如要設定 Python 虛擬環境,請建立
install_environment.sh檔案,並加入下列內容:如要為訓練指令碼指定 Python 依附元件,請建立
requirements-fsdp.txt檔案,並加入下列內容:將
train-mixtral.py指定為主要訓練指令碼:如要指定工作在 Slurm 叢集上執行的工作,請建立
train-mixtral.sh檔案,並加入下列內容:
將指令碼上傳至 Slurm 叢集
如要將上一節建立的指令碼上傳至 Slurm 叢集,請按照下列步驟操作:
擷取叢集的登入節點名稱,然後設定
LOGIN_NODE變數:LOGIN_NODE變數會儲存類似${DEPLOYMENT_NAME}-login-001的值。建立防火牆規則:
將指令碼上傳至登入節點的主目錄:
連線至 Slurm 叢集
透過 SSH 連線至登入節點,連線至 Slurm 叢集:
安裝架構和工具
連線至登入節點後,請在運算節點上執行安裝指令碼,安裝必要的架構和工具:
這項指令會設定虛擬環境、安裝所有依附元件,並將 Mixtral 模型權重下載至 ~/Mixtral-8x7B-v0.1。設定過程可能需 30 分鐘以上。
透過 srun 執行此步驟,可將安裝指令碼從登入節點委派給已分配的運算節點,讓指令碼在編譯期間存取 GPU 驅動程式。
啟動微調工作負載
如要啟動訓練工作負載,請按照下列步驟操作:
將工作提交至 Slurm 排程器:
監控工作負載
如要監控微調工作的進度,請使用下列方法:
在 Slurm 叢集的登入節點上,您可以檢查
home目錄中建立的輸出檔案,監控工作進度:如果工作順利啟動,
.err檔案會顯示進度列,並隨著工作進度更新。這項工作分為兩個主要階段:
- 將大型基礎模型複製到每個運算節點的本機 SSD。
- 模型複製完成後,訓練工作就會開始。
整個工作大約需要 60 分鐘才能執行完畢。
您也可以監控 Slurm 叢集中的 GPU 使用情形,確認微調作業是否有效率地執行。如要這麼做,請在瀏覽器中開啟下列連結:
https://console.cloud.google.com/monitoring/metrics-explorer?project=YOUR_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 叢集,請前往
cluster-toolkit目錄,然後執行下列指令:刪除 bucket:
如要刪除 Packer 映像檔,請開啟網路瀏覽器,前往下列頁面,搜尋特定映像檔,然後按一下「刪除」。
刪除專案
刪除 Google Cloud 專案:
gcloud projects delete PROJECT_ID
後續步驟
- 重新部署 Slurm 叢集
- 在 Slurm 叢集測試網路效能
- 監控 Slurm 叢集中的 VM
- 建立服務端點: 微調模型後,您可以使用 Google Kubernetes Engine (GKE) 或 Vertex AI,將模型部署至服務端點,以供推論。
- 瞭解 AI 和機器學習工作負載的建議儲存空間服務