将Aim集成到现有项目中

任意Python脚本

from aim import Run

run = Run()

# Save inputs, hparams or any other `key: value` pairs
run['hparams'] = {
    'learning_rate': 0.001,
    'batch_size': 32,
}

# ...
for step in range(10):
    # Log metrics to visualize performance
    run.track(step, name='metric_name')
# ...

Aim可以轻松与您喜爱的机器学习框架集成。

Aim日志记录器通过experiment属性提供对aim.Run对象实例的访问。aim.Run实例可帮助您轻松跟踪额外指标或设置与项目相关的任何其他key: value键值对(参数)。

通过这种方式,您可以轻松扩展默认集成。更多相关信息可在集成指南章节中找到。

与Pytorch Ignite集成

Open In Colab

只需2个简单步骤即可轻松将Aim集成到pytorch ignite中:

# import aim sdk designed for pytorch ignite
from aim.pytorch_ignite import AimLogger

PyTorch Ignite提供了训练器对象来简化PyTorch模型的训练过程。我们可以将训练器对象附加为AimLogger的输出处理器,以使用aim定义的日志记录功能来简化实验跟踪过程。该过程分为2个步骤:

步骤1. 创建 AimLogger 对象

aim_logger = AimLogger(
    experiment='aim_on_pt_ignite',
    train_metric_prefix='train_',
    val_metric_prefix='val_',
    test_metric_prefix='test_',
)

步骤2. 将输出处理器附加到aim_logger对象

aim_logger.attach_output_handler(
    trainer,
    event_name=Events.ITERATION_COMPLETED,
    tag="train",
    output_transform=lambda loss: {'loss': loss}
)

适配器源代码可在此处找到。
使用Pytorch Ignite的示例可在此处找到。

与Pytorch Lightning集成

我们仅需2个简单步骤即可轻松将Aim集成到PyTorch Lightning中:

# import aim sdk designed for pl
from aim.pytorch_lightning import AimLogger

PyTorch Lightning提供了trainer对象来简化PyTorch模型的训练过程。其中一个参数称为logger。我们可以使用由aim定义的logger函数来简化实验跟踪流程。这个过程分为2个步骤:

步骤1. 创建 AimLogger 对象

# track experimental data by using Aim
aim_logger = AimLogger(repo='path/to/aim/repo', experiment='aim_on_pt_lightning')

步骤2. 将aim_logger对象作为logger参数传入

# track experimental data by using Aim
trainer = Trainer(gpus=1, progress_bar_refresh_rate=20, max_epochs=5, logger=aim_logger)

管理Aim上下文

通过定义context_prefixescontext_postfixes参数,Aim上下文可以从您的指标名称中自动派生。默认情况下,AimLogger能识别train_val_test_前缀,并将带有这些后缀的指标分配到subset上下文中。

例如,在pl.LightningModule实例中调用self.log("val_loss", loss_value)会将loss_value记录到Aim中,指标名称为"loss",上下文为"val"。

可以通过以下用法更改此默认设置并添加上下文:

Aimlogger(...,
    context_prefixes = dict(subset={'train': 'train_',    # the default behavior,
                                    'val':   'val_',      # shown here as example
                                    'test':  'test_'}),
    contest_postfixes = dict(custom_context={'weighted':'_weighted', # a new, user-defined
                                             'macro':   '_macro'},   # metric-averaging context
)

要移除所有默认的上下文映射,请执行 AimLogger(..., context_prefixes={})

If you need more than two contexts per metric, or have other context needs, you can always directly access Aim’s tracking capabilities from a pl.LightningModule or pl.Trainer instance with:

instance.logger.experiment.track(value, name=..., context=...)

对于Pytorch Lightning的AimLogger,参数train_metric_prefixval_metric_prefixtest_metric_prefix已被弃用但仍可使用。但若与context_prefixes同时使用将会引发ValueError错误。

适配器源代码可在此处找到。
使用Pytorch Lightning的示例可在此处找到。

与Hugging Face集成

只需2个简单步骤即可使用Aim收集数据 ❤️

第一步:导入由Aim为Huggingface设计的SDK。

from aim.hugging_face import AimCallback

第二步:Hugging Face提供了一个训练器API来帮助我们简化训练过程。该API提供了一个回调函数来返回用户所需的信息。因此,aim专门设计了SDK来简化用户编写回调函数的过程,我们只需如下初始化AimCallback对象:

# Initialize aim_callback
aim_callback = AimCallback(experiment='huggingface_experiment')
# Initialize trainer
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=small_train_dataset,
    eval_dataset=small_eval_dataset,
    compute_metrics=compute_metrics,
    callbacks=[aim_callback]
)

