使用 SageMaker提供的專案範本 - Amazon SageMaker

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 SageMaker提供的專案範本

重要

自 2024 年 9 月 9 日起,不再支援使用 AWS CodeCommit 儲存庫的專案範本。對於新專案,請從使用第三方 Git 儲存庫的可用專案範本中選取 。

Amazon SageMaker 提供專案範本,可建立您所需的基礎設施,以建立 ML 模型的持續整合和持續部署 (CI/CD) MLOps解決方案。使用這些範本來處理資料、擷取功能、訓練和測試模型、在模型登錄檔中註冊 SageMaker 模型,以及部署模型以進行推論。您可以根據自己的需求自訂種子程式碼和組態檔。

注意

自 2022 年 7 月 25 日起,我們需要額外角色才能使用專案範本。如需必要角色的完整清單以及有關如何建立這些角色的指示,請參閱授予使用專案所需的 SageMaker Studio 許可。如果您沒有新角色,當您嘗試建立新專案且無法繼續時,您會收到CodePipeline 未獲授權執行角色 arn:aws:iam::xxx:role/service-role/ AssumeRole 的AmazonSageMakerServiceCatalogProductsCodePipelineRole錯誤訊息。

SageMaker 專案範本為您提供下列程式碼儲存庫、工作流程自動化工具和管道階段的選擇:

  • 程式碼儲存庫: AWS CodeCommit 或第三方 Git 儲存庫,例如 GitHub 和 Bitbucket

  • CI/CD 工作流程自動化: AWS CodePipeline 或 Jenkins

  • 管道階段:模型建置和訓練、模型部署或兩者兼有

下列討論提供您在建立 SageMaker 專案時可以選擇的每個範本的概觀。您也可以依照步驟 1:建立專案演練的專案,在 Studio (或 Studio Classic) 中檢視可用的範本。

如需 step-by-step如何建立真實專案的指示,您可以遵循其中一個專案演練:

MLOps 模型建置、訓練和部署的範本

此範本是以下兩個範本的組合,每個範本都可以獨立使用,並包含這些範本中提供的所有資源。

  • 程式碼儲存庫: AWS CodeCommit

  • CI/CD 工作流程自動化: AWS CodePipeline

MLOps 模型建置和訓練的範本

當您想要MLOps解決方案處理資料、擷取功能、訓練和測試模型,以及在模型登錄檔中註冊 SageMaker 模型時,請使用此範本。

此範本提供以下資源:

  • 包含範例程式碼的 AWS CodeCommit 儲存庫,可在 Python 程式碼中建立 Amazon SageMaker 管道,並示範如何建立和更新 SageMaker 管道。此儲存庫也有範例 Python 筆記本,您可以在 Studio (或 Studio Classic) 中開啟和執行。

  • 具有來源和建置步驟的 AWS CodePipeline 管道。來源步驟指向 CodeCommit 儲存庫。建置步驟會從該儲存庫取得程式碼、建立和更新 SageMaker 管道、啟動管道執行,並等待管道執行完成。

  • Amazon S3 儲存貯體,用於存放成品,包括 CodePipeline 和 CodeBuild成品,以及管道 SageMaker 執行所產生的任何成品。

下圖說明此範本用來協助您建置和訓練模型的工作流程 AWS 和資源。

使用專案範本建置的管道工作流程,用於模型建置和訓練。
MLOps 模型部署的範本

使用此範本自動將模型登錄檔中的 SageMaker 模型部署到 SageMaker 端點,以進行即時推論。此範本會識別模型註冊表中的變更。註冊並核准新模型版本後,它會自動啟動部署。

範本會佈建具有組態檔案的 CodeCommit 儲存庫,以指定模型部署步驟、將端點定義為基礎設施的 AWS CloudFormation 範本,以及測試端點的種子程式碼。

此範本提供以下資源:

  • 包含範例程式碼的 AWS CodeCommit 儲存庫,可在預備和生產環境中將模型部署到端點。

  • 具有來源 deploy-to-staging、建置和 deploy-to-production步驟的 AWS CodePipeline 管道。來源步驟指向 CodeCommit 儲存庫,而建置步驟會從該儲存庫取得程式碼,並產生要部署的 CloudFormation 堆疊。 deploy-to-staging 和 deploy-to-production 步驟會將 CloudFormation 堆疊部署到各自的環境。預備階段和生產建置步驟之間有一個手動核准步驟,因此MLOps工程師必須先核准模型,才能部署到生產環境。

    在 CodeCommit 儲存庫中的範例程式碼中,也有具有預留位置測試的程式設計核准步驟。您可以新增其他測試來取代預留位置測試。

  • Amazon S3 儲存貯體,用於存放成品,包括 CodePipeline 和 CodeBuild成品,以及管道 SageMaker 執行所產生的任何成品。

  • 當模型套件版本核准或拒絕時啟動管道 CloudWatch 的事件。

