

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

# 執行管道
<a name="run-pipeline"></a>

將管道的步驟定義為有向無環圖 (DAG) 之後，您可以執行管道，其會執行 DAG 中定義的步驟。下列逐步解說為您展示如何使用 Amazon SageMaker Studio 中的拖放視覺化編輯器或 Amazon SageMaker Python SDK 來執行 Amazon SageMaker AI 管道。

## 執行管道 (管道設計工具)
<a name="run-pipeline-designer"></a>

若要啟動管道的新執行，請執行下列動作：

------
#### [ Studio ]

1. 請遵循[啟動 Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html) 中的指示來開啟 SageMaker Studio。

1. 在左側導覽窗格中，選擇 **Pipelines** (管道)。

1. (選用) 若要依名稱篩選管道清單，請在搜尋欄位中輸入完整或部分管道名稱。

1. 選擇管道名稱以開啟管道詳細資訊檢視。

1. 選擇右上角的**視覺化編輯器**。

1. 若要從最新版本開始執行，請選擇**執行**。

1. 若要從特定版本開始執行，請遵循下列步驟：
   + 選擇底部工具列中的版本圖示以開啟版本面板。
   + 選擇您要執行的管道版本。
   + 將滑鼠懸停在版本項目上方以顯示三點功能表，然後選擇**執行**。
   + (選用) 若要檢視管道的先前版本，請從版本面板的三點功能表中選擇**預覽**。您也可以在通知列中選擇**編輯**來編輯版本。

**注意**  
如果管道失敗，狀態橫幅會顯示**失敗**狀態。對失敗步驟進行故障診斷後，請在狀態橫幅上選擇**重試**，以從該步驟繼續執行管道。

------
#### [ Studio Classic ]

1. 登入 Amazon SageMaker Studio Classic。如需詳細資訊，請參閱[啟動 Amazon SageMaker Studio Classic](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-launch.html)。

1. 在 Studio Classic 側邊欄中，選擇**首頁**圖示 (![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/studio/icons/house.png))。

1. 從功能表中選取 **管道**。

1. 若要依名稱縮小管道清單，請在搜尋欄位中輸入完整或部分管道名稱。

1. 選取管道名稱。

1. 從執行清單的**執行**或**圖表**標籤中，選擇**建立執行**。

1. 輸入或更新下列必填資訊：
   + **名稱** – 在 AWS 區域中，此名稱必須是您的帳戶獨有的。
   + **處理執行個體計數** – 用於處理的執行個體數目。
   + **模型批准狀態** – 供您方便參考。
   + **InputDataUrl** – 輸入資料的 Amazon S3 URI。

1. 選擇 **開始使用**。

一旦您的管道執行，您就可以在狀態橫幅上選擇**檢視詳細資訊**，以檢視執行的詳細資訊。

若要停止執行，請在狀態橫幅上選擇**停止**。若要從停止的位置繼續執行，請在狀態橫幅上選擇**繼續**。

**注意**  
如果管道失敗，狀態橫幅會顯示**失敗**狀態。對失敗步驟進行故障診斷後，請在狀態橫幅上選擇**重試**，以從該步驟繼續執行管道。

------

## 執行管道 (SageMaker Python SDK)
<a name="run-pipeline-sdk"></a>

使用 SageMaker AI Python SDK 建立管道定義之後，您可以將其提交至 SageMaker AI 以開始執行。下列教學課程展示如何提交管道、開始執行、檢查執行的結果，以及刪除管道。

