将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集成
只需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 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_prefixes和context_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_prefix、val_metric_prefix、test_metric_prefix已被弃用但仍可使用。但若与context_prefixes同时使用将会引发ValueError错误。
与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]
)
与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 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')],
)
与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')])
与CatBoost集成
只需两步即可将Aim与CatBoost集成。
第一步:导入 AimLogger 来跟踪训练元数据。
# call sdk aim.catboost
from aim.catboost import AimLogger
步骤2:将记录器传递给训练器。
CatBoost训练通过fit方法启动。
该方法可以接收log_cout参数,将输出日志重定向到自定义处理器。
传入AimLogger即可自动使用Aim跟踪指标和超参数。
根据训练日志输出情况,可以额外传递logging_level参数让Catboost生成更多日志,以跟踪test和best值。
model.fit(train_data, train_labels, log_cout=AimLogger(loss_function='Logloss'), logging_level='Info')
AimLogger 还接受 log_cout 参数以保留 Catboost 日志处理的默认功能。
您可以传递自己的处理程序,否则默认为 sys.stdout。
与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并实时观察信息。
与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'))
与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])
与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])
与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)
与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'))
与Acme集成
Aim提供了一个内置回调函数,可以轻松追踪Acme训练过程。只需几个简单步骤即可将Aim集成到您的训练脚本中。
第一步:显式导入AimCallback和AimWriter用于追踪训练元数据。
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)
与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"})
下一步是什么?
在训练过程中,您可以在同一目录下启动另一个终端,运行aim up命令即可实时观察相关信息。