下圖說明此範本用來協助您部署模型的工作流程 AWS 和資源。

使用專案範本建置的管道工作流程,以進行模型部署。

如前所述,請參閱專案演練,以取得使用此範本建立真實專案的示範。

您可以在專案範本中自訂部署儲存庫,以您喜歡的方式從模型登錄檔部署模型。範本 CloudFormation 會使用 建立即時端點,以做為範例。您可以更新部署以使用 SageMaker SDK、boto3 或任何其他可以建立端點而非 API的 CFN。如果您需要更新 CodeBuild 步驟作為部署管道的一部分,您可以建立自訂範本。

MLOps 模型建置、訓練、部署和 Amazon SageMaker Model Monitor 的範本

此範本是模型建置、訓練和部署MLOps範本的延伸。它包括範本的模型建置、訓練和部署元件,以及提供下列監控類型的額外 Amazon SageMaker Model Monitor 範本:

  • 程式碼儲存庫: AWS CodeCommit

  • CI/CD 工作流程自動化: AWS CodePipeline

MLOps Amazon SageMaker Model Monitor 的範本

您可以使用此範本做為MLOps解決方案,部署一或多個 Amazon SageMaker 資料品質、模型品質、模型偏差和模型可解釋性監控器,以監控 SageMaker 推論端點上部署的模型。

此範本提供以下資源:

  • 包含範例 Python 程式碼的 AWS CodeCommit 儲存庫,可從 SageMaker 模型登錄檔取得監視器使用的基準,並更新範本的預備和生產環境參數。它還包含用於建立 Amazon SageMaker Model Monitors 的 AWS CloudFormation 範本。

  • 具有來源、建置和部署步驟的 AWS CodePipeline 管道。來源步驟指向 CodePipeline 儲存庫。建置步驟會從該儲存庫取得程式碼、從模型註冊表取得基準,並更新暫存和生產環境的範本參數。部署步驟會將設定的監視器部署到暫存和生產環境中。在DeployStaging階段內的手動核准步驟要求您先驗證生產 SageMaker 端點是否在核准並移至DeployProd階段InService之前。

  • 範本使用MLOps範本建立模型、訓練和部署時建立的相同 S3 儲存貯體,以存放監視器的輸出。

  • 每次更新預備 SageMaker 端點或將程式碼變更遞交至 CodePipeline儲存庫 AWS CodePipeline 時,兩個 Amazon EventBridge 事件規則都會啟動 Amazon SageMaker Model Monitor。

MLOps 映像建置、模型建置和模型部署的範本

此範本是 MLOps 模型建置、訓練和部署的範本 的延伸。它包括該範本的模型建置、訓練和部署元件,以及下列選項:

  • 包括處理映像 - 建立管道

  • 包括訓練映像 - 建立管道

  • 包含推論映像 - 建置管道

對於在建立專案期間選取的每個元件,可使用範本建立下列項目:

  • Amazon ECR儲存庫

  • SageMaker映像

  • 包含您可以自訂的 Dockerfile 的 CodeCommit 儲存庫

  • 由儲存 CodePipeline 庫變更所 CodePipeline 啟動的

  • 建置 Docker 映像並在 Amazon ECR儲存庫中註冊的 CodeBuild 專案

  • 在排程 CodePipeline 上啟動 的 EventBridge 規則

啟動 CodePipeline 時,它會建立新的 Docker 容器,並將其註冊至 Amazon ECR儲存庫。當新的容器向 Amazon ECR儲存庫註冊時,新的 ImageVersion 會新增至 SageMaker 映像。這會啟動模型建置管道,進而啟動部署管道。

如果適用,新建立的映像將用於工作流程的模型建置、訓練和部署部分。

MLOps 使用 與第三方 Git 儲存庫建立模型、訓練和部署的範本 CodePipeline

  • 代碼儲存庫:第三方 Git。建立從 AWS 您的帳戶到 GitHub 使用者或組織的 AWS CodeStar 連線。將含有索引鍵 sagemaker 和值 true 的標籤新增至此 AWS CodeStar 連線。

  • CI/CD 工作流程自動化: AWS CodePipeline

