创建 Amazon SageMaker 实验
您可以在偏好的开发环境中,通过寥寥数行代码创建 Amazon SageMaker 实验,以跟踪机器学习 (ML) 工作流。然后,您可以浏览实验、创建可视化界面进行分析,并找到性能最佳的模型。也可以使用 SageMaker Python SDK,将 SageMaker Experiments 集成到 SageMaker 训练脚本中。
概述
以下组件构成了 Amazon SageMaker 中实验的基石。
experiment
:实验是运行的集合。在训练循环中对运行进行初始化时,需要包括该运行所属实验的名称。实验名称在 Amazon 账户中必须是唯一的。Run
:运行由模型训练的一次交互的所有输入、参数、配置和结果组成。可使用Run.init()
,对跟踪训练作业的实验运行进行初始化。注意
我们建议您在 Jupyter 笔记本中初始化
Run
对象,并在此Run
对象初始化的上下文中,为实验创建 SageMaker 作业。要在脚本模式下引用此Run
对象,可使用load_run()
方法。有关示例,请参阅Amazon SageMaker Experiments 的示例笔记本。注意
SageMaker Python SDK 会自动将实验名称和运行名称转换为小写。
load_run
:要在脚本模式下运行实验,可使用load_run()
引用已初始化的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 Experiments 用户界面中可视化这些指标。有关更多信息,请参阅查看、搜索和比较实验运行。# 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
:可使用run.log_file()
记录与运行相关的所有输入或输出文件,如训练或测试数据,并将其存储在 Amazon S3 中。默认情况下,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 SDK 创建实验
以下部分演示如何使用 SageMaker Python SDK 创建 Amazon SageMaker 实验。此示例使用 Run
类在笔记本环境中跟踪 Keras 模型。Keras Callback
类可提供方法 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 Accuracy"
, value =score[1]
)
有关更多代码示例和示例笔记本,请参阅Amazon SageMaker Experiments 的示例笔记本。
使用 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 Accuracy"
, value =score[1]
)
有关在 SageMaker 脚本模式下使用 Amazon SageMaker Experiments 的更多代码示例和示例笔记本,请参阅使用脚本模式跟踪 SageMaker 训练作业的实验。
有关脚本模式的更多信息,请参阅在支持的框架中使用脚本模式。您还可以通过为调优作业所监控的各个指标指定名称和正则表达式,在脚本模式下定义自定义指标。有关更多信息,请参阅使用自定义算法进行训练。
在 Studio 中查看实验
要在 Studio 中查看实验,可在左侧边栏中选择实验。
选择实验的名称,以查看所有相关的运行。列表刷新并显示新的实验或实验运行,可能需要一点时间。您可以单击刷新以更新页面。实验列表应类似于下图:
要查看构成实验的运行,可选择实验名称。有关更多信息,请参阅查看、搜索和比较实验运行。
查看未分配的运行
默认情况下,所有 SageMaker 作业,包括训练作业、处理作业和转换作业,都对应于运行并创建 Run
对象。如果这些作业在启动时并没有与实验明确关联,那么生成的运行将处于未分配状态,并且可在 Studio“实验”用户界面的未分配的运行部分中查看。
要清理您创建的资源,请参阅清理 Amazon SageMaker 实验资源。