今天,許多組織都在尋找使用先進的大型語言模型 (LLMs) 的方法,以滿足他們的特定需求。這些組織正在進行大規模的 LLM 預訓練和微調,這些模型的參數數量達到數十億。這個過程的目的是提高模型在醫療保健、金融服務和行銷等多個領域的應用效果。然而,定制這些大型模型需要最新且加速的計算資源。
在這篇文章中,我們將展示如何使用 Amazon SageMaker HyperPod 訓練計畫來解決這個需求,這可以縮短您獲得訓練集群的等待時間。訓練計畫提供簡單且可預測的加速計算資源訪問(支持 P4d、P5、P5e、P5en 和 trn2),讓您可以利用這些計算能力來運行 Amazon SageMaker 訓練任務或 SageMaker HyperPod。
我們將逐步指導您如何使用 (AWS CLI) 或 AWS 管理控制台來查找、檢視和創建適合您計算和時間需求的最佳訓練計畫。我們還將指導您如何使用訓練計畫提交 SageMaker 訓練任務或創建 SageMaker HyperPod 集群。
您可以查看這個新功能的推出,了解如何透過新的 Amazon SageMaker HyperPod 彈性訓練計畫來滿足您的訓練時間表和預算。
商業挑戰
隨著組織努力利用 LLM 的力量來獲得競爭優勢,他們面臨一個重大挑戰:確保有足夠且可靠的計算能力來進行模型訓練。這些模型的規模需要尖端的加速計算硬體。然而,這些資源的高成本和有限的可用性對許多企業造成了瓶頸。這種稀缺不僅影響時間表,還會拉長預算,可能會延遲關鍵的人工智慧計畫。因此,組織正在尋找能夠提供穩定、可擴展和具成本效益的高效能計算資源的解決方案,使他們能夠訓練和微調 LLM,而不影響速度或質量。
解決方案概述
SageMaker HyperPod 訓練計畫是一項新的 SageMaker 功能,通過提供簡單易用的控制台介面或 AWS CLI 體驗來解決這一挑戰,讓您可以搜尋、檢視、創建和管理訓練計畫。
通過 SageMaker 訓練計畫提供的計算能力可以用於 SageMaker 訓練任務或 SageMaker HyperPod。如果您想專注於模型開發而不是基礎設施管理,並且希望使用管理經驗的簡便性,SageMaker 訓練任務是個不錯的選擇。對於需要對訓練基礎設施進行細緻控制和廣泛自定義選項的組織,SageMaker HyperPod 是理想的解決方案。要更好地了解這些服務並選擇最適合您用例的選項,請參考 Amazon SageMaker 上的生成式 AI 基礎模型訓練,該文檔提供了有關這兩個選項的詳細信息。
以下圖表概述了使用 SageMaker 訓練計畫請求計算能力的主要步驟。
高層次來看,創建訓練計畫的步驟如下:
- 搜尋最符合您需求的訓練計畫,例如實例類型、實例數量、開始時間和持續時間。SageMaker 會在一個或多個區段中找到最佳計畫。
- 在檢視可用的訓練計畫後,您可以保留符合您需求的計畫。
- 使用訓練計畫安排您的 SageMaker 訓練任務,目標資源為訓練任務。請注意,我們僅使用訓練任務作為示例,您也可以將 hyperpod-cluster 作為目標資源。
- 描述並列出您現有的訓練計畫。當計算能力可用時,它將分配給已安排的訓練任務。
在接下來的部分中,我們將重點介紹與訓練計畫相關的解決方案步驟。
前提條件
完成以下前提步驟:
- 如果您使用的是 AWS 身份與訪問管理 (IAM) 使用者,請確保您的使用者已附加 AmazonSageMakerFullAccess 政策。要了解如何將政策附加到 IAM 使用者,請參見添加 IAM 身份權限 (控制台)。
- 如果您是第一次設置 AWS CLI,請按照 AWS CLI 開始使用的說明進行操作。
- 如果您選擇使用 AWS CLI,請確保您使用的是最新版本的 AWS CLI。
創建訓練計畫
在這篇文章中,我們將討論兩種創建訓練計畫的方法:使用 SageMaker 控制台或 AWS CLI。
使用 SageMaker 控制台創建 SageMaker 訓練計畫
在 SageMaker 控制台中創建訓練計畫的用戶體驗對於訓練任務和 SageMaker HyperPod 是相似的。在這篇文章中,為了演示,我們將展示如何為 SageMaker HyperPod 集群創建訓練計畫。
- 在 SageMaker 控制台中,選擇導航窗格中的訓練計畫。
- 創建一個新的訓練計畫。
- 在目標中,選擇 HyperPod 集群。
- 在實例屬性下,指定您的實例類型 (ml.p5.48xlarge) 和實例數量 (16)。
- 在日期設置中選擇您希望搜尋的可用計畫的訓練日期和持續時間(例如,10 天)。
- 選擇查找訓練計畫。
SageMaker 建議一個訓練計畫,分為兩個 5 天的區段。這包括計畫的總前期價格,以及根據您提供的數據位置的預估數據傳輸成本。
檢視並購買您的計畫。
創建訓練計畫後,您可以查看已創建的訓練計畫列表。該計畫最初進入待處理狀態,等待付款。一旦付款處理完成(除非付款週期已更改),該計畫將轉換為已排定狀態。此時,您可以開始排隊任務或使用該計畫創建集群。在計畫的開始日期,它將變為活動狀態,並分配資源。您的訓練任務可以開始運行(視資源可用性而定)。
請確保使用 AWS 計費和成本管理控制台支付訓練計畫的費用,以便該計畫顯示在您的 SageMaker 控制台上。您將收到一張發票,必須解決後才能繼續。
使用 AWS CLI 創建 SageMaker 訓練計畫
完成以下步驟以使用 AWS CLI 創建訓練計畫:
- 首先調用 API,傳遞您的計算需求作為輸入參數,以搜尋所有匹配的訓練計畫。
以下示例搜尋適合兩個 ml.p5.48xlarge 實例在 us-west-2 區域使用 96 小時的訓練計畫。在這個例子中,我們還設置了我們希望使用訓練計畫的時間範圍,並且還過濾出可以用於 SageMaker HyperPod 集群工作負載的訓練計畫,使用 target-resources 參數:
每個在回應中返回的 TrainingPlanOffering 都由唯一的 TrainingPlanOfferingId 標識。列表中的第一個提供的選項代表最符合您需求的選擇。在這種情況下,SageMaker SearchTrainingPlanOfferings API 返回一個可用的 TrainingPlanOffering,符合指定的計算需求:
請確保您的 SageMaker HyperPod 訓練任務子網位於與您的訓練計畫相同的可用區域。
選擇最適合您的時間表和需求的訓練計畫後,您可以通過調用 CreateTrainingPlan API 來保留它,如下所示:
您將看到如下所示的輸出:
創建訓練計畫後,您需要付款。請注意查看發票。您也可以在 AWS 計費和成本管理控制台中找到這個發票。
您可以通過調用 ListTrainingPlans API 列出您 AWS 帳戶(和區域)中創建的所有訓練計畫:
這將為您提供帳戶中訓練計畫的摘要。在您擁有訓練計畫(新創建的 p5-training-plan)後,您可以使用控制台或 DescribeTrainingPlan API 檢查其詳細信息,如下所示:
使用 SageMaker HyperPod 的訓練計畫
當您的訓練計畫狀態轉換為已排定時,您可以將其用於新的實例組,無論是在新的還是現有的 SageMaker HyperPod 集群中。您可以使用 CreateCluster 和 UpdateCluster API 來創建新的 SageMaker HyperPod 集群,或分別更新現有集群。您也可以選擇直接使用 SageMaker 控制台。
對於給定的 SageMaker HyperPod 集群,訓練計畫是在實例組級別附加的,分別對每個實例組。如果需要,一個 SageMaker HyperPod 集群可以附加一個或多個訓練計畫到多個實例組。您始終可以選擇省略訓練計畫,而繼續使用之前的按需計算能力。然而,您不能在同一實例組中混合訓練計畫能力和按需計算能力。您也可以選擇為每個實例組啟動部分集群。這意味著即使所有請求的計算能力不可用,您仍然可以啟動一個已經可用的集群。
當訓練計畫處於活動狀態時,這是 TrainingPlanOfferings 在其中安排開始和停止的時間窗口。每當 TrainingPlanOffering 開始時,實例組將自動擴展到指定的數量,實例組的 TrainingPlanStatus 將顯示為活動狀態。當 TrainingPlanOffering 被安排停止時,您的集群的實例組將自動縮減到零,實例組的 TrainingPlanStatus 將顯示為過期。
在控制台中使用 SageMaker HyperPod 的訓練計畫
您可以選擇創建一個新集群並創建一個實例組,或編輯現有集群並編輯現有實例組。在配置中,選擇與訓練計畫中選擇的相同實例類型,並指定所需的實例數量。當您選擇支持訓練計畫的實例類型時,實例容量選項將顯示。選擇下拉菜單以瀏覽有效的訓練計畫。可用的訓練計畫選擇按名稱列出,並僅過濾出符合所選實例類型、至少具有指定實例數量、以 hyperpod-cluster 作為目標資源創建的訓練計畫,並且目前狀態為已排定或活動。請再次檢查這些條件,如果您沒有看到預期的訓練計畫名稱,請確保預期的訓練計畫是在同一帳戶和同一區域中創建的。默認選擇是不使用訓練計畫。對於每個應該有訓練計畫的實例組重複此過程。
使用 AWS CLI 的 SageMaker HyperPod 訓練計畫
完成以下步驟以使用 AWS CLI 的訓練計畫:
- 從頭創建一個 SageMaker HyperPod 集群。詳細說明請參見 Amazon SageMaker HyperPod 工作坊或 Amazon EKS 支持的 Amazon SageMaker HyperPod 工作坊。
以下集群配置文件定義了一個名為 ml-cluster 的 SageMaker HyperPod SLURM 集群。使用訓練計畫的步驟將是相同的,無論您選擇 SLURM 還是 Amazon Elastic Kubernetes Service (Amazon EKS) 作為協調者。該集群包含一個名為 controller-machine 的實例組,作為 SLURM 集群的主節點,有 1 個 ml.m5.12xlarge 實例,並且不會為 controller-machine 實例組使用訓練計畫。我們還定義了一個名為 worker-group-1 的工作實例組,指定 2 個 ml.p5.48xlarge 實例,這些實例將來自您的訓練計畫。請注意“TrainingPlanArn”這一行——這是您指定訓練計畫的完整 Amazon 資源名稱 (ARN) 的地方。如果您按照前面的步驟操作,這應該是環境變數 TRAINING_PLAN_ARN 的值。以下集群配置還跳過了一些配置參數,例如 VPCConfig 和 InstanceStorageConfig。請參見工作坊或以下腳本以獲取完整的 SageMaker HyperPod 集群配置文件。
然後,您可以使用以下代碼創建集群:
接下來的步驟假設您已經創建了一個 SageMaker HyperPod 集群。如果您想將使用訓練計畫保留實例的實例組添加到現有集群,則此部分相關。
要更新現有集群,您可以定義另一個名為 update-cluster-config.json 的文件,如下所示。如果您按照工作坊中的說明來配置集群,則可以使用提供的 create_config.sh 獲取 env_vars 的值,然後再加載它們。
在此文件中,我們定義了一個名為 worker-group-2 的額外工作組,包含 2 個 ml.p5.48xlarge 實例。同樣,請注意“TrainingPlanArn”這一行——這是您指定訓練計畫的完整 ARN 的地方。
請確保您還更新 provisioning_parameters.json,並將更新的文件上傳到您的 S3 存儲桶,以便 SageMaker 在配置新工作組時使用:
因為這個文件是上傳到 Amazon 簡單存儲服務 (Amazon S3) 以供 SageMaker 在配置您的集群時使用,您需要先從 Amazon S3 複製該文件:
aws s3 cp s3://$BUCKET/src/provisioning_parameters.json provisioning_parameters.json
假設您的現有集群有一個控制機器組和一個包含 ml.g5.48xlarge 的工作組,您可以在現有的 yaml 文件中添加粗體字的行:
這一步將您剛創建的新工作組添加進來,該工作組由來自您訓練計畫的 2 個 ml.p5.48xlarge 節點組成。
現在,您可以將更新的 provisioning-parameters.json 文件重新上傳到 Amazon S3:
現在,隨著 cluster-config.json(現在是 update-cluster-config.json)和 provisioning-parameters.json 的更新,您可以將訓練計畫節點添加到集群:
使用訓練計畫的 SageMaker 訓練任務
SageMaker 訓練任務提供兩種主要的執行方法:AWS CLI 命令和 Python SDK。AWS CLI 方法提供直接控制,適合腳本編寫,讓您可以使用單個命令創建訓練任務。Python SDK 提供更具程序化的介面,能夠與現有的 Python 工作流程無縫集成,並使用 SageMaker 的高級功能。在這一部分中,我們將看看如何使用訓練計畫的這兩種選擇。
使用 AWS CLI 在訓練計畫上運行訓練任務
以下示例演示如何創建 SageMaker 訓練任務並將其與提供的訓練計畫關聯,使用 create-training-job AWS CLI 命令中的 CapacityScheduleConfig 屬性:
創建訓練任務後,您可以通過調用 DescribeTrainingJob API 來驗證它是否正確分配給訓練計畫:
使用 SageMaker Python SDK 在訓練計畫上運行訓練任務
以下示例演示如何使用 SageMaker Python SDK 的訓練估算器創建 SageMaker 訓練任務。它還顯示了如何在使用 SageMaker Python SDK 時,通過在估算器對象中使用 capacity_schedules 屬性將任務與提供的訓練計畫關聯。
有關 SageMaker 估算器的更多信息,請參見使用 SageMaker 估算器運行訓練任務。
請確保 SageMaker Python SDK 版本已更新到最新版本。
創建訓練任務後,您可以通過調用 DescribeTrainingJob API 來驗證它是否正確分配給訓練計畫:
清理
為了清理您的資源以避免產生更多費用,請完成以下步驟:
- 刪除 SageMaker HyperPod 集群及相關資源,如存儲、VPC 和 IAM 角色。
- 如果使用 SLURM,請參見清理。
- 如果使用 Amazon EKS,請參見清理。
- 刪除任何創建的 S3 存儲桶。
- 確保已使用的訓練計畫完成履行生命周期。
結論
SageMaker 訓練計畫在解決處理 LLM 的組織面臨的計算能力挑戰方面代表了一個重大進步。通過快速訪問高效能 GPU 資源,它簡化了模型訓練和微調的過程。這項解決方案不僅減少了集群配置的等待時間,還提供了在 SageMaker 訓練任務和 SageMaker HyperPod 之間選擇的靈活性,以滿足不同組織的需求。最終,SageMaker 訓練計畫使企業能夠克服資源限制,加速他們的人工智慧計畫,從而在各行各業中更有效地使用先進的語言模型。
要開始使用 SageMaker 訓練計畫並探索其在您特定 LLM 訓練需求中的能力,請參見使用訓練計畫保留計算能力,並嘗試本文提供的逐步實施指南。
特別感謝 Fei Ge、Oscar Hsu、Takuma Yoshitani 和 Yiting Li 在本篇文章發布過程中的支持。
關於作者
Aman Shanbhag 是 Amazon Web Services 的 ML 框架團隊的副專家解決方案架構師,他幫助客戶和合作夥伴大規模部署 ML 訓練和推理解決方案。在加入 AWS 之前,Aman 畢業於萊斯大學,獲得計算機科學、數學和創業學位。
Kanwaljit Khurmi 是 Amazon Web Services 的 AI/ML 首席解決方案架構師。他與 AWS 產品團隊、工程師和客戶合作,提供指導和技術支持,以改善他們在使用 AWS 時的混合 ML 解決方案的價值。Kanwaljit 專注於幫助客戶處理容器化和機器學習應用程序。
Sean Smith 是 AWS 的高級專家解決方案架構師,專注於 HPC 和生成式 AI。在此之前,Sean 曾擔任 AWS Batch 和 CfnCluster 的軟體工程師,成為創建 AWS ParallelCluster 團隊的第一位工程師。
Ty Bergstrom 是 Amazon Web Services 的軟體工程師。他在 Amazon SageMaker 的 Hyperpod 集群平台上工作。
新聞來源
本文由 AI 台灣 使用 AI 編撰,內容僅供參考,請自行進行事實查核。加入 AI TAIWAN Google News,隨時掌握最新 AI 資訊!