此範本提供以下資源:

  • 與一或多個客戶指定的 Git 儲存庫建立關聯。

  • 具有來源 deploy-to-staging、建置和 deploy-to-production步驟的 AWS CodePipeline 管道。來源步驟指向第三方 Git 儲存庫,而建置步驟會從該儲存庫取得程式碼,並產生要部署的 CloudFormation 堆疊。 deploy-to-staging 和 deploy-to-production 步驟會將 CloudFormation堆疊部署到各自的環境。預備階段和生產建置步驟之間有一個手動核准步驟,因此MLOps工程師必須先核准模型,才能部署到生產環境。

  • 將種子代碼資訊填入 Git 儲存庫的 AWS CodeBuild 專案。這需要 AWS CodeStar 從 AWS 您的帳戶連線到 Git 儲存庫主機上的 帳戶。

  • Amazon S3 儲存貯體,用於存放成品,包括 CodePipeline 和 CodeBuild成品,以及管道 SageMaker 執行所產生的任何成品。

如前所述,請參閱使用第三方 Git 儲存庫的專案演練,以取得使用此範本建立真實專案的示範。

MLOps 使用 Jenkins 與第三方 Git 儲存庫建立模型、訓練和部署的範本

  • 代碼儲存庫:第三方 Git。建立從 AWS 您的帳戶到 GitHub 使用者或組織的 AWS CodeStar 連線。將含有鍵 sagemaker 和值 true 的標籤新增至此 AWS CodeStar 連線。

  • CI/CD 工作流程自動化:Jenkins

此範本提供以下資源:

  • 與一或多個客戶指定的 Git 儲存庫建立關聯。

  • 種子程式碼可產生具有來源、建置、 deploy-to-staging和 deploy-to-production 步驟的 Jenkins 管道。來源步驟會指向客戶指定的 Git 儲存庫。建置步驟會從該儲存庫取得程式碼,並產生兩個 CloudFormation 堆疊。部署步驟會將 CloudFormation 堆疊部署到各自的環境。預備步驟與生產步驟之間有核准步驟。

  • 將種子代碼資訊填入 Git 儲存庫的 AWS CodeBuild 專案。這需要 AWS CodeStar 從 AWS 您的帳戶連線到 Git 儲存庫主機上的 帳戶。

  • 存放 SageMaker 專案和 SageMaker 管道成品的 Amazon S3 儲存貯體。

範本會建立專案與來源控制儲存庫之間的關聯,但您需要執行其他手動步驟,才能在 AWS 帳戶與 Jenkins 之間建立通訊。如需詳細步驟,請參閱使用第三方來源控制和 Jenkins 建立 Amazon SageMaker 專案

這些指示可協助您建置下圖所示的架構,在此範例中使用 GitHub 作為來源控制儲存庫。如圖所示,您正在將 Git 儲存庫附加至專案以簽入和管理程式碼版本。當 Jenkins 在 Git 儲存庫中偵測到模型建置程式碼的變更時,會啟動模型建置管道。您也會將專案連線至 Jenkins,以協調模型部署步驟,這些步驟會在您核准在模型登錄檔中登錄的模型時開始,或在 Jenkins 偵測到模型部署程式碼的變更時開始。

使用專案範本建置的管道工作流程。

總而言之,這些步驟會引導您完成下列任務:

  1. 在 AWS 和 GitHub 帳戶之間建立連線。

  2. 建立 Jenkins 帳戶並匯入所需的外掛程式。

  3. 建立 Jenkins IAM使用者和許可政策。

  4. 在 Jenkins 伺服器上設定 Jenkins IAM使用者的 AWS 憑證。

  5. 建立權API杖以與您的 Jenkins 伺服器通訊。

  6. 使用 CloudFormation 範本來設定 EventBridge 規則,以監控新核准模型的模型登錄檔。

  7. 建立專案,該 SageMaker 專案會使用模型建置和部署程式碼來植入 GitHub 您的儲存庫。

  8. 使用模型建置種子程式碼建立 Jenkins 模型建置管道。

  9. 使用模型部署種子程式碼建立 Jenkins 模型部署管道。

Salesforce 的模型部署

  • 程式碼儲存庫: AWS CodeCommit

  • CI/CD 工作流程自動化: AWS CodePipeline

