本教學課程會說明如何在 Google Cloud的多節點、多 GPU Slurm 叢集上訓練大型語言模型 (LLM)。本教學課程使用的模型是以擁有 15 億個參數的 Qwen2 模型為基礎。Slurm 叢集使用兩部 a4-highgpu-8g 虛擬機器 (VM),每部 VM 都有 8 個 NVIDIA B200 GPU。
本教學課程說明的兩個主要程序如下:
- 使用Google Cloud Cluster Toolkit 部署高效能的正式版 Slurm 叢集。在這個部署作業中,您會建立已預先安裝必要軟體的自訂 VM 映像檔。您也可以設定共用的 Filestore 執行個體,並設定高速 RDMA 網路。
- 叢集部署完成後,您可以使用本教學課程隨附的一組指令碼,執行分散式前置訓練工作。這項工作會運用 Hugging Face Accelerate 程式庫。
本教學課程適用於機器學習 (ML) 工程師、研究人員、平台管理員和營運人員,以及有興趣在 Google Cloud 部署高效能 Slurm 叢集來訓練大型語言模型的資料和 AI 專家。
目標
- 使用 Hugging Face 存取 Qwen2 模型。
- 準備環境。
- 建立並部署正式級別的 A4 Slurm 叢集。
- 使用 Accelerate 程式庫訓練 Qwen2 模型。
- 監控工作。
- 清除所用資源。
費用
在本文件中,您會使用下列 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
-
安裝 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
-
將角色授予使用者帳戶。針對下列每個 IAM 角色,執行一次下列指令:
roles/compute.admin, roles/iam.serviceAccountUser, roles/file.editor, roles/storage.admin, roles/serviceusage.serviceUsageAdmin, roles/compute.osAdminLogin, roles/iap.tunnelResourceAccessorgcloud 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 帳戶。
使用 Hugging Face 存取 Qwen2
如要使用 Hugging Face 存取 Qwen2,請按照下列步驟操作:
安裝 Cluster Toolkit
Cluster Toolkit 是開放原始碼工具,可簡化在 Google Cloud上部署高效能運算 (HPC)、人工智慧 (AI) 和機器學習 (ML) 工作負載的程序。如要進一步瞭解如何使用 gcluster 和管理叢集,請參閱 Cluster Toolkit 總覽。
準備 Cluster Toolkit 版本:
下載版本:
定義
gcluster路徑:
準備環境
如要準備環境,請按照下列步驟操作:
設定預設環境變數:
更改下列內容:
YOUR_PROJECT_ID:要在其中建立 GKE 叢集的 Google Cloud 專案名稱。YOUR_CLUSTER_NAME:要建立的 Slurm 叢集名稱。YOUR_ZONE:預訂項目所在的可用區。YOUR_REGION,:預訂項目所在的區域。RESERVATION_NAME:您要用來建立 Slurm 叢集的預訂網址或名稱。YOUR_GCS_BUCKET:儲存訓練檢查點結果的 bucket 名稱。建立值區前,請先瞭解值區命名規定。YOUR_HF_TOKEN:您在稍早步驟中建立的 Hugging Face 權杖。
建立 Cloud Storage bucket:
建立 A4 Slurm 叢集
如要建立 A4 Slurm 叢集,請按照下列步驟操作:
建立
a4high-slurm-deployment.yaml檔案:建立 Terraform 資訊清單:
修補資訊清單:
部署叢集:
gcluster deploy指令包含兩個階段,如下所示:第一階段會建構預先安裝所有軟體的自訂映像檔,最多可能需要 50 分鐘才能完成。
第二階段會使用該自訂映像檔部署叢集。這個程序通常比第一階段更快完成。
如果第一階段成功,但第二階段失敗,您可以嘗試略過第一階段,再次部署 Slurm 叢集:
準備工作負載
如要準備工作負載,請按照下列步驟操作:
建立工作負載指令碼
如要建立訓練工作負載使用的指令碼,請按照下列步驟操作:
如要設定 Python 虛擬環境,請建立
install_environment.sh檔案,並加入下列內容:如要指定微調工作的設定,請建立
accelerate_config.yaml檔案,並加入下列內容:如要指定工作在 Slurm 叢集上執行的工作,請建立
submit.slurm檔案,並加入下列內容:如要指定微調工作的依附元件,請建立
requirements.txt檔案,並加入下列內容:
注意:本教學課程並未使用最新版本的 NVIDIA 和 PyTorch 依附元件。如需較新的依附元件,請參閱 NVIDIA 說明文件和 Pytorch 說明文件。如要下載、權杖化及預先處理資料集,並轉換為可供訓練的格式,請建立
preprocess_data.py檔案,並加入下列內容:如要指定工作指令,請建立包含下列內容的
train.py檔案:
將指令碼上傳至 Slurm 叢集
如要將上一節建立的指令碼上傳至 Slurm 叢集,請按照下列步驟操作:
擷取叢集的登入節點名稱,然後設定
LOGIN_NODE變數:LOGIN_NODE變數會儲存類似${CLUSTER_NAME}-login-001的值。建立防火牆規則:
將指令碼上傳至登入節點的主目錄:
連線至 Slurm 叢集
透過 SSH 連線至登入節點,連線至 Slurm 叢集:
安裝架構和工具
連線至登入節點後,請執行下列步驟來安裝架構和工具:
設定 Python 虛擬環境和所有必要依附元件:
開始預先訓練工作負載
如要開始訓練工作負載,請按照下列步驟操作:
將工作提交至 Slurm 排程器:
在 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) 的使用率在訓練期間上升並穩定在特定程度。測試
工作時間:這項工作大約需要一小時才能完成。
下載模型
成功執行工作後,訓練好的模型會儲存在登入節點的 ~/qwen2-from-scratch-on-smollm-fineweb/ 目錄中。由於這個持續性共用目錄會掛接至叢集中的所有節點,因此即使作業完成或運算節點解除分配,模型檢查點仍可供使用。
您可以使用 gcloud compute scp 指令,將儲存的模型從登入節點下載至本機電腦,如下列範例所示:
下載模型後,您可以執行下列操作:
- 載入模型以進行推論:使用 Hugging Face Transformers 架構載入
qwen2-trained-model/目錄,並使用新訓練的 Qwen2 模型執行推論。 - 額外微調:將儲存的檢查點做為起點,針對更具體的資料集進行額外微調。
- 將模型推送至 Hugging Face Hub:將訓練好的模型推送至 Hugging Face Hub,即可與他人分享。
清除所用資源
為避免因為本教學課程所用資源,導致系統向 Google Cloud 帳戶收取費用,請刪除含有相關資源的專案,或者保留專案但刪除個別資源。
刪除資源
如要刪除 Slurm 叢集,請按照下列步驟操作:
如要刪除 Cloud Storage bucket,請按照下列步驟操作:
如要刪除 Packer 映像檔,請開啟網路瀏覽器,前往下列頁面,搜尋特定映像檔,然後按一下「刪除」。
如要刪除與專案相關聯的所有虛擬私有雲網路、防火牆規則、路由器、IP 和子網路,請按照下列步驟操作:
刪除專案
刪除 Google Cloud 專案:
gcloud projects delete PROJECT_ID