

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

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

将管道步骤定义为有向无环图 (DAG) 后，就可以运行管道，执行 DAG 中定义的步骤。以下演练向您展示了如何使用亚马逊 SageMaker Studio 中的 drag-and-drop可视化编辑器或亚马逊 SageMaker Python SDK 运行亚马逊 A SageMaker I 管道。

## 运行管道（Pipeline Designer）
<a name="run-pipeline-designer"></a>

要开始执行新的管道，请执行以下操作：

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

1. 按照[启动 Amazon SageMaker Studio 中的说明打开 SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html)。

1. 在左侧的导航窗格中，选择**管道**。

1. （可选）要按名称筛选管道列表，请在搜索字段中输入管道的全名或部分名称。

1. 选择管道名称以打开管道详细信息视图。

1. 选择右上角的**可视化编辑器**。

1. 要从最新版本启动执行，请选择**执行**。

1. 要从特定版本启动执行，请执行以下步骤：
   + 选择底部工具栏中的版本图标以打开版本面板。
   + 选择要执行的管道版本。
   + 将鼠标悬停在版本项上方以显示三点菜单，然后选择**执行**。
   + （可选）要查看管道的上一个版本，请从版本面板中的三点菜单中选择**预览**。您也可以在通知栏中选择**编辑**来编辑版本。

**注意**  
如果管道失败，状态横幅将显示 **Failed** 状态。对失败步骤进行问题排查后，在状态横幅上选择**重试**以从该步骤继续运行管道。

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

1. 登录亚马逊 SageMaker Studio 经典版。有关更多信息，请参阅[启动 Amazon SageMaker Studio 经典版](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_cn/sagemaker/latest/dg/images/studio/icons/house.png))。

1. 从菜单中选择**管道**。

1. 要按名称缩小管道列表的范围，请在搜索字段中输入管道的全名或部分名称。

1. 选择管道名称。

1. 从执行列表的**执行**或**图表**选项卡中，选择**创建执行**。

1. 输入或更新以下所需信息：
   + **Name** - 对于您在 AWS 区域中的账户必须唯一。
   + **ProcessingInstanceCount**— 用于处理的实例数。
   + **ModelApprovalStatus**— 为了您的方便。
   + **InputDataUrl**— 输入数据的亚马逊 S3 URI。

1. 选择**启动**。

管道运行后，您可以在状态横幅上选择**查看详情**查看执行详情。

要停止运行，请在状态横幅上选择**停止**。要从停止处恢复执行，请在状态横幅上选择**恢复**。

**注意**  
如果管道失败，状态横幅将显示 **Failed** 状态。对失败步骤进行问题排查后，在状态横幅上选择**重试**以从该步骤继续运行管道。

------

## 运行管道 (SageMaker Python 开发工具包)
<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 管道（例如 Pro SageMaker jects）进行部署。有关更多信息，请参阅 [MLOps SageMaker 项目自动化](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()
   ```