本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
创建亚马逊 SageMaker 实验
创建一个 Amazon SageMaker 实验,使用来自首选开发环境的几行代码来跟踪您的机器学习 (ML) 工作流程。然后,您可以浏览实验,创建用于分析的可视化效果,并找到性能最佳的模型。您还可以使用 SageMaker Python SDK 将 SageMaker 实验集成到您的 SageMaker 训练脚本中。
概览
以下组件构成了亚马逊实验的基石 SageMaker。
experiment
: 实验是运行的集合。在训练循环中初始化运行时,需要包括该运行所属实验的名称。实验名称在您的Amazon账户内必须是唯一的。Run
:一次运行包含模型训练一次交互的所有输入、参数、配置和结果。使用初始化用于跟踪训练作业的实验运行Run.init()
。注意
我们建议您在 Jupyter Notebook 中初始化一个
Run
对象,并在此Run
对象初始化的上下文中为实验创建 SageMaker 作业。要在脚本模式下引用此Run
对象,请使用load_run()
方法。有关示例,请参阅 亚马逊 SageMaker 实验的示例笔记本。注意
P SageMaker ython SDK 会自动将实验名称和运行名称转换为小写。
load_run
:要在脚本模式下运行实验,请使用初始化Run
对象引用load_run()
。如果存在运行实验,则load_run
返回实验上下文。通常,您可以不load_run
使用任何参数来跟踪 SageMaker 训练或处理作业脚本中的指标、参数和工件。# Load run from a local script passing experiment and run names with load_run(experiment_name=
experiment_name
, run_name=run_name
) as run: run.log_parameter("param1"
,"value1"
)# Load run within a training or processing Job (automated context sharing) with load_run() as run: run.log_parameter(
"param1"
,"value1"
)log_parameter
:使用在训练循环中记录一段时间内运行的参数,例如批次大小或时期run.log_parameter()
。log_parameter
记录运行中的单个名称-值对。你可以run.log_parameters()
用来记录多个参数。如果在一次运行中多次调用相同名称的参数,则log_parameter
会覆盖任何先前的值。名称必须是字符串,值必须是字符串、整数或浮点数。# Log a single parameter run.log_parameter(
"param1"
,"value1"
)# Log multiple parameters run.log_parameters({
"param2"
:"value2"
,"param3"
:"value3"
})log_metric
:使用在训练循环中记录一段时间内跑步的指标,例如准确率或损失run.log_metric()
。log_metric
记录一个名称-值对,其中名称是字符串,值是整数或浮点数。要声明运行过程中的日志记录频率,请定义一个step
值。然后,您可以在 Studio 实验用户界面中可视化这些指标。有关更多信息,请参阅查看、搜索和比较实验运行:# Log a metric over the course of a run run.log_metric(name=
"Final_loss"
, value=finalloss
)# Log a metric over the course of a run at each epoch run.log_metric(name=
"test:loss"
, value=loss
, step=epoch
)log_artifact
:记录与运行相关的任何输入或输出工件run.log_artifact()
。为您的实验记录 S3 URI、数据集、模型等工件,以帮助您跟踪多次运行中的伪像。is_output
True
默认为。要将工件记录为输入工件而不是输出工件,is_output
请将设置为False
。# Track a string value as an input or output artifact run.log_artifact(name=
"training_data"
, value="data.csv"
is_output=False
)log_file
:记录与运行相关的任何输入或输出文件,例如训练或测试数据,并将其存储在 Amazon S3 中run.log_file()
。is_output
True
默认为。要将文件记录为输入对象而不是输出构件,is_output
请将设置为False
。# Upload a local file to S3 and track it as an input or output artifact run.log_file(
"training_data.csv"
, name="training_data"
, is_output=False
)
有关初始化Run
对象的更多信息,请参阅 SageMaker Python SDK 文档中的实验
使用 SageMaker Python 开发工具包创建一个实验
以下部分演示如何使用 SageMaker Python SDK 创建亚马逊 SageMaker 实验。此示例使用该Run
类在笔记本环境中跟踪 Keras 模型。KerasCallback
类提供了on_epoch_end
一种在每个纪元结束时发出指标的方法。首先,定义一个Callback
类。
class ExperimentCallback(keras.callbacks.Callback): """ """ def __init__(self, run, model, x_test, y_test): """Save params in constructor""" self.run = run self.model = model self.x_test = x_test self.y_test = y_test def on_epoch_end(self, epoch, logs=None): """ """ keys = list(logs.keys()) for key in keys: run.log_metric(name=key, value=logs[key], step=epoch) print("Epoch: {}\n{} -> {}".format(epoch, key, logs[key]))
接下来,在笔记本环境中训练 Keras 模型并将其作为实验进行跟踪。
注意
此示例按顺序执行作业。要异步运行 SageMaker 作业,您可能需要增加资源限制。
from sagemaker.experiments import Run # The run name is an optional argument to `run.init()` with Run(experiment_name =
'my-experiment'
) as run: # Define values for the parameters to log run.log_parameter("batch_size"
,batch_size
) run.log_parameter("epochs"
,epochs
) run.log_parameter("dropout"
,0.5
) # Define input artifacts run.log_file('datasets/input_train.npy'
, is_output =False
) run.log_file('datasets/input_test.npy'
, is_output =False
) run.log_file('datasets/input_train_labels.npy'
, is_output =False
) run.log_file('datasets/input_test_labels.npy'
, is_output =False
) # Train locally model.fit( x_train, y_train, batch_size=batch_size, epochs=epochs, validation_split=0.1, callbacks = [ExperimentCallback(run, model, x_test, y_test)] ) score = model.evaluate(x_test
,y_test
, verbose=0
) print("Test loss:", score[0]) print("Test accuracy:", score[1]) # Define metrics to log run.log_metric(name ="Final Test Loss"
, value =score[0]
) run.log_metric(name ="Final Test Loss"
, value =score[1]
)
有关更多代码示例和示例笔记本,请参阅亚马逊 SageMaker 实验的示例笔记本。
使用 SageMaker 脚本模式创建实验
您可以使用 SageMaker 脚本模式编写自己的代码来训练模型并将其作为实验进行跟踪。使用脚本模式创建实验时,使用load_run()
。
# Make sure that you have the latest version of the SageMaker Python SDK import os os.system("pip install -U sagemaker") # Import additional requirements import boto3 from sagemaker.session import Session from sagemaker.experiments.run import load_run # Define training script if __name__ == "__main__": session = Session(boto3.session.Session(region_name=args.region)) with load_run(sagemaker_session=session) as run: # Define values for the parameters to log run.log_parameters({
"batch_size"
:batch_size
,"epochs"
:epochs
,"dropout"
:0.5
}) # Define input artifacts run.log_file('datasets/input_train.npy'
, is_output =False
) run.log_file('datasets/input_test.npy'
, is_output =False
) run.log_file('datasets/input_train_labels.npy'
, is_output =False
) run.log_file('datasets/input_test_labels.npy'
, is_output =False
) # Train the model model.fit( x_train, y_train, batch_size=batch_size, epochs=epochs, validation_split=0.1, callbacks = [ExperimentCallback(run, model, x_test, y_test)] ) score = model.evaluate(x_test, y_test, verbose=0) print("Test loss:", score[0]) print("Test accuracy:", score[1]) # Define metrics to log run.log_metric(name ="Final Test Loss"
, value =score[0]
) run.log_metric(name ="Final Test Loss"
, value =score[1]
)
有关在脚本模式下使用 Amazon Experiment SageMaker s 的更多代码示例和示例笔记 SageMaker 本,请参阅使用脚本模式跟踪 SageMaker 训练作业的实验。
有关脚本模式的更多信息,请参阅在支持的框架中使用脚本模式。您还可以在脚本模式下定义自定义指标,方法是为优化作业监控的每个指标指定名称和正则表达式。有关更多信息,请参阅使用自定义算法进行训练。
在 Studio 中查看您的实验
要在 Studio 中查看实验,请在左侧边栏中选择实验。
请选择实验名称以查看所有相关运行。列表可能需要一点时间才能刷新并显示新的实验或实验运行情况。您可以单击 “刷新” 来更新页面。您的实验列表应类似于以下内容:

要查看构成实验的运行结果,请选择实验名称。有关更多信息,请参阅查看、搜索和比较实验运行:
查看未分配的运行
默认情况下,所有 SageMaker 作业,包括训练作业、处理作业和转换作业,都对应于运行和创建Run
对象。如果您在启动这些作业时未将其与实验明确关联,则生成的运行将处于未分配状态,可以在 Studio Experments UI 的未分配运行部分中查看。

要清除您创建的资源,请参阅清理亚马逊 SageMaker 实验资源。