此範本提供以下資源:

  • 包含範例程式碼的 AWS CodeCommit 儲存庫,可在 Python 程式碼中建立 Amazon SageMaker 管道,並示範如何建立和更新管道。此儲存庫也有 Python Jupyter 筆記本,您可以在 Studio (或 Studio Classic) 中開啟和執行。

  • 具有來源和建置步驟的 AWS CodePipeline 管道。來源步驟指向 CodeCommit 儲存庫。建置步驟會從儲存庫取得程式碼、建立和更新 SageMaker 管道、啟動管道執行,並等待管道執行完成。

  • Amazon S3 儲存貯體,用於存放成品,包括 CodePipeline 和 CodeBuild成品,以及管道 SageMaker 執行所產生的任何成品。

您的管理員可能需要執行其他設定,才能從 Salesforce Data Cloud 存取 SageMaker Studio 的資料,以建置 AI/ML 模型。如需詳細資訊和指示,請參閱部落格文章中的解決方案概觀 使用 Amazon SageMaker 和 Salesforce Data Cloud 整合,透過 AI/ML 為您的 Salesforce 應用程式提供支援

下圖會說明此範本用來協助您建置和訓練模型的高階工作流程。在您設定 Salesforce 資料雲端與 Data Wrangler 之間的連線並預先處理資料之後,請使用 Salesforce 的模型部署專案範本自動化模型訓練和部署。範本提供可自訂的模型部署程式碼和範例筆記本 AWS CodePipeline ,以訓練模型並將其註冊到 SageMaker 模型登錄檔中。核准模型後,端點會透過 API Gateway API 公開至 Salesforce,客戶可以從 Salesforce 內開始對部署的模型進行預測。

注意

此範本允許 API Gateway 設定的 Transport Layer Security (TLS) 政策 1.0 和 1.1 版。您可以使用自訂網域名稱讓此組態更安全。如需詳細資訊,請參閱設定 REST 的自訂網域名稱APIs

Salesforce 專案範本使用步驟的簡化圖表。

部落格文章使用 Amazon SageMaker 和 Salesforce Data Cloud 整合,透過 AI/ML 為您的 Salesforce 應用程式提供詳細說明,以引導您完成下列步驟:

  1. 選取 Salesforce 的模型部署專案範本,並提供密碼管理員名稱。

  2. 複製儲存庫,以使用自訂 SageMaker提供的範例筆記本和模型部署程式碼。

  3. 使用 Data Wrangler 預先處理您的資料。

    1. 建立與 Salesforce 資料雲端的連線,然後將資料匯入 Data Wrangler。

    2. 使用 Data Wrangler 來準備具有一些轉換範例的資料。

    3. 啟動處理工作以使用 Data Wrangler 組態來處理資料。

  4. 訓練模型。

  5. 在模型登錄檔中登錄模型。

  6. 在模型登錄檔中核准模型。

  7. 在 SageMaker 主控台中檢視您的端點。

  8. API URL 從 Salesforce Einstein Studio 叫用 ,以註冊和使用 Einstein Studio 中的模型推論。

下圖更詳細地顯示 SageMaker 專案範本搭配 Salesforce Data Cloud Integration 使用的工作流程 AWS 和資源。

Salesforce 專案範本使用步驟和資源的圖表。

更新 SageMaker 專案以使用第三方 Git 儲存庫

附加至 AmazonSageMakerServiceCatalogProductsUseRole 角色的受管政策已於 2021 年 7 月 27 日更新,以便與第三方 Git 範本搭配使用。在此日期之後加入 Amazon SageMaker Studio (或 Studio Classic) 並啟用專案範本的使用者會使用新的政策。在此日期之前加入的使用者必須更新政策才能使用這些範本。使用下列其中一項來更新政策:

  • 刪除角色並切換 Studio (或 Studio Classic) 設定

    1. 在IAM主控台中,刪除 AmazonSageMakerServiceCatalogProductsUseRole

    2. 在 Studio (或 Studio Classic) 控制面板中,選擇編輯設定

    3. 切換兩個設定,然後選擇提交

  • 在IAM主控台中,將下列許可新增至 AmazonSageMakerServiceCatalogProductsUseRole

    { "Effect": "Allow", "Action": [ "codestar-connections:UseConnection" ], "Resource": "arn:aws:codestar-connections:*:*:connection/*", "Condition": { "StringEqualsIgnoreCase": { "aws:ResourceTag/sagemaker": "true" } } }, { "Effect": "Allow", "Action": [ "s3:PutObjectAcl" ], "Resource": [ "arn:aws:s3:::sagemaker-*" ] }