**Topics**
+ [先決條件](#run-pipeline-prereq)
+ [第 1 步：啟動管道](#run-pipeline-submit)
+ [第 2 步：檢查管道執行](#run-pipeline-examine)
+ [第 3 步：取代管道執行的預設參數](#run-pipeline-parametrized)
+ [第 4 步：停止並刪除管道執行](#run-pipeline-delete)

### 先決條件
<a name="run-pipeline-prereq"></a>

本教學課程要求如下：
+  SageMaker 筆記本執行個體。  
+  Pipelines 管道定義。本教學課程假設您使用的完成[定義管道](define-pipeline.md)教學課程後建立的管道定義。

### 第 1 步：啟動管道
<a name="run-pipeline-submit"></a>

首先，您需要啟動管道。

**啟動管道**

1. 檢查 JSON 管道定義，以確保其格式正確。

   ```
   import json
   
   json.loads(pipeline.definition())
   ```

1. 將管道定義提交至 Pipelines 服務以建立管道 (如果管道不存在)，或更新管道 (如果管道存在)。Pipelines 會使用傳入的角色來建立步驟中定義的所有任務。

   ```
   pipeline.upsert(role_arn=role)
   ```

1. 啟動管道執行。

   ```
   execution = pipeline.start()
   ```

### 第 2 步：檢查管道執行
<a name="run-pipeline-examine"></a>

接下來，您需要檢查管道的執行情況。

**檢查管道執行**

1.  描述管道執行狀態，以確保已成功建立和啟動管道。

   ```
   execution.describe()
   ```

1. 等候執行完成。

   ```
   execution.wait()
   ```

1. 列出執行步驟及狀態。

   ```
   execution.list_steps()
   ```

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

   ```
   [{'StepName': 'AbaloneTransform',
     'StartTime': datetime.datetime(2020, 11, 21, 2, 41, 27, 870000, tzinfo=tzlocal()),
     'EndTime': datetime.datetime(2020, 11, 21, 2, 45, 50, 492000, tzinfo=tzlocal()),
     'StepStatus': 'Succeeded',
     'CacheHitResult': {'SourcePipelineExecutionArn': ''},
     'Metadata': {'TransformJob': {'Arn': 'arn:aws:sagemaker:us-east-2:111122223333:transform-job/pipelines-cfvy1tjuxdq8-abalonetransform-ptyjoef3jy'}}},
    {'StepName': 'AbaloneRegisterModel',
     'StartTime': datetime.datetime(2020, 11, 21, 2, 41, 26, 929000, tzinfo=tzlocal()),
     'EndTime': datetime.datetime(2020, 11, 21, 2, 41, 28, 15000, tzinfo=tzlocal()),
     'StepStatus': 'Succeeded',
     'CacheHitResult': {'SourcePipelineExecutionArn': ''},
     'Metadata': {'RegisterModel': {'Arn': 'arn:aws:sagemaker:us-east-2:111122223333:model-package/abalonemodelpackagegroupname/1'}}},
    {'StepName': 'AbaloneCreateModel',
     'StartTime': datetime.datetime(2020, 11, 21, 2, 41, 26, 895000, tzinfo=tzlocal()),
     'EndTime': datetime.datetime(2020, 11, 21, 2, 41, 27, 708000, tzinfo=tzlocal()),
     'StepStatus': 'Succeeded',
     'CacheHitResult': {'SourcePipelineExecutionArn': ''},
     'Metadata': {'Model': {'Arn': 'arn:aws:sagemaker:us-east-2:111122223333:model/pipelines-cfvy1tjuxdq8-abalonecreatemodel-jl94rai0ra'}}},
    {'StepName': 'AbaloneMSECond',
     'StartTime': datetime.datetime(2020, 11, 21, 2, 41, 25, 558000, tzinfo=tzlocal()),
     'EndTime': datetime.datetime(2020, 11, 21, 2, 41, 26, 329000, tzinfo=tzlocal()),
     'StepStatus': 'Succeeded',
     'CacheHitResult': {'SourcePipelineExecutionArn': ''},
     'Metadata': {'Condition': {'Outcome': 'True'}}},
    {'StepName': 'AbaloneEval',
     'StartTime': datetime.datetime(2020, 11, 21, 2, 37, 34, 767000, tzinfo=tzlocal()),
     'EndTime': datetime.datetime(2020, 11, 21, 2, 41, 18, 80000, tzinfo=tzlocal()),
     'StepStatus': 'Succeeded',
     'CacheHitResult': {'SourcePipelineExecutionArn': ''},
     'Metadata': {'ProcessingJob': {'Arn': 'arn:aws:sagemaker:us-east-2:111122223333:processing-job/pipelines-cfvy1tjuxdq8-abaloneeval-zfraozhmny'}}},
    {'StepName': 'AbaloneTrain',
     'StartTime': datetime.datetime(2020, 11, 21, 2, 34, 55, 867000, tzinfo=tzlocal()),
     'EndTime': datetime.datetime(2020, 11, 21, 2, 37, 34, 34000, tzinfo=tzlocal()),
     'StepStatus': 'Succeeded',
     'CacheHitResult': {'SourcePipelineExecutionArn': ''},
     'Metadata': {'TrainingJob': {'Arn': 'arn:aws:sagemaker:us-east-2:111122223333:training-job/pipelines-cfvy1tjuxdq8-abalonetrain-tavd6f3wdf'}}},
    {'StepName': 'AbaloneProcess',
     'StartTime': datetime.datetime(2020, 11, 21, 2, 30, 27, 160000, tzinfo=tzlocal()),
     'EndTime': datetime.datetime(2020, 11, 21, 2, 34, 48, 390000, tzinfo=tzlocal()),
     'StepStatus': 'Succeeded',
     'CacheHitResult': {'SourcePipelineExecutionArn': ''},
     'Metadata': {'ProcessingJob': {'Arn': 'arn:aws:sagemaker:us-east-2:111122223333:processing-job/pipelines-cfvy1tjuxdq8-abaloneprocess-mgqyfdujcj'}}}]
   ```

1. 管道執行完成後，從 Amazon S3 下載產生的 `evaluation.json` 檔案以檢查報告。

   ```
   evaluation_json = sagemaker.s3.S3Downloader.read_file("{}/evaluation.json".format(
       step_eval.arguments["ProcessingOutputConfig"]["Outputs"][0]["S3Output"]["S3Uri"]
   ))
   json.loads(evaluation_json)
   ```

### 第 3 步：取代管道執行的預設參數
<a name="run-pipeline-parametrized"></a>

您可以透過指定不同的管道參數來覆寫預設值，來啟動管道的額外執行。

**覆寫預設參數**

1. 建立管道執行。這會在模型批准狀態覆寫設為 “已批准” 的情況下啟動另一個管道執行。這意味著透過 `RegisterModel` 步驟產生的模型套件版本會自動準備好透過 CI/CD 管道進行部署，例如使用 SageMaker Projects。如需詳細資訊，請參閱[使用 SageMaker 專案進行 MLOps 自動化](sagemaker-projects.md)。

   ```
   execution = pipeline.start(
       parameters=dict(
           ModelApprovalStatus="Approved",
       )
   )
   ```

1. 等候執行完成。

   ```
   execution.wait()
   ```

1. 列出執行步驟及狀態。

   ```
   execution.list_steps()
   ```

1. 管道執行完成後，從 Amazon S3 下載產生的 `evaluation.json` 檔案以檢查報告。

   ```
   evaluation_json = sagemaker.s3.S3Downloader.read_file("{}/evaluation.json".format(
       step_eval.arguments["ProcessingOutputConfig"]["Outputs"][0]["S3Output"]["S3Uri"]
   ))
   json.loads(evaluation_json)
   ```

### 第 4 步：停止並刪除管道執行
<a name="run-pipeline-delete"></a>

管道完成後，您可以停止任何正在進行的執行並刪除管道。

**停止和刪除管道執行**

1. 停止管道執行。

   ```
   execution.stop()
   ```

1. 刪除管道。

   ```
   pipeline.delete()
   ```