创建亚马逊 SageMaker 实验 - 亚马逊 SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

创建亚马逊 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_outputTrue默认为。要将工件记录为输入工件而不是输出工件,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_outputTrue默认为。要将文件记录为输入对象而不是输出构件,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 实验列表

要查看构成实验的运行结果,请选择实验名称。有关更多信息,请参阅查看、搜索和比较实验运行

查看未分配的运行

默认情况下,所有 SageMaker 作业,包括训练作业、处理作业和转换作业,都对应于运行和创建Run对象。如果您在启动这些作业时未将其与实验明确关联,则生成的运行将处于未分配状态,可以在 Studio Experments UI 的未分配运行部分中查看。


           SageMaker 实验用户界面中未分配的运行列表

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