本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
笔记本步骤之间的信息传递
以下章节介绍了以环境变量和参数形式向笔记本传递信息的方法。
传递环境变量
如下例所示,将环境变量作为字典传递给 NotebookJobStep
的 environment_variable
参数:
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
实例中的第一个笔记本作业步骤时,您可能需要在 Jupyter Notebook 中标记一个单元格,以指示应用新参数或参数覆盖的位置。有关如何在 Jupyter Notebook 中标记单元格的说明,请参阅 参数化笔记本。
您可以通过笔记本作业步骤的 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}')
检索前一步的信息
下面将讨论如何从上一个步骤中提取数据,并将其传递到笔记本作业步骤中。
使用 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 中,请使用 JsonGet
。JsonGet
是一种通用机制,可以直接从 Amazon S3 中的 JSON 文件中提取数据。
要使用 JsonGet
提取 Amazon S3 中的 JSON 文件,请完成以下步骤:
-
将 JSON 文件上传到 Amazon 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
" ) -
提供您的 S3 URI 和要提取的值的 JSON 路径。在下面的示例中,
JsonGet
返回一个对象,代表与密钥key2
关联的值的索引 2 (10
)。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" } )