Aimシリーズ:入門してみた
今回から、Aimという実験管理ツールに入門してみます。
※ 出張中につき、短編になります。
Aimとは?
Aimとはオープンソースの実験管理ツールになります。Aimを利用すると実験を実行し、その結果発生する様々なメタデータを一元的に取り扱い、グラフィカルに解析することができます。Aimを利用することで以下のようなことが実現できます。
- MLパイプラインのロギングを可能にする
- UIを通してメタデータを比較分析できる
- ML学習を効率的に実行可能
- 実験管理のオーガナイズができる
早速使ってみる
今回はGitHub上で提供されている一番シンプルな例を使ってみます。
環境構築
uv
を利用して環境構築します。
uv init aim_quickstart -p 3.12
cd aim_quickstart
uv add aim
コードの実装
今回の例では、ハイパーパラメータの設定と、仮想的に生成されたlossとaccuracyを記録します。
from aim import Run
# Initialize a new run
run = Run()
# Log run parameters
run["hparams"] = {
"learning_rate": 0.001,
"batch_size": 32,
}
# Log metrics
for i in range(10):
run.track(i, name='loss', step=i, context={ "subset":"train" })
run.track(i, name='acc', step=i, context={ "subset":"train" })
実行および結果の確認
まずはコードを実行します。
uv run main.py
実行した後に、以下のようにしてaim up
を実行することでUIを起動できます。
uv run aim up
これを実行して127.0.0.1:43800
にアクセスすると以下のような画面が表示されます。
トップ画面
トップ画面でアクティビティとしてRunが記録されているので選択すると以下のような画面に遷移します。
トップ画面
先ほど実行した実験が一つのRunとして記録されているので選択すると、以下のように最初の画面で記録されたハイパーパラメータが表示されます。
ハイパーパラメータ画面
今回はmetricsとしてlossとaccを記録しているので、metrics
タブも見てみると、以下のように記録されていることが確認できました。
ハイパーパラメータ画面
mlflowとの比較
実験管理ツールとして有名なものにmlflowがあり、私のブログでもいくつか紹介記事を出していますが、aimがどのようにmlflowと違うか説明が載っていましたのでまとめます。
- MLFlowはエンドツーエンドのMLライフサイクルツールであり、Aimはトレーニングの追跡に重点を置いてる
- AimとMLflowの主な違いは、UIのスケーラビリティと実行比較機能
- Runの比較
- Aimは追跡対象パラメータを第一級オブジェクトとして扱う。ユーザーは、パラメータを使用して実行、メトリクス、画像をクエリしたり、フィルタリングが可能
- MLFlowには追跡対象設定による検索機能はあるがグループ化、集計、ハイパーパラメータによるサブプロットなどの比較機能は利用できない
- UIのスケーラビリティ
- Aim UIは、数千ステップの計算で数千のメトリクスを同時にスムーズに処理が可能。ただし、数千のメトリクスをそれぞれ数万ステップで探索すると、動作が不安定になる場合があるため注意する
- MLflow UIは数百回実行すると動作が遅くなることがある
Aimとmlflowは相互に得意分野が異なるので、場合によっては併用することができ、そのためのツールとしてaimflowが提供されているようです。
まとめ
今回はAimを利用して実験管理の初歩の初歩を見てみました。mlflowと競合するというよりお互いに連携することでより良いものを作っていくという方針もあるようで、今後どんどん掘り下げていこうと思います。
Discussion