将信息传入和传出笔记本步骤 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

将信息传入和传出笔记本步骤

以下各节描述了将信息作为环境变量和参数传递到笔记本的方法。

传递环境变量

将环境变量作为字典传递给你的environment_variable参数NotebookJobStep,如以下示例所示:

environment_variables = {"RATE": 0.0001, "BATCH_SIZE": 1000} notebook_job_step = NotebookJobStep( ... environment_variables=environment_variables, ... )

您可以通过使用笔记本中的环境变量os.getenv(),如以下示例所示:

# inside your notebook import os print(f"ParentNotebook: env_key={os.getenv('env_key')}")

传递参数

当您将参数传递到NotebookJobStep实例中的第一个 Notebook Job 步骤时,您可能希望在 Jupyter 笔记本中标记一个单元格,以指示在何处应用新参数或参数覆盖。有关如何在 Jupyter 笔记本中标记单元格的说明,请参阅。参数化笔记本

您可以通过 Notebook Job 步骤的parameters参数传递参数,如以下代码段所示:

notebook_job_parameters = { "company": "Amazon", } notebook_job_step = NotebookJobStep( ... parameters=notebook_job_parameters, ... )

在输入笔记本中,如果没有带标签的单元格,则将参数应用于带有标签的单元格之后parameters或笔记本的开头。

# this cell is in your input notebook and is tagged with 'parameters' # your parameters and parameter overrides are applied after this cell company='default'
# in this cell, your parameters are applied # prints "company is Amazon" print(f'company is {company}')

检索上一步中的信息

以下讨论说明了如何从之前的步骤中提取数据以传递给 Notebook Job 步骤。

使用properties属性

您可以将以下属性与上一步的properties属性一起使用:

  • ComputingJobName—训练作业名称

  • ComputingJobStatus—训练作业状态

  • NotebookJobInputLocation— 输入 Amazon S3 位置

  • NotebookJobOutputLocationPrefix— 更具体地说,您的训练作业输出路径{NotebookJobOutputLocationPrefix}/{training-job-name}/output/output.tar.gz。包含输出

  • InputNotebookName—输入笔记本文件名

  • OutputNotebookName—输出笔记本文件名(如果作业失败,则训练作业输出文件夹中可能不存在该文件名)

以下代码片段显示了如何从属性属性中提取参数。

notebook_job_step2 = NotebookJobStep( .... parameters={ "step1_JobName": notebook_job_step1.properties.ComputingJobName, "step1_JobStatus": notebook_job_step1.properties.ComputingJobStatus, "step1_NotebookJobInput": notebook_job_step1.properties.NotebookJobInputLocation, "step1_NotebookJobOutput": notebook_job_step1.properties.NotebookJobOutputLocationPrefix, }

使用 JsonGet

如果您要传递前面提到的参数以外的参数,并且上一步的JSON输出位于 Amazon S3 中,请使用JsonGetJsonGet是一种通用机制,可以直接从 Amazon S3 中的JSON文件中提取数据。

要使用提取 Amazon S3 中的JSON文件JsonGet,请完成以下步骤:

  1. 将您的JSON文件上传到亚马逊 S3。如果您的数据已经上传到 Amazon S3,请跳过此步骤。以下示例演示如何将JSON文件上传到 Amazon S3。

    import json from sagemaker.s3 import S3Uploader output = { "key1": "value1", "key2": [0,5,10] } json_output = json.dumps(output) with open("notebook_job_params.json", "w") as file: file.write(json_output) S3Uploader.upload( local_path="notebook_job_params.json", desired_s3_uri="s3://path/to/bucket" )
  2. 提供您的 S3 URI 以及要提取的值的JSON路径。在以下示例中,JsonGet返回一个对象,该对象表示与 key key2 (10) 关联的值的索引 2。

    NotebookJobStep( .... parameters={ # the key job_key1 returns an object representing the value 10 "job_key1": JsonGet( s3_uri=Join(on="/", values=["s3:/", ..]), json_path="key2[2]" # value to reference in that json file ), "job_key2": "Amazon" } )