使用 SageMaker Python 创建笔记本作业 SDK - Amazon SageMaker

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

使用 SageMaker Python 创建笔记本作业 SDK

要使用 SageMaker Python 运行独立笔记本SDK,您需要创建一个 Notebook Job 步骤,将其附加到管道中,然后使用 Pipelin SageMaker es 提供的实用程序按需运行作业,或者可以选择安排一个或多个未来的作业。

以下各节描述了创建按需或计划笔记本作业以及跟踪运行情况的基本步骤。此外,如果您需要将参数传递给笔记本作业或在笔记本EMR中连接到 Amazon,请参阅以下讨论,在这种情况下,需要对 Jupyter 笔记本进行额外准备。您也可以为的参数子集应用默认值,NotebookJobStep这样就不必在每次创建 Notebook Job 步骤时都指定它们。

要查看演示如何使用 SageMaker Python 安排笔记本作业的示例笔记本SDK,请参阅笔记本作业示例笔记本

创建笔记本作业的步骤

您可以创建立即运行或按计划运行的笔记本作业。以下说明描述了这两种方法。

要安排笔记本作业,请完成以下基本步骤:
  1. 创建一个 NotebookJobStep 实例。有关NotebookJobStep参数的详细信息,请参阅 sagemaker.workflow.steps。 NotebookJobStep。您至少可以提供以下参数,如以下代码片段所示:

    重要

    如果您使用 SageMaker Python 安排笔记本作业SDK,则只能指定某些图像来运行笔记本作业。有关更多信息,请参阅 SageMakerPython SDK 笔记本作业的图像限制

    notebook_job_step = NotebookJobStep( input_notebook=input-notebook, image_uri=image-uri, kernel_name=kernel-name )
  2. 只需一个步骤即可创建管道,如以下代码段所示:NotebookJobStep

    pipeline = Pipeline( name=pipeline-name, steps=[notebook_job_step], sagemaker_session=sagemaker-session, )
  3. 按需运行管道,也可以选择安排 future 管道运行。要启动立即运行,请使用以下命令:

    execution = pipeline.start( parameters={...} )

    或者,您可以按预先确定的间隔安排一次未来管道运行或多次运行。您可以在中指定计划,PipelineSchedule然后使用将计划对象传递给您的管道put_triggers。有关管道调度的更多信息,请参阅使用 SageMaker Python 安排管道 SDK

    以下示例计划您的管道在 2023 年 12 月 12 日 10:31:32 UTC 运行一次。

    my_schedule = PipelineSchedule( name="my-schedule“, at=datetime(year=2023, month=12, date=25, hour=10, minute=31, second=32) ) pipeline.put_triggers(triggers=[my_schedule])

    以下示例将您的管道安排在 2022 年至 2023 年期间的每个月最后一个星期五上午 10:15 运行。UTC有关基于 cron 的调度的详细信息,请参阅基于 C ron 的计划。

    my_schedule = PipelineSchedule( name="my-schedule“, cron="15 10 ? * 6L 2022-2023" ) pipeline.put_triggers(triggers=[my_schedule])
  4. (可选)在 “笔记本作业” 控制面板中查看您的 SageMaker 笔记本作业。您为 Notebook Job 步骤的tags参数提供的值控制 Studio 用户界面如何捕获和显示作业。有关更多信息,请参阅 在 Studio 用户界面控制面板中查看你的笔记本作业

在 Studio 用户界面控制面板中查看你的笔记本作业

如果您指定某些标签,则作为工作流工序创建的笔记本作业将显示在 Studio Notebook Job 控制面板中。

注意

只有在 Studio 或本地 JupyterLab 环境中创建的笔记本作业才能创建作业定义。因此,如果您使用 SageMaker Python 创建笔记本作业SDK,则在 “笔记本作业” 仪表板中看不到作业定义。但是,您可以按中所述查看笔记本作业查看笔记本作业

您可以使用以下标签控制哪些团队成员可以查看您的笔记本作业:

  • 要向域中的所有用户配置文件或空间显示笔记本,请添加带有您的域名的域标记。下面展示了一个示例:

    • 键:sagemaker:domain-name,值:d-abcdefghij5k

  • 要向域中的特定用户配置文件显示笔记本作业,请同时添加用户配置文件和域标记。用户个人资料标签的示例如下所示:

    • 键:sagemaker:user-profile-name,值:studio-user

  • 要在空间中显示笔记本作业,请同时添加空间和域标记。空格标签的示例如下所示:

    • 键:sagemaker:shared-space-name,值:my-space-name

  • 如果您未附加任何域名、用户配置文件或空间标签,则 Studio 用户界面不会显示由管道步骤创建的笔记本作业。在这种情况下,您可以在训练作业控制台中查看底层训练作业,也可以在管道执行列表中查看状态。

设置必要的标签以在控制面板中查看作业后,请参阅查看笔记本作业,了解有关如何查看作业和下载输出的说明。

在 Studio 中查看您的管道图

由于您的笔记本作业步骤是管道的一部分,因此您可以在 Studio 中查看工作流图 (DAG)。在管道图中,您可以查看管道运行状态并跟踪沿袭。有关详细信息,请参阅查看管道执行

将参数传递到笔记本电脑

如果要将参数传递给笔记本作业(使用的parameters参数NotebookJobStep),则需要准备好输入笔记本以接收参数。

基于 Papermill 的笔记本作业执行器搜索标有parameters标签的 Jupyter 单元格,并在该单元格之后立即应用新的参数或参数覆盖。有关详细信息,请参阅参数化笔记本

执行完此步骤后,请将参数传递给您的NotebookJobStep,如以下示例所示:

notebook_job_parameters = { "company": "Amazon" } notebook_job_step = NotebookJobStep( image_uri=image-uri, kernel_name=kernel-name, role=role-name, input_notebook=input-notebook, parameters=notebook_job_parameters, ... )

在输入笔记本中连接到 Amazon EMR 集群

如果您在 Studio 中通过 Jupyter 笔记本连接到亚马逊EMR集群,则可能需要进一步修改您的 Jupyter 笔记本。查看从您的笔记本电脑连接到 Amazon EMR 集群是否需要在笔记本中执行以下任何任务:

  • 将参数传递到您的 Amazon EMR 连接命令中。Studio 使用 Papermill 来运行笔记本。在 SparkMagic内核中,由于 Papermill 向其传递信息的方式,您传递给 Amazon EMR 连接命令的参数可能无法按预期工作。 SparkMagic

  • 将用户证书传递给 Kerberos 或经过HTTP基本身份验证的 Amazon 集群。LDAP EMR您必须通过传递用户证书 AWS Secrets Manager。

设置默认选项

SageMaker SDK允许您选择为参数子集设置默认值,这样您就不必在每次创建NotebookJobStep实例时都指定这些参数。这些参数是roles3_root_uris3_kms_keyvolume_kms_keysubnets、和security_group_ids。使用 SageMaker 配置文件为该步骤设置默认值。有关 SageMaker 配置文件的信息,请参阅在 SageMaker Python 中配置和使用默认值SDK。

要设置笔记本作业默认值,请将新的默认值应用于配置文件的 notebook 作业部分,如以下代码段所示:

SageMaker: PythonSDK: Modules: NotebookJob: RoleArn: 'arn:aws:iam::555555555555:role/IMRole' S3RootUri: 's3://my-bucket/my-project' S3KmsKeyId: 's3kmskeyid' VolumeKmsKeyId: 'volumekmskeyid1' VpcConfig: SecurityGroupIds: - 'sg123' Subnets: - 'subnet-1234'