

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

# 適用於 Kubeflow 管道的 SageMaker AI 元件
<a name="kubernetes-sagemaker-components-for-kubeflow-pipelines"></a>

使用適用於 Kubeflow 管道的 SageMaker AI 元件，您可以從 Kubeflow 管道建立和監視原生 SageMaker AI 訓練、調校、端點部署和批次轉換任務。透過在 SageMaker AI 上執行 Kubeflow 管道任務，您可以將資料處理和訓練任務從 Kubernetes 叢集移至 SageMaker AI 的機器學習最佳化受管服務。本文件假設您事先了解 Kubernetes 和 Kubeflow。

**Topics**
+ [什麼是 Kubeflow 管道？](#what-is-kubeflow-pipelines)
+ [什麼是 Kubeflow 管道元件？](#kubeflow-pipeline-components)
+ [為什麼要使用適用於 Kubeflow 管道的 SageMaker AI 元件？](#why-use-sagemaker-components)
+ [適用於 Kubeflow 管道的 SageMaker AI 元件版本](#sagemaker-components-versions)
+ [適用於 Kubeflow 管道的 SageMaker AI 元件清單](#sagemaker-components-list)
+ [IAM 許可](#iam-permissions)
+ [轉換管道以使用 SageMaker AI](#converting-pipelines-to-use-amazon-sagemaker)
+ [安裝 Kubeflow 管道](kubernetes-sagemaker-components-install.md)
+ [使用 SageMaker AI 元件](kubernetes-sagemaker-components-tutorials.md)

## 什麼是 Kubeflow 管道？
<a name="what-is-kubeflow-pipelines"></a>

Kubeflow 管道 (KFP) 是一個平台，可用來建置和部署以 Docker 容器為基礎的可攜式、可擴充機器學習 (ML) 工作流程。Kubeflow 管道平台由下列各項組成：
+ 用於管理和追蹤實驗、工作和執行的使用者介面 (UI)。
+ 用於排程多步驟機器學習 (ML) 工作流程的引擎 (Argo)。
+ 用於定義和操作管道和元件的 SDK。
+ 使用 SDK 與系統互動的筆記本。

管道是對機器學習 (ML) 工作流程的一項描述，以[有向無環圖](https://www.kubeflow.org/docs/pipelines/concepts/graph/)來表示。工作流程中的每個步驟都會以 Kubeflow 管道[元件](https://www.kubeflow.org/docs/pipelines/overview/concepts/component/)表示，也就是 適用於 Python (Boto3) 的 AWS SDK 模組。

如需與 Kubeflow 管道相關的詳細資訊，請參閱 [Kubeflow 管道文件](https://www.kubeflow.org/docs/pipelines/)。

## 什麼是 Kubeflow 管道元件？
<a name="kubeflow-pipeline-components"></a>

Kubeflow 管道元件是用來執行 Kubeflow 管道中某個步驟的一組程式碼。元件由 Docker 映像中內建的 Python 模組表示。管道執行時，元件的容器會在執行 Kubeflow 之 Kubernetes 叢集的其中一個工作者節點上具現化，並執行您的邏輯。管道元件可以讀取先前元件的輸出，並建立管道中的下一個元件可以消耗的輸出。透過這些元件可以快速、輕鬆地為實驗和生產環境撰寫管道，而不必與基礎 Kubernetes 基礎設施互動。

您可以在 Kubeflow 管道中使用 SageMaker AI 元件。與其將您的邏輯封裝在自訂容器中，您可以使用 Kubeflow Pipelines SDK 載入組件並描述您的管道。管道執行時，您的指示會轉換為 SageMaker AI 任務或部署。然後，工作負載會在 SageMaker AI 的受管基礎設施上執行。

## 為什麼要使用適用於 Kubeflow 管道的 SageMaker AI 元件？
<a name="why-use-sagemaker-components"></a>

適用於 Kubeflow 管道的 SageMaker AI 元件為從 SageMaker AI 啟動運算密集型任務提供一種替代方法。這些元件將 SageMaker AI 與 Kubeflow 管道的可攜性和協同運作整合在一起。透過適用於 Kubeflow 管道的 SageMaker AI 元件，您可以作為 Kubeflow 管道工作流程的一部分來建立和監視 SageMaker AI 資源。管道中的每個任務都在 SageMaker AI 上執行，而不是在本機 Kubernetes 叢集上執行。如此一來，您可以利用 SageMaker AI 的關鍵功能，例如資料標記、大規模超參數調校和分散式訓練任務，或是一鍵式安全且可擴展的模型部署。來自 SageMaker AI 的任務參數、狀態、日誌和輸出都仍然可以從 Kubeflow 管道 UI 存取。

SageMaker AI 元件可將關鍵的 SageMaker AI 功能整合到您的 ML 工作流程，從準備資料到建置、訓練和部署 ML 模型。您可以建立完全使用這些元件建立的 Kubeflow 管道，或視需要將個別元件整合到您的工作流程中。元件可以有一個或兩個版本。元件的每個版本使用不同的後端。如需與這些版本相關的詳細資訊，請參閱[適用於 Kubeflow 管道的 SageMaker AI 元件版本](#sagemaker-components-versions)。

使用適用於 Kubeflow 管道的 SageMaker AI 元件無需額外收費。透過這些元件使用的任何 SageMaker AI 資源都會產生費用。

## 適用於 Kubeflow 管道的 SageMaker AI 元件版本
<a name="sagemaker-components-versions"></a>

適用於 Kubeflow 管道的 SageMaker AI 元件有兩個版本。每個版本利用不同的後端來建立和管理 SageMaker AI 上的資源。
+ 適用於 Kubeflow 管道的 SageMaker AI 元件版本 1 (v1.x 或更低版本) 使用 **[Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html)** (適用於 Python (Boto3) 的 AWS SDK) 作為後端。
+ 適用於 Kubeflow 管道的 SageMaker AI 元件版本 2 (v2.0.0-alpha2 和更高版本) 使用 [SageMaker AI Operator for Kubernetes (ACK)](https://github.com/aws-controllers-k8s/sagemaker-controller)。

  AWS 引進 [ACK](https://aws-controllers-k8s.github.io/community/)，以促進管理 AWS 雲端資源的 Kubernetes 原生方式。ACK 包含一組 AWS 服務特定的控制器，其中一個是 SageMaker AI 控制器。SageMaker AI 控制器可讓機器學習開發人員和資料科學家使用 Kubernetes 作為控制平面，以便在 SageMaker AI 中訓練、調整和部署機器學習 (ML) 模型。如需詳細資訊，請參閱 [SageMaker AI Operators for Kubernetes](https://aws-controllers-k8s.github.io/community/docs/tutorials/sagemaker-example/) 

適用於 Kubeflow 管道的 SageMaker AI 元件的兩個版本均受支援。但是，版本 2 提供了一些額外優點。尤其是：

1. 無論您是使用 Kubeflow 管道、Kubernetes CLI (`kubectl`) 還是其他 Kubeflow 應用程式 (例如筆記本)，都能從任何應用程式管理 SageMaker AI 資源，體驗保持一致。

1. 在 Kubeflow 管道工作流程之外，可以彈性地管理與監控 SageMaker AI 資源。

1. 如果您在 [AWS版本上部署了完整的 Kubeflow](https://awslabs.github.io/kubeflow-manifests/docs/about/)，則使用 SageMaker AI 元件的設定時間為零，因為 SageMaker AI 運算子是其部署的一部分。

## 適用於 Kubeflow 管道的 SageMaker AI 元件清單
<a name="sagemaker-components-list"></a>

以下是適用於 Kubeflow 管道的所有 SageMaker AI 元件及其可用版本的清單。或者，您可以[在 GitHub 中找到適用於 Kubeflow 管道的所有 SageMaker AI 元件](https://github.com/kubeflow/pipelines/tree/master/components/aws/sagemaker#versioning)。

**注意**  
我們鼓勵使用者盡量使用 SageMaker AI 元件的版本 2。

### Ground Truth 元件
<a name="ground-truth-components"></a>
+ **Ground Truth**

  Ground Truth 元件讓您可以直接透過 Kubeflow 管道工作流程提交 SageMaker AI Ground Truth 標籤工作。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/kubernetes-sagemaker-components-for-kubeflow-pipelines.html)
+ **工作團隊**

  工作團隊元件讓您可以直接從 Kubeflow 管道工作流程建立 SageMaker AI 私有工作團隊任務。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/kubernetes-sagemaker-components-for-kubeflow-pipelines.html)

### 資料處理元件
<a name="data-processing-components"></a>
+ **處理**

  處理元件讓您可以直接從 Kubeflow 管道工作流程將處理工作提交至 SageMaker AI。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/kubernetes-sagemaker-components-for-kubeflow-pipelines.html)

### 訓練元件
<a name="training-components"></a>
+ **訓練**

  訓練元件讓您可以直接透過 Kubeflow 管道工作流程提交 SageMaker 訓練工作。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/kubernetes-sagemaker-components-for-kubeflow-pipelines.html)
+ **超參數最佳化**

  超參數最佳化元件讓您可以直接從 Kubeflow 管道工作流程將超參數調校工作提交至 SageMaker AI。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/kubernetes-sagemaker-components-for-kubeflow-pipelines.html)

### 推論元件
<a name="inference-components-kfp"></a>
+ **託管部署**

  託管元件讓您可以從 Kubeflow 管道工作流程使用 SageMaker AI 託管服務部署模型。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/kubernetes-sagemaker-components-for-kubeflow-pipelines.html)
+ **批次轉換**

  批次轉換元件讓您可以透過 Kubeflow 管道工作流程針對 SageMaker AI 中的整個資料集執行推論任務。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/kubernetes-sagemaker-components-for-kubeflow-pipelines.html)
+ **模型監控**

  模型監控元件讓您可以透過 Kubeflow 管道工作流程監控生產環境中 SageMaker AI 機器學習模型的品質。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/kubernetes-sagemaker-components-for-kubeflow-pipelines.html)

## IAM 許可
<a name="iam-permissions"></a>

使用 SageMaker AI 元件部署 Kubeflow 管道需要以下三層驗證：
+ 授予閘道節點 (可以是本機機器或遠端執行個體) 存取 Amazon Elastic Kubernetes Service (Amazon EKS) 叢集的 IAM 角色。

  存取閘道節點的使用者會擔任此角色來執行以下操作：
  + 建立 Amazon EKS 叢集並安裝 KFP
  + 建立 IAM 角色
  + 為您的範例輸入資料建立 Amazon S3 儲存貯體

  角色需要以下許可：
  + CloudWatchLogsFullAccess 
  + [https://console.aws.amazon.com/iam/home?region=us-east-1#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAWSCloudFormationFullAccess](https://console.aws.amazon.com/iam/home?region=us-east-1#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAWSCloudFormationFullAccess) 
  + IAMFullAccess
  + AmazonS3FullAccess
  + AmazonEC2FullAccess
  + AmazonEKSAdminPolicy (使用 [Amazon EKS 身分型政策範例](https://docs.aws.amazon.com/eks/latest/userguide/security_iam_id-based-policy-examples.html)中的結構描述建立此政策) 
+ Kubernetes 管道 Pod (**kfp-example-pod-role**) 或 SageMaker AI Operator for Kubernetes 控制器 Pod 擔任的 Kubernetes IAM 執行角色，用於存取 SageMaker AI。此角色用來從 Kubernetes 建立和監控 SageMaker AI 工作。

  角色需要以下許可：
  + AmazonSageMakerFullAccess 

  您可以透過建立並連接自訂政策來限制 KFP 和控制器 Pod 的許可。
+ SageMaker AI 任務擔任的 SageMaker AI IAM 執行角色，可存取 Amazon S3 或 Amazon ECR (**kfp-example-sagemaker-execution-role**) 等 AWS 資源。

  SageMaker AI 任務使用此角色來執行以下操作：
  + 存取 SageMaker AI 資源
  + 從 Amazon S3 輸入資料
  + 將您的輸出模型儲存到 Amazon S3

  角色需要以下許可：
  + AmazonSageMakerFullAccess 
  + AmazonS3FullAccess 

## 轉換管道以使用 SageMaker AI
<a name="converting-pipelines-to-use-amazon-sagemaker"></a>

您可以透過移植一般 Python [處理容器](https://docs.aws.amazon.com/sagemaker/latest/dg/amazon-sagemaker-containers.html)和[訓練容器](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-training-algo.html)，將現有的管道轉換為使用 SageMaker AI。如果使用 SageMaker AI 進行推論，您還需要將 IAM 許可連接到叢集，並將成品轉換為模型。

# 安裝 Kubeflow 管道
<a name="kubernetes-sagemaker-components-install"></a>

[Kubeflow 管道 (KFP)](https://www.kubeflow.org/docs/components/pipelines/v2/introduction/) 是 Kubeflow 的管道協調流程元件。

您可以在現有的 Amazon Elastic Kubernetes Service (Amazon EKS) 上部署 Kubeflow 管道 (KFP) 或建立新的 Amazon EKS 叢集。使用閘道節點與叢集互動。閘道節點可以是您的本機機器或 Amazon EC2 執行個體。

以下部分將引導您完成設置和設定這些資源的步驟。

**Topics**
+ [選擇安裝選項](#choose-install-option)
+ [設定您的管道許可以存取 SageMaker AI](#configure-permissions-for-pipeline)
+ [存取 KFP 使用者介面 (Kubeflow 儀表板)](#access-the-kfp-ui)

## 選擇安裝選項
<a name="choose-install-option"></a>

Kubeflow 管道可作為 Kubeflow 在 上完整分佈的核心元件 AWS 或獨立安裝。

選取適用於您使用案例的選項：

1. [AWS 部署時的完整 Kubeflow](#full-kubeflow-deployment)

   若要使用 Kubeflow 管道以外的其他 Kubeflow 元件，請選擇完整的 [AWS Kubeflow 發行版](https://awslabs.github.io/kubeflow-manifests)部署。

1. [獨立 Kubeflow 管道部署](#kubeflow-pipelines-standalone)

   若要在不使用 Kubeflow 的其他元件的情況下使用 Kubeflow 管道，請獨立安裝 Kubeflow 管道。

### AWS 部署時的完整 Kubeflow
<a name="full-kubeflow-deployment"></a>

若要在 上安裝 Kubeflow 的完整版本 AWS，請從部署[指南上的 Kubeflow 或任何其他支援與各種服務 (Amazon S3、Amazon RDS、Amazon Cognito) 整合的部署選項中選擇 vanilla AWS](https://awslabs.github.io/kubeflow-manifests/docs/deployment/) 部署選項。 AWS Amazon S3 Amazon Cognito

### 獨立 Kubeflow 管道部署
<a name="kubeflow-pipelines-standalone"></a>

本節假設您的使用者具有建立角色和定義角色政策的權限。

#### 設定閘道節點
<a name="set-up-a-gateway-node"></a>

您可以使用本機機器或 Amazon EC2 執行個體作為閘道節點。閘道節點可用來建立 Amazon EKS 叢集並存取 Kubeflow 管道使用者介面。

完成以下步驟以設定節點。

1. 

**建立閘道節點。**

   您可以使用現有的 Amazon EC2 執行個體，也可以使用[啟動和設定 DLAMI](https://docs.aws.amazon.com/dlami/latest/devguide/launch-config.html) 中的步驟，使用最新的 Ubuntu 18.04 DLAMI 版本建立新執行個體。

1. 

**建立 IAM 角色以授予閘道節點對 AWS 資源的存取權。**

   建立具有下列資源許可的 IAM 角色：CloudWatch CloudFormation、IAM、Amazon EC2、Amazon S3、Amazon EKS。

   將下列內嵌政策連接到角色：
   + CloudWatchLogsFullAccess 
   + [https://console.aws.amazon.com/iam/home?region=us-east-1#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAWSCloudFormationFullAccess](https://console.aws.amazon.com/iam/home?region=us-east-1#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAWSCloudFormationFullAccess)
   + IAMFullAccess 
   + AmazonS3FullAccess 
   + AmazonEC2FullAccess 
   + AmazonEKSAdminPolicy (使用 [Amazon EKS 身分型政策範例](https://docs.aws.amazon.com/eks/latest/userguide/security_iam_id-based-policy-examples.html)中的結構描述建立此政策) 

   如需與將 IAM 許可新增至 IAM 角色相關的資訊，請參閱[新增和移除 IAM 身分許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)。

1. 

**安裝下列工具和用戶端**

   在閘道節點上安裝並設定下列工具和資源，以存取 Amazon EKS 叢集和 KFP 使用者介面 (UI)。
   + [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)：使用 AWS 服務的命令列工具。如需 AWS CLI 組態資訊，請參閱[設定 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)。
   + [aws-iam-authenticator](https://docs.aws.amazon.com/eks/latest/userguide/install-aws-iam-authenticator.html) 版本 0.1.31 和更高版本：使用 AWS IAM 憑證對 Kubernetes 叢集進行身分驗證的工具。
   + [https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html](https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html) 0.15 以上版本：使用 Amazon EKS 叢集的命令列工具。
   + [https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl)：用於處理 Kubernetes 叢集的命令列工具。該版本需要與您的 Kubernetes 版本在一個次要版本中相符。
   + [https://aws.amazon.com/sdk-for-python/](https://aws.amazon.com/sdk-for-python/).

     ```
     pip install boto3
     ```

#### 設定 Amazon EKS 叢集
<a name="set-up-anamazon-eks-cluster"></a>

1. 如果沒有現有的 Amazon EKS 叢集，請從閘道節點的命令列執行下列步驟，否則請跳過此步驟。

   1. 執行下列命令建立 1.17 或更高版本的 Amazon EKS 叢集。將 `<clustername>` 取代為任何叢集名稱。

      ```
      eksctl create cluster --name <clustername> --region us-east-1 --auto-kubeconfig --timeout=50m --managed --nodes=1
      ```

   1. 叢集建立完成後，請列出叢集節點，以確保您可以存取叢集。

      ```
      kubectl get nodes
      ```

1. 使用下列命令，確保目前的 `kubectl` 環境指向您的叢集。目前內容會在輸出中以星號 (\$1) 表示。

   ```
   kubectl config get-contexts
   
   CURRENT NAME     CLUSTER
   *   <username>@<clustername>.us-east-1.eksctl.io   <clustername>.us-east-1.eksctl.io
   ```

1. 如果所需的叢集未配置為目前的預設值，請使用下列指令更新預設值。

   ```
   aws eks update-kubeconfig --name <clustername> --region us-east-1
   ```

#### 安裝 Kubeflow 管道
<a name="install-kubeflow-pipelines"></a>

從閘道節點的終端機執行下列步驟，以在叢集上安裝 Kubeflow 管道。

1. 安裝所有[憑證管理員元件](https://cert-manager.io/docs/installation/kubectl/)。

   ```
   kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.9.1/cert-manager.yaml
   ```

1. 安裝 Kubeflow 管道。

   ```
   export PIPELINE_VERSION=2.0.0-alpha.5
   kubectl apply -k "github.com/kubeflow/pipelines/manifests/kustomize/env/cert-manager/cluster-scoped-resources?ref=$KFP_VERSION"
   kubectl wait --for condition=established --timeout=60s crd/applications.app.k8s.io
   kubectl apply -k "github.com/kubeflow/pipelines/manifests/kustomize/env/cert-manager/dev?ref=$KFP_VERSION"
   ```

1. 確保 Kubeflow 管道服務和其他相關資源正在執行中。

   ```
   kubectl -n kubeflow get all | grep pipeline
   ```

   您的輸出看起來應該如下所示。

   ```
   pod/ml-pipeline-6b88c67994-kdtjv                      1/1     Running            0          2d
   pod/ml-pipeline-persistenceagent-64d74dfdbf-66stk     1/1     Running            0          2d
   pod/ml-pipeline-scheduledworkflow-65bdf46db7-5x9qj    1/1     Running            0          2d
   pod/ml-pipeline-ui-66cc4cffb6-cmsdb                   1/1     Running            0          2d
   pod/ml-pipeline-viewer-crd-6db65ccc4-wqlzj            1/1     Running            0          2d
   pod/ml-pipeline-visualizationserver-9c47576f4-bqmx4   1/1     Running            0          2d
   service/ml-pipeline                       ClusterIP   10.100.170.170   <none>        8888/TCP,8887/TCP   2d
   service/ml-pipeline-ui                    ClusterIP   10.100.38.71     <none>        80/TCP              2d
   service/ml-pipeline-visualizationserver   ClusterIP   10.100.61.47     <none>        8888/TCP            2d
   deployment.apps/ml-pipeline                       1/1     1            1           2d
   deployment.apps/ml-pipeline-persistenceagent      1/1     1            1           2d
   deployment.apps/ml-pipeline-scheduledworkflow     1/1     1            1           2d
   deployment.apps/ml-pipeline-ui                    1/1     1            1           2d
   deployment.apps/ml-pipeline-viewer-crd            1/1     1            1           2d
   deployment.apps/ml-pipeline-visualizationserver   1/1     1            1           2d
   replicaset.apps/ml-pipeline-6b88c67994                      1         1         1       2d
   replicaset.apps/ml-pipeline-persistenceagent-64d74dfdbf     1         1         1       2d
   replicaset.apps/ml-pipeline-scheduledworkflow-65bdf46db7    1         1         1       2d
   replicaset.apps/ml-pipeline-ui-66cc4cffb6                   1         1         1       2d
   replicaset.apps/ml-pipeline-viewer-crd-6db65ccc4            1         1         1       2d
   replicaset.apps/ml-pipeline-visualizationserver-9c47576f4   1         1         1       2d
   ```

## 設定您的管道許可以存取 SageMaker AI
<a name="configure-permissions-for-pipeline"></a>

在本節中，您會建立 IAM 執行角色，授予 Kubeflow 管道 Pod 存取 SageMaker AI 服務的許可。

### SageMaker AI 元件版本 2 組態
<a name="permissions-for-SM-v2"></a>

若要執行適用於 Kubeflow 管道的 SageMaker AI 元件版本 2，您需要安裝 [SageMaker AI Operator for Kubernetes](https://github.com/aws-controllers-k8s/sagemaker-controller)，並設定角色型存取控制 (RBAC)，允許 Kubeflow 管道 Pod 在您的 Kubernetes 叢集中建立 SageMaker AI 自訂資源。

**重要**  
如果您使用 Kubeflow 管道獨立部署，請遵循本節的指示操作。如果您使用的是 AWS Kubeflow 版本 1.6.0-aws-b1.0.0 或更高版本，SageMaker AI 元件版本 2 已設定。

1. 安裝 SageMaker AI Operator for Kubernetes，以使用 SageMaker AI 元件版本 2。

   遵循[使用 ACK SageMaker AI 控制器進行機器學習教學課程](https://aws-controllers-k8s.github.io/community/docs/tutorials/sagemaker-example/#setup)的*設定*一節。

1. 針對 Kubeflow 管道 Pod 所使用的執行角色 (服務帳戶) 設定 RBAC 許可。在 Kubeflow 管道獨立部署中，管道執行會使用 `pipeline-runner` 服務帳戶在 `kubeflow` 命名空間中執行。

   1. 建立 [RoleBinding](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#rolebinding-example)，授予服務帳戶管理 SageMaker AI 自訂資源的許可。

      ```
      cat > manage_sagemaker_cr.yaml <<EOF
      apiVersion: rbac.authorization.k8s.io/v1
      kind: RoleBinding
      metadata:
      name: manage-sagemaker-cr  
      namespace: kubeflow
      subjects:
      - kind: ServiceAccount
      name: pipeline-runner
      namespace: kubeflow
      roleRef:
      kind: ClusterRole
      name: ack-sagemaker-controller 
      apiGroup: rbac.authorization.k8s.io
      EOF
      ```

      ```
      kubectl apply -f manage_sagemaker_cr.yaml
      ```

   1. 確保 RoleBinding 是透過執行以下命令建立的：

      ```
      kubectl get rolebinding manage-sagemaker-cr -n kubeflow -o yaml
      ```

### SageMaker AI 元件版本 1 組態
<a name="permissions-for-SM-v1"></a>

若要執行適用於 Kubeflow 管道的 SageMaker AI 元件版本 1，Kubeflow 管道 Pod 需要存取 SageMaker AI。

**重要**  
無論您是在 AWS 部署上使用完整的 Kubeflow，還是獨立使用 Kubeflow Pilepines，請遵循本節。

若要建立 IAM 執行角色，將 Kubeflow 管道 Pod 存取權授予 SageMaker AI，請遵循下列步驟：

1. 匯出您的叢集名稱 (例如*my-cluster-name*) 和叢集區域 (例如 *us-east-1*)。

   ```
   export CLUSTER_NAME=my-cluster-name
   export CLUSTER_REGION=us-east-1
   ```

1. 根據安裝類型，匯出命名空間和服務帳戶名稱。
   + 如需 AWS 安裝時的完整 Kubeflow，請將您的設定檔 `namespace`（例如 *kubeflow-user-example-com*) 和 *default-editor* 匯出為服務帳戶。

     ```
     export NAMESPACE=kubeflow-user-example-com
     export KUBEFLOW_PIPELINE_POD_SERVICE_ACCOUNT=default-editor
     ```
   + 對於獨立管道部署，請將 *kubeflow* 匯出為 `namespace`，將 *pipeline-runner* 匯出為服務帳戶。

     ```
     export NAMESPACE=kubeflow
     export KUBEFLOW_PIPELINE_POD_SERVICE_ACCOUNT=pipeline-runner
     ```

1. 使用下列命令[為 Amazon EKS 叢集建立 IAM OIDC 身分提供者](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html)。

   ```
   eksctl utils associate-iam-oidc-provider --cluster ${CLUSTER_NAME} \
               --region ${CLUSTER_REGION} --approve
   ```

1. 為 KFP Pod 建立 IAM 執行角色以存取 AWS 服務 (SageMaker AI、CloudWatch)。

   ```
   eksctl create iamserviceaccount \
   --name ${KUBEFLOW_PIPELINE_POD_SERVICE_ACCOUNT} \
   --namespace ${NAMESPACE} --cluster ${CLUSTER_NAME} \
   --region ${CLUSTER_REGION} \
   --attach-policy-arn arn:aws:iam::aws:policy/AmazonSageMakerFullAccess \
   --attach-policy-arn arn:aws:iam::aws:policy/CloudWatchLogsFullAccess \
   --override-existing-serviceaccounts \
   --approve
   ```

一旦您的管道許可設定為存取 SageMaker AI 元件第 1 版，請遵循[AWS 文件上 Kubeflow 上 Kubeflow](https://awslabs.github.io/kubeflow-manifests/docs/amazon-sagemaker-integration/sagemaker-components-for-kubeflow-pipelines/) 管道的 SageMaker AI 元件指南。

## 存取 KFP 使用者介面 (Kubeflow 儀表板)
<a name="access-the-kfp-ui"></a>

Kubeflow 管道使用者介面可用來管理和追蹤叢集上的實驗、工作和執行。如需有關如何從閘道節點存取 Kubeflow 管道使用者介面的指示，請遵循本節中與您的部署選項對應的步驟。

### AWS 部署時的完整 Kubeflow
<a name="access-kfp-ui-full-kubeflow-deployment"></a>

遵循[AWS 網站上的 Kubeflow](https://awslabs.github.io/kubeflow-manifests/docs/deployment/connect-kubeflow-dashboard/) 上的指示，連接到 Kubeflow 儀表板並導覽至管道索引標籤。

### 獨立 Kubeflow 管道部署
<a name="access-kfp-ui-standalone-kubeflow-pipelines-deployment"></a>

遵循以下步驟，使用連接埠轉遞功能，從閘道節點存取 Kubeflow 管道使用者介面。

#### 設定連接埠轉送至 KFP 使用者介面服務
<a name="set-up-port-forwarding-to-the-kfp-ui-service"></a>

從閘道節點的命令列執行下列命令。

1. 使用以下命令驗證 KFP 使用者介面服務是否正在執行。

   ```
   kubectl -n kubeflow get service ml-pipeline-ui
   
   NAME             TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
   ml-pipeline-ui   ClusterIP   10.100.38.71   <none>        80/TCP    2d22h
   ```

1. 執行下列命令以設定 KFP 使用者介面服務的連接埠轉送。這會將 KFP 使用者介面轉送到閘道節點上的連接埠 8080，並允許您從瀏覽器存取 KFP 使用者介面。

   ```
   kubectl port-forward -n kubeflow service/ml-pipeline-ui 8080:80
   ```

   如果沒有任何活動，遠端機器的連接埠轉發會停止。如果儀表板無法取得日誌或更新，請再次執行此命令。如果命令傳回錯誤，請確保您嘗試使用的連接埠上沒有任何進程已在執行。

#### 存取 KFP 使用者介面服務
<a name="set-up-port-forwarding-to-the-kfp-ui-service-access"></a>

您存取 KFP 使用者介面的方法取決於閘道節點類型。
+ 本地機器作為閘道節點：

  1. 在瀏覽器中存取儀表板，如下所示：

     ```
     http://localhost:8080
     ```

  1. 選擇**管道**以存取管道使用者介面。
+ 作為閘道節點的 Amazon EC2 執行個體：

  1. 您需要在 Amazon EC2 執行個體上設定 SSH 通道，才能從本機機器的瀏覽器存取 Kubeflow 儀表板。

     從本機機器新的終端工作階段中，執行下列命令。將 `<public-DNS-of-gateway-node>` 取代為您在 Amazon EC2 主控台上找到的執行個體 IP 地址。您也可以使用公有 DNS。將 `<path_to_key>` 取代為用來存取閘道節點的 pem 金鑰路徑。

     ```
     public_DNS_address=<public-DNS-of-gateway-node>
     key=<path_to_key>
     
     on Ubuntu:
     ssh -i ${key} -L 9000:localhost:8080 ubuntu@${public_DNS_address}
     
     or on Amazon Linux:
     ssh -i ${key} -L 9000:localhost:8080 ec2-user@${public_DNS_address}
     ```

  1. 在瀏覽器中存取儀表板。

     ```
     http://localhost:9000
     ```

  1. 選擇**管道**以存取 KFP 使用者介面。

#### (選用) 授予 SageMaker AI 筆記本執行個體存取 Amazon EKS 的權限，並從您的筆記本執行 KFP 管道。
<a name="add-access-to-additional-iam-users-or-roles"></a>

SageMaker 筆記本執行個體屬於全受管的 Amazon EC2 運算執行個體，其可執行 Jupyter 筆記本應用程式。您可以使用筆記本執行個體來建立和管理 Jupyter 筆記本，然後使用 適用於 Python (Boto3) 的 AWS SDK 或 KFP CLI 定義、編譯、部署和執行 KFP 管道。

1. 依照[建立 SageMaker 筆記本執行個體](https://docs.aws.amazon.com/sagemaker/latest/dg/gs-setup-working-env.html)中的步驟建立筆記本執行個體，然後將 `S3FullAccess` 政策連接至其 IAM 執行角色。

1. 從閘道節點的命令列執行下列命令，以擷取您建立之筆記本執行個體的 IAM 角色 ARN。以您的執行個體的名稱取代 `<instance-name>`。

   ```
   aws sagemaker describe-notebook-instance --notebook-instance-name <instance-name> --region <region> --output text --query 'RoleArn'
   ```

   此命令會以 `arn:aws:iam::<account-id>:role/<role-name>` 格式輸出 IAM 角色 ARN。記下此 ARN。

1. 執行此命令將以下政策 (AmazonSageMakerFullAccess、AmazonEKSWorkerNodePolicy、AmazonS3FullAccess) 連接到此 IAM 角色。將 `<role-name>` 取代為 ARN 中的 `<role-name>`。

   ```
   aws iam attach-role-policy --role-name <role-name> --policy-arn arn:aws:iam::aws:policy/AmazonSageMakerFullAccess
   aws iam attach-role-policy --role-name <role-name> --policy-arn arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy
   aws iam attach-role-policy --role-name <role-name> --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess
   ```

1. Amazon EKS 叢集使用 IAM 角色來控制對叢集的存取。這些規則在名為 `aws-auth` 的配置對應中實現。`eksctl` 提供用於讀取和編輯 `aws-auth` 設定對應的命令。只有擁有叢集存取權的使用者才能編輯此組態對應。

   `system:masters` 是具有叢集超級使用者許可的預設使用者群組之一。將您的使用者新增至此群組，或建立具有更嚴格許可的群組。

1. 透過執行以下命令，將角色繫結至叢集。將 `<IAM-Role-arn>` 取代為 IAM 角色的 ARN。`<your_username>` 可以是任何唯一的使用者名稱。

   ```
   eksctl create iamidentitymapping \
   --cluster <cluster-name> \
   --arn <IAM-Role-arn> \
   --group system:masters \
   --username <your-username> \
   --region <region>
   ```

1. 在 SageMaker AI 執行個體上開啟 Jupyter 筆記本，然後執行下列命令以確保其具有叢集的存取權。

   ```
   aws eks --region <region> update-kubeconfig --name <cluster-name>
   kubectl -n kubeflow get all | grep pipeline
   ```

# 使用 SageMaker AI 元件
<a name="kubernetes-sagemaker-components-tutorials"></a>

在本教學課程中，您會使用適用於 Kubeflow 管道的 SageMaker AI 元件來執行管道，以使用 Kmeans 搭配 SageMaker AI 上的 MNIST 資料集來訓練分類模型。此工作流程使用 Kubeflow 管道作為協調器，並使用 SageMaker AI 來執行工作流程的每個步驟。此範例取自現有的 [SageMaker AI 範例](https://github.com/aws/amazon-sagemaker-examples/blob/8279abfcc78bad091608a4a7135e50a0bd0ec8bb/sagemaker-python-sdk/1P_kmeans_highlevel/kmeans_mnist.ipynb)，並經過修改，以使用適用於 Kubeflow 管道的 SageMaker AI 元件。

您可以在 Python 中使用 定義管道， 適用於 Python (Boto3) 的 AWS SDK 然後使用 KFP 儀表板、KFP CLI 或 Boto3 來編譯、部署和執行工作流程。MNIST 分類管道範例的完整程式碼可在 [Kubeflow Github 儲存庫](https://github.com/kubeflow/pipelines/tree/master/samples/contrib/aws-samples/mnist-kmeans-sagemaker#mnist-classification-with-kmeans)中取得。要使用它，請將 Python 檔案複製到您的網關節點。

您可以在 GitHub 上找到其他 [SageMaker AI Kubeflow 管道範例](https://github.com/kubeflow/pipelines/tree/master/samples/contrib/aws-samples)。如需與所使用元件相關的資訊，請參閱 [KubeFlow 管道 GitHub 儲存庫](https://github.com/kubeflow/pipelines/tree/master/components/aws/sagemaker)。

若要執行分類管道範例，請建立 SageMaker AI IAM 執行角色，授予訓練任務存取 AWS 資源的許可，然後繼續執行與您的部署選項對應的步驟。

## 建立一個 SageMaker AI 執行角色
<a name="create-an-amazonsagemaker-execution-role"></a>

IAM 角色是由 SageMaker AI `kfp-example-sagemaker-execution-role` 任務擔任的執行期角色，用於存取 AWS 資源。在下列命令中，您可以建立名為 的 IAM 執行角色`kfp-example-sagemaker-execution-role`，連接兩個受管政策 (AmazonSageMakerFullAccess、AmazonS3FullAccess)，並與 SageMaker AI 建立信任關係，以授予 SageMaker AI 任務對這些 AWS 資源的存取權。

執行管道時，您可以將此角色作為輸入參數提供。

執行下列 命令以建立角色。請注意在輸出中傳回的 ARN。

```
SAGEMAKER_EXECUTION_ROLE_NAME=kfp-example-sagemaker-execution-role

TRUST="{ \"Version\": \"2012-10-17		 	 	 \", \"Statement\": [ { \"Effect\": \"Allow\", \"Principal\": { \"Service\": \"sagemaker.amazonaws.com\" }, \"Action\": \"sts:AssumeRole\" } ] }"
aws iam create-role --role-name ${SAGEMAKER_EXECUTION_ROLE_NAME} --assume-role-policy-document "$TRUST"
aws iam attach-role-policy --role-name ${SAGEMAKER_EXECUTION_ROLE_NAME} --policy-arn arn:aws:iam::aws:policy/AmazonSageMakerFullAccess
aws iam attach-role-policy --role-name ${SAGEMAKER_EXECUTION_ROLE_NAME} --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess

aws iam get-role --role-name ${SAGEMAKER_EXECUTION_ROLE_NAME} --output text --query 'Role.Arn'
```

## AWS 部署時的完整 Kubeflow
<a name="run-pipelines-on-full-kubeflow-deployment"></a>

請遵循 [SageMaker 訓練管道教學課程中的指示，使用 K 平均數對 MNIST 進行分類](https://awslabs.github.io/kubeflow-manifests/docs/amazon-sagemaker-integration/sagemaker-components-for-kubeflow-pipelines/)。

## 獨立 Kubeflow 管道部署
<a name="run-pipelines-on-standalone-kubeflow-pipelines-deployment"></a>

### 準備資料集
<a name="prepare-datasets"></a>

若要執行管道，您需要將資料擷取預處理指令碼上傳至 Amazon S3 儲存貯體。此儲存貯體和此範例的所有資源都必須位於 `us-east-1` 區域中。如需與建立儲存貯體相關的資訊，請參閱[建立儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/gsg/CreatingABucket.html)。

從您在閘道節點上複製的 Kubeflow 儲存庫 `mnist-kmeans-sagemaker` 資料夾中，執行下列命令，將 `kmeans_preprocessing.py` 檔案上傳到 Amazon S3 儲存貯體。將 `<bucket-name>` 變更為 Amazon S3 儲存貯體的名稱。

```
aws s3 cp mnist-kmeans-sagemaker/kmeans_preprocessing.py s3://<bucket-name>/mnist_kmeans_example/processing_code/kmeans_preprocessing.py
```

### 編譯和部署您的管道
<a name="compile-and-deploy-your-pipeline"></a>

定義管道之後，您必須先將其編譯成中繼表示形式，然後才能將其提交至叢集上的 Kubeflow 管道服務。中繼表示形式是壓縮成 tar.gz 檔案的 YAML 檔案形式的工作流程規格。您需要 KFP SDK 來編譯管道。

#### 安裝 KFP SDK
<a name="install-kfp-sdk"></a>

從閘道節點的命令列執行下列命令：

1. 按照 [Kubeflow 管道文件](https://www.kubeflow.org/docs/pipelines/sdk/install-sdk/)中的指示安裝 KFP SDK。

1. 使用以下命令驗證已安裝 KFP SDK：

   ```
   pip show kfp
   ```

1. 驗證已正確安裝 `dsl-compile`，如下所示：

   ```
   which dsl-compile
   ```

#### 編譯管道
<a name="compile-your-pipeline"></a>

您有三個選項可以與 Kubeflow 管道互動：KFP UI、KFP CLI 或 KFP SDK。以下各節說明使用 KFP 使用者介面和 CLI 的工作流程。

完成以下步驟以設定節點。

1. 使用您的 Amazon S3 儲存貯體名稱和 IAM 角色 ARN 修改您的 Python 文件。

1. 使用 `dsl-compile` 命令行中的命令來編譯管道，如下所示。將 `<path-to-python-file>` 取代為管道的路徑，將 `<path-to-output>` 取代為您希望 tar.gz 檔案所在的位置。

   ```
   dsl-compile --py <path-to-python-file> --output <path-to-output>
   ```

#### 使用 KFP CLI 上傳並執行管道
<a name="upload-and-run-the-pipeline-using-the-kfp-cli"></a>

從閘道節點的命令列完成下列步驟。KFP 會將您的管道執行組織為實驗。您可以選擇指定實驗名稱。如果未指定，則該執行將列在**預設值**實驗下。

1. 上傳您的管道，如下所示：

   ```
   kfp pipeline upload --pipeline-name <pipeline-name> <path-to-output-tar.gz>
   ```

   您的輸出看起來應該如下所示。請記下管道 `ID`。

   ```
   Pipeline 29c3ff21-49f5-4dfe-94f6-618c0e2420fe has been submitted
   
   Pipeline Details
   ------------------
   ID           29c3ff21-49f5-4dfe-94f6-618c0e2420fe
   Name         sm-pipeline
   Description
   Uploaded at  2020-04-30T20:22:39+00:00
   ...
   ...
   ```

1. 使用以下命令來建立執行。KFP CLI 執行命令目前不支援在建立執行時指定輸入參數。您需要在編譯之前更新 適用於 Python (Boto3) 的 AWS SDK 管道檔案中的參數。將 `<experiment-name>` 和 `<job-name>` 取代為任何名稱。將 `<pipeline-id>` 取代為您提交的管道的 ID。將 `<your-role-arn>` 取代為 `kfp-example-pod-role` 的 ARN。將 `<your-bucket-name>` 取代為您建立的 Amazon S3 儲存貯體的名稱。

   ```
   kfp run submit --experiment-name <experiment-name> --run-name <job-name> --pipeline-id <pipeline-id> role_arn="<your-role-arn>" bucket_name="<your-bucket-name>"
   ```

   您也可以使用作為 `dsl-compile` 命令輸出而建立的已編譯管道套件直接提交執行。

   ```
   kfp run submit --experiment-name <experiment-name> --run-name <job-name> --package-file <path-to-output> role_arn="<your-role-arn>" bucket_name="<your-bucket-name>"
   ```

   您的輸出看起來應如以下所示：

   ```
   Creating experiment aws.
   Run 95084a2c-f18d-4b77-a9da-eba00bf01e63 is submitted
   +--------------------------------------+--------+----------+---------------------------+
   | run id                               | name   | status   | created at                |
   +======================================+========+==========+===========================+
   | 95084a2c-f18d-4b77-a9da-eba00bf01e63 | sm-job |          | 2020-04-30T20:36:41+00:00 |
   +--------------------------------------+--------+----------+---------------------------+
   ```

1. 導覽至使用者介面以檢查工作進度。

#### 使用 KFP 使用者介面上傳並執行管道
<a name="upload-and-run-the-pipeline-using-the-kfp-ui"></a>

1. 在左側面板中，選擇**管道**標籤。

1. 在右上角選擇 **\$1 上傳管道**。

1. 輸入名稱和描述。

1. 選擇**上傳檔案**，然後輸入您使用 CLI 或使用 適用於 Python (Boto3) 的 AWS SDK建立之 tar.gz 檔案的路徑。

1. 在左側面板中，選擇**管道**標籤。

1. 尋找您建立的管道。

1. 選擇 **\$1 建立執行**。

1. 輸入您的輸入參數。

1. 選擇**執行**。

### 執行預測
<a name="running-predictions"></a>

部署分類管道後，您可以針對由部署元件建立的端點執行分類預測。使用 KFP 使用者介面檢查 `sagemaker-deploy-model-endpoint_name` 的輸出成品。下載 .tgz 檔案以擷取端點名稱，或檢查您所使用區域中的 SageMaker AI 主控台。

#### 設定執行預測的許可
<a name="configure-permissions-to-run-predictions"></a>

如果要從閘道節點執行預測，請略過本節。

**若要使用任何其他機器執行預測，請將 `sagemaker:InvokeEndpoint` 許可指派給用戶端機器使用的 IAM 角色。**

1. 在閘道節點上執行下列命令以建立 IAM 政策檔案：

   ```
   cat <<EoF > ./sagemaker-invoke.json
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "sagemaker:InvokeEndpoint"
               ],
               "Resource": "*"
           }
       ]
   }
   EoF
   ```

1. 將政策連接至用戶端節點的 IAM 角色。

   執行下列命令。將 `<your-instance-IAM-role>` 取代為 IAM 角色的名稱。將 `<path-to-sagemaker-invoke-json>` 取代為您建立的政策檔案的路徑。

   ```
   aws iam put-role-policy --role-name <your-instance-IAM-role> --policy-name sagemaker-invoke-for-worker --policy-document file://<path-to-sagemaker-invoke-json>
   ```

#### 執行預測
<a name="run-predictions"></a>

1. 使用下列內容，從名為 `mnist-predictions.py`的用戶端機器建立 適用於 Python (Boto3) 的 AWS SDK 檔案。取代 `ENDPOINT_NAME` 變數。此指令碼會載入 MNIST 資料集，透過這些數字建立 CSV，然後將 CSV 傳送至端點進行預測並列印結果。

   ```
   import boto3
   import gzip
   import io
   import json
   import numpy
   import pickle
   
   ENDPOINT_NAME='<endpoint-name>'
   region = boto3.Session().region_name
   
   # S3 bucket where the original mnist data is downloaded and stored
   downloaded_data_bucket = f"jumpstart-cache-prod-{region}"
   downloaded_data_prefix = "1p-notebooks-datasets/mnist"
   
   # Download the dataset
   s3 = boto3.client("s3")
   s3.download_file(downloaded_data_bucket, f"{downloaded_data_prefix}/mnist.pkl.gz", "mnist.pkl.gz")
   
   # Load the dataset
   with gzip.open('mnist.pkl.gz', 'rb') as f:
       train_set, valid_set, test_set = pickle.load(f, encoding='latin1')
   
   # Simple function to create a csv from our numpy array
   def np2csv(arr):
       csv = io.BytesIO()
       numpy.savetxt(csv, arr, delimiter=',', fmt='%g')
       return csv.getvalue().decode().rstrip()
   
   runtime = boto3.Session(region).client('sagemaker-runtime')
   
   payload = np2csv(train_set[0][30:31])
   
   response = runtime.invoke_endpoint(EndpointName=ENDPOINT_NAME,
                                      ContentType='text/csv',
                                      Body=payload)
   result = json.loads(response['Body'].read().decode())
   print(result)
   ```

1. 執行 適用於 Python (Boto3) 的 AWS SDK 檔案，如下所示：

   ```
   python mnist-predictions.py
   ```

### 檢視結果和日誌
<a name="view-results-and-logs"></a>

管道執行時，您可以選擇任何元件來檢查執行詳細資訊，例如輸入和輸出。這會列出已建立資源的名稱。

如果成功處理 KFP 要求並建立了 SageMaker AI 工作，則 KFP UI 中的元件日誌會提供在 SageMaker AI 中建立之任務的連結。如果成功建立工作，也會提供 CloudWatch 記錄。

如您在同一叢集上執行過多管道工作，您可能會看到錯誤訊息，指出您沒有足夠的 Pod 可用。若要修正此問題，請登入閘道節點並刪除由您未使用的管道所建立的 Pod：

```
kubectl get pods -n kubeflow
kubectl delete pods -n kubeflow <name-of-pipeline-pod>
```

### 清除
<a name="cleanup"></a>

管道完成後，您需要清除資源。

1. 如果管道執行未正確結束，請從 KFP 儀表板中選擇**終止**來終止管道執行。

1. 如果**終止**選項不起作用，請登入閘道節點並手動終止管道執行所建立的所有 Pod，如下所示：

   ```
   kubectl get pods -n kubeflow
   kubectl delete pods -n kubeflow <name-of-pipeline-pod>
   ```

1. 使用 AWS 您的帳戶登入 SageMaker AI 服務。手動停止所有訓練、批次轉換和 HPO 工作。刪除模型、資料儲存貯體和端點，以避免產生任何額外費用。終止管道執行並不會停止 SageMaker AI 中的任務。