适配器源代码可在此处查看
使用Hugging Face的示例可在此处查看

与Keras和tf.Keras的集成

只需2步即可轻松将aim集成到keras中,记录实验信息。

# call keras as the high api of tensorflow
from aim.tensorflow import AimCallback
# call keras library directly
from aim.keras import AimCallback

在keras中,我们调用模型对象的fit()方法来训练数据。回调函数在这里提供。AimCallback继承了回调函数的使用规范。我们只需要将其添加到回调列表中即可。

model.fit(x_train, y_train, epochs=5, callbacks=[
          # in case of tf.keras, we use aim.tensorflow.AimCallback
          AimCallback(experiment='aim_on_keras')
])

适配器源代码可在此处找到。
使用Keras的示例可在此处找到。
使用tf.Keras的示例可在此处找到。

与Keras Tuner集成

只需2个简单步骤即可在keras中集成aim来记录实验信息。

from aim.keras_tuner import AimCallback

在kerastuner中,我们调用调谐器对象的search()方法来搜索最佳超参数配置。回调函数在此处提供。AimCallback继承了回调函数的使用规范。我们只需将其添加到回调列表中即可。

tuner.search(
    train_ds,
    validation_data=test_ds,
    callbacks=[AimCallback(tuner=tuner, repo='./aim_logs', experiment='keras_tuner_test')],
)

适配器源代码可在此处找到。
使用Keras Tuner的示例可在此处找到。

与XGboost集成

享受使用aimstack来跟踪xgboost实验数据,仅需两个简单步骤:

第一步:显式导入AimCallback以跟踪训练数据。

# call sdk aim.xgboost
from aim.xgboost import AimCallback

第二步:XGboost提供了xgboost.train方法用于模型训练,其中callbacks参数可以回调外部数据信息。这里我们传入专为追踪数据信息设计的aimcallback

xgboost.train(param, dtrain, num_round, watchlist,
                            callbacks=[AimCallback(experiment='xgboost_test')])

适配器源代码可在此处找到。
使用XGboost的示例可在此处找到。

与CatBoost集成

只需两步即可将Aim与CatBoost集成。

第一步:导入 AimLogger 来跟踪训练元数据。

# call sdk aim.catboost
from aim.catboost import AimLogger

步骤2:将记录器传递给训练器。

CatBoost训练通过fit方法启动。 该方法可以接收log_cout参数,将输出日志重定向到自定义处理器。 传入AimLogger即可自动使用Aim跟踪指标和超参数。 根据训练日志输出情况,可以额外传递logging_level参数让Catboost生成更多日志,以跟踪testbest值。

model.fit(train_data, train_labels, log_cout=AimLogger(loss_function='Logloss'), logging_level='Info')

AimLogger 还接受 log_cout 参数以保留 Catboost 日志处理的默认功能。 您可以传递自己的处理程序,否则默认为 sys.stdout

查看AimLogger源码这里
查看一个使用Aim和CatBoost的简单示例这里

与LightGBM集成

Aim内置了一个回调函数,旨在自动追踪LightGBM的训练过程。只需两步即可将Aim集成到您的训练脚本中。

第一步:显式导入AimCallback以跟踪训练元数据。

from aim.lightgbm import AimCallback

步骤2:在启动训练时将回调函数传递到callbacks列表中。

gbm = lgb.train(params,
                lgb_train,
                num_boost_round=20,
                valid_sets=lgb_eval,
                callbacks=[AimCallback(experiment='lgb_test')])

当训练运行时,您可以在另一个终端会话中启动aim up并实时观察信息。

查看AimCallback源码这里
查看简单回归任务示例这里

与fastai集成

Aim内置了一个回调函数,旨在自动追踪fastai训练过程。只需两步即可将Aim集成到您的训练脚本中。

第一步:显式导入AimCallback以跟踪训练元数据。

from aim.fastai import AimCallback

步骤2:在启动训练时将回调函数传递到cbs列表中。

learn = cnn_learner(dls, resnet18, pretrained=True,
                    loss_func=CrossEntropyLossFlat(),
                    metrics=accuracy, model_dir="/tmp/model/",
                    cbs=AimCallback(repo='.', experiment='fastai_example'))

查看AimCallback源码这里
查看简单回归任务示例这里

与MXNet集成

要跟踪MXNet实验,请使用专为MXNet的fit方法设计的Aim回调函数。只需两步即可将Aim集成到您的训练脚本中。

