运行实验以比较和选择模型

借助 Snowflake ML Experiments,您可以设置 实验,对模型训练的结果进行有组织的评估。这使您能够以有条理的方式快速比较超参数调整的结果、不同目标指标以及不同模型类型的行为,从而选择最适合您需求的模型。每个实验都由一系列 运行 组成,这些运行包含训练过程中的元数据和工件。Snowflake 对您的运行工件不做任何限制,您可以提交对模型评估过程有用的任何内容。

完成实验后,可通过 Snowsight 查看结果。您还可以随时在 Python 或者 SQL 中检索运行工件。

备注

Snowflake Experiments 需要 snowflake-ml-python 版本 1.19.0 或更高版本。

访问控制要求

创建实验需要在存储运行工件的架构上拥有 CREATE EXPERIMENT 权限。创建实验需要在父数据库和架构上拥有 USAGE 权限。

创建实验

首先,创建一个实验。这需要一个现有的数据库和架构,用来存储运行信息。

实验支持可在 snowflake.ml.experiment.ExperimentTracking 类中使用。使用 set_experiment(name: Optional[str]) 方法可同时打开指定名称的实验,并将其设置为日志和工件的活动实验上下文。尚不存在的实验将被创建。

以下示例演示如何使用现有 session,在活动数据库和架构中创建或打开名为 My_Experiment 的实验,并将其设置为活动实验:

from snowflake.ml.experiment import ExperimentTracking

exp = ExperimentTracking(session=session)
exp.set_experiment("My_Experiment")
Copy

开始实验运行

实验中的每次运行都有自己的一组指标、参数和工件。此信息用于 Snowsight,提供有关模型训练及其结果的可视化和数据。

使用 start_run(name: Optional[str]) 方法,在 ExperimentTracking 实例上开始运行。此操作将返回一个新的 Run,可在 with 语句中使用。Snowflake 建议您使用 with 语句,以便运行可以干净完成,并更容易理解运行范围。

with exp.start_run("my_run"):
  # .. Train your model and log artifacts
Copy

自动记录训练信息

您可以自动记录以下内容的训练信息:XGBoost、 LightGBM或模型训练期间的 Keras 模型。自动记录通过注册回调执行,该回调引用您的实验以及正在训练模型的相关信息。每次在 Model 实例上调用调整参数或指标的方法时,都会自动记录到活动运行的实验中。

以下示例展示了如何为每个受支持的模型训练器配置实验回调,然后开始基本训练运行以记录工件。

# exp: ExperimentTracking

from xgboost import XGBClassifier

from snowflake.ml.experiment.callback.xgboost import SnowflakeXgboostCallback
from snowflake.ml.model.model_signature import infer_signature

sig = infer_signature(X, y)
callback = SnowflakeXgboostCallback(
    exp, model_name="name", model_signature=sig
)
model = XGBClassifier(callbacks=[callback])
with exp.start_run("my_run"):
    model.fit(X, y, eval_set=[(X, y)])
Copy

手动记录训练信息和工件

对于不支持自动记录或已预训练的模型,您可以在 Python 中手动记录实验信息并上传工件。参数是训练模型的固定输入,而指标在模型 步骤 中进行评估。您可以选择将训练轮次表示为相应的步骤。以下示例展示了如何记录参数、记录指标和上传工件。

备注

默认步骤值为 0

# Logging requires an active run for the exp: ExperimentTracker instance.

# Log model parameters with the log_param(...) or log_params(...) methods
exp.log_param("learning_rate", 0.01)
exp.log_params({"optimizer": "adam", "batch_size": 64})

# Log model metrics with the log_metric(...) or log_metrics(...) methods
exp.log_metric("loss", 0.3, step=100)
exp.log_metrics({"loss": 0.4, "accuracy": 0.8}, step=200)

# Log your model to the experiment's model registry with the log_model(...) method.
exp.log_model(model, model_name="my_model", signatures={"predict": model_signature})
exp.log_model(model, model_name="my_model", sample_input_data=data)

# Log local artifacts to an experiment run with the log_artifact(...) method.
exp.log_artifact('/tmp/file.txt', artifact_path='artifacts')
Copy

备注

仓库笔记本不支持工件记录。

完成一次运行

完成运行后,它将变为不可更改,并在 Snowsight 中显示为已完成。

如果您在 with 语句中启动了运行,退出作用域时运行将自动完成。否则,您可以通过调用实验的 end_run(name: Optional[str]) 方法,并提供要完成的运行名称来结束运行:

experiment.end_run("my_run")
Copy

比较实验中的运行

实验评估通过 Snowsight 完成。在导航菜单中,选择 AI & ML » Experiments 并从列表中选择要检查的实验。

实验视图包含以下信息:Run count over time、当前所选指标的显示,以及实验中可用运行的列表。右上角的下拉菜单提供可检查的指标列表,并用于填充实验视图中的 Metric Value Range 图表。

此页面上的运行列表包含 Run nameStatus、运行时间 Created,以及实验中每个可用指标的附加列。参数和模型版本的信息可在运行比较视图中查看。

您最多可以在实验中选择五次运行,然后点击 Compare 按钮以显示比较视图,该视图展示运行元数据、参数、指标和模型版本信息。每个指标都以可视化方式显示,可在 Metrics 部分使用切换按钮在 ChartsTables 之间切换。

从运行中检索工件

在运行期间或运行结束后,您都可以检索工件。以下示例演示如何在 logs 路径中列出运行可用的工件,并将实验 my_experiment 中运行 my_run 的工件 logs/log0.txt 下载到本地目录 /tmp

# exp: ExperimentTracking
exp.set_experiment("my_experiment")

exp.list_artifacts("my_run", artifact_path="logs")
exp.download_artifacts("my_run", artifact_path="logs/log0.txt", target_path="/tmp")
Copy

删除运行和实验

完成实验后,您可以删除实验及其所有关联的运行工件。以下示例删除了实验 my_experiment

# exp: ExperimentTracking
exp.delete_experiment("my_experiment")
Copy

您还可以从实验中删除单次运行。以下示例移除了来自实验 my_experiment 的运行 my_run

# exp: ExperimentTracking
exp.set_experiment("my_experiment")
exp.delete_run("my_run")
Copy

限制

Snowflake Experiments 受以下限制:

  • 每个架构最多允许 500 次实验。

  • 每个实验最多允许 500 次运行。

  • 运行数据最多保存 1 年。

  • 单个运行的参数和指标总数限制为 200 个 KB。

成本注意事项

使用 Snowflake 实验会产生基于 Snowflake 使用量的标准成本。这些对象包括:

  • 存储运行工件的成本。有关存储成本的一般信息,请参阅 探索存储成本

语言: 中文