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

创建 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_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:可使用 run.log_file() 记录与运行相关的所有输入或输出文件,如训练或测试数据,并将其存储在 Amazon S3 中。默认情况下,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 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 Experiments 用户界面中的实验列表

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

查看未分配的运行

默认情况下,所有 SageMaker 作业,包括训练作业、处理作业和转换作业,都对应于运行并创建 Run 对象。如果这些作业在启动时并没有与实验明确关联,那么生成的运行将处于未分配状态,并且可在 Studio“实验”用户界面的未分配的运行部分中查看。


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

要清理您创建的资源,请参阅清理 Amazon SageMaker 实验资源