第一步:导入AimLoggingHandler用于追踪训练元数据。

from aim.mxnet import AimLoggingHandler

步骤2:在启动训练时,将回调实例传递到event_handlers列表中。

aim_log_handler = AimLoggingHandler(repo='.', experiment_name='mxnet_example',
                                    log_interval=1, metrics=[train_acc, train_loss, val_acc])

est.fit(train_data=train_data_loader, val_data=val_data_loader,
        epochs=num_epochs, event_handlers=[aim_log_handler])

查看AimCallback源码这里
查看简单回归任务示例这里

与Optuna的集成

Aim提供了一个回调函数,旨在自动追踪optuna训练过程。 as_multirun是一个布尔参数。如果as_multirun设为True,回调函数会为每个试验创建单独的运行记录;否则会将所有结果记录在单个运行中。 用户还可以使用装饰器函数track_in_aim在目标函数内部进行日志记录。

步骤1:显式导入AimCallback以跟踪训练元数据。

from aim.optuna import AimCallback

步骤2:在初始化训练时将回调函数传递到cbs列表中。

aim_callback = AimCallback(experiment_name="optuna_single_run")
study.optimize(objective, n_trials=10, callbacks=[aim_callback])

查看AimCallback源码here
查看简单目标优化示例here

与PaddlePaddle集成

Aim提供了一个内置回调函数,可以轻松追踪PaddlePaddle训练过程。只需两步即可将Aim集成到您的训练脚本中。

第一步:显式导入AimCallback用于追踪训练元数据。

from aim.paddle import AimCallback

步骤2:在启动训练时将回调函数传递到callbacks列表中。

callback = AimCallback(repo='.', experiment='paddle_test')
model.fit(train_dataset, eval_dataset, batch_size=64, callbacks=callback)

查看AimCallback源代码此处
查看简单目标优化示例此处

与Stable-Baselines3集成

Aim 提供了一个回调函数,可以轻松跟踪可靠的强化学习实现 Stable-Baselines3 的训练过程。只需两步即可将 Aim 集成到您的训练脚本中。

步骤1:显式导入AimCallback以跟踪训练元数据。

from aim.sb3 import AimCallback

步骤2:在启动训练时将回调函数传递给callback

model.learn(total_timesteps=10_000, callback=AimCallback(repo='.', experiment_name='sb3_test'))

查看AimCallback源码here
查看简单目标优化示例here

与Acme集成

Aim提供了一个内置回调函数,可以轻松追踪Acme训练过程。只需几个简单步骤即可将Aim集成到您的训练脚本中。

第一步:显式导入AimCallbackAimWriter用于追踪训练元数据。

from aim.sdk.acme import AimCallback, AimWriter

步骤2:通过AimCallback初始化一个Aim运行实例,并使用该运行实例创建日志工厂。

aim_run = AimCallback(repo=".", experiment_name="acme_test")
def logger_factory(
    name: str,
    steps_key: Optional[str] = None,
    task_id: Optional[int] = None,
) -> loggers.Logger:
    return AimWriter(aim_run, name, steps_key, task_id)

步骤3:在启动训练时,将日志记录器工厂传递给logger_factory

experiment_config = experiments.ExperimentConfig(
    builder=d4pg_builder,
    environment_factory=make_environment,
    network_factory=network_factory,
    logger_factory=logger_factory,
    seed=0,
    max_num_actor_steps=5000)

查看AimCallback源码这里
查看一个简单的目标优化示例这里

与Prophet集成

Aim提供了一个AimLogger对象,专门用于追踪Prophet的超参数和指标。 只需三个步骤即可将Aim集成到您的Prophet脚本中。

第一步:显式导入 AimLogger

from aim.prophet import AimLogger

步骤2:初始化Prophet模型后,使用您的Prophet模型实例化AimLogger。

model = Prophet()
logger = AimLogger(prophet_model=model, repo=".", experiment="prophet_test")

步骤3(可选):在拟合Prophet模型后传入任何所需的指标。

metrics = {"backtest_mse": backtest_mse, "backtest_mape": backtest_mape}
logger.track_metrics(metrics)

请注意,默认情况下指标被视为验证指标。或者,您也可以向track_metrics方法传递一个context参数。

metrics = {"train_mse": backtest_mse, "train_mape": backtest_mape}
logger.track_metrics(metrics, context={"subset": "train"})

查看AimLogger源码这里
查看简单示例这里

下一步是什么?

在训练过程中,您可以在同一目录下启动另一个终端,运行aim up命令即可实时观察相关信息。