运行管道 - Amazon SageMaker

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

运行管道

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

要开始重新执行您的管道,请执行以下操作:

Studio
  1. 按照启动 Amazon SageMaker Studio 中的说明打开 SageMaker Studio

  2. 在左侧导航窗格中,选择管道

  3. (可选)要按名称筛选管道列表,请在搜索字段中输入完整或部分管道名称。

  4. 选择管道名称。

  5. 选择 “执行” 选项卡。

  6. 输入或更新以下所需信息:

    • 姓名-您在 AWS 该地区的账户所独有的名称。

    • 描述-对您的执行的可选描述。

    • ProcessingInstanceType— 用于处理任务的 Amazon EC2 实例类型。

    • TrainingInstanceType— 用于训练任务的 Amazon EC2 实例类型

    • InputData— Amazon URI S3 的输入数据。

    • PreprocessScript— Amazon S3 URI 到预处理脚本。

    • EvaluateScript— Amazon S3 URI 对模型的评估脚本。

    • AccuracyConditionThreshold— 将模型注册到注册表时要达到的模型精度阈值。

    • ModelGroup— 要在其中注册模型的注册表。

    • MaximumParallelTrainingJobs— 并行运行的最大训练作业数。

    • MaximumTrainingJobs— 要运行的最大训练作业数。

  7. 选择创建

注意

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

Studio Classic
  1. 登录亚马逊 SageMaker Studio 经典版。有关更多信息,请参阅启动 Amazon SageMaker Studio 经典版

  2. 在 Studio Classic 侧栏中,选择 “主页” 图标 ( Black square icon representing a placeholder or empty image. )。

  3. 从菜单中选择管道

  4. 要按名称缩小管道列表的范围,请在搜索字段中输入完整或部分管道名称。

  5. 选择管道名称。

  6. 从执行列表的执行图表选项卡中,选择创建执行

  7. 输入或更新以下所需信息:

    • Name - 对于您在 AWS 区域中的账户必须唯一。

    • ProcessingInstanceCount— 用于处理的实例数。

    • ModelApprovalStatus— 为了您的方便。

    • InputDataUrl— 输入数据的 Amazon S3 URI。

  8. 选择启动

管道运行后,您可以通过在状态横幅上选择查看详细信息来查看执行的详细信息

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

注意

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

使用 SageMaker Python 创建管道定义后SDK,可以将其提交 SageMaker 到以开始执行。以下教程展示了如何提交管道、开始执行、检查执行结果以及删除管道。

先决条件

本教程要求以下项目:

  • SageMaker 笔记本实例。 

  • 管道管道定义。本教程假设您使用的是完成定义管道教程后创建的管道定义。

步骤 1:启动管道

首先,您需要启动管道。

启动管道
  1. 检查JSON管道定义以确保其格式正确。

    import json json.loads(pipeline.definition())
  2. 将管道定义提交给 Pipelines 服务以创建管道(如果不存在),或者更新管道(如果存在)。 Pipelines 使用传入的角色来创建步骤中定义的所有作业。

    pipeline.upsert(role_arn=role)
  3. 启动管道执行。

    execution = pipeline.start()

步骤 2:检查管道执行

接下来,您需要检查管道执行。

检查管道执行
  1. 描述管道执行状态,确保其已成功创建并启动。

    execution.describe()
  2. 等待执行完成。

    execution.wait()
  3. 列出执行步骤及其状态。

    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'}}}]
  4. 管道执行完成后,从 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:覆盖管道执行的默认参数

您可以通过指定不同的管道参数来覆盖默认值,从而运行管道的其他执行。

覆盖默认参数
  1. 创建管道执行。这将启动另一个管道执行,并将模型批准状态覆盖设置为“已批准”。这意味着该RegisterModel步骤生成的模型包版本已自动准备好通过 CI/CD 管道(例如 Projects)进行 SageMaker 部署。有关更多信息,请参阅 MLOps利用 SageMaker 项目实现自动化

    execution = pipeline.start( parameters=dict( ModelApprovalStatus="Approved", ) )
  2. 等待执行完成。

    execution.wait()
  3. 列出执行步骤及其状态。

    execution.list_steps()
  4. 管道执行完成后,从 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:停止并删除管道执行

完成管道后,您可以停止任何正在进行的执行并删除管道。

停止并删除管道执行
  1. 停止管道执行。

    execution.stop()
  2. 删除管道。

    pipeline.delete()