0
0

mlflow.start_run(nested=True)を使わないRun間の親子関係の設定方法

Last updated at Posted at 2024-02-07

目次

1. はじめに
2. 親子関係がどのように設定されているか
3. nestedオプションを使わない親子関係の作り方
4. 参考文献

はじめに

mlflowは、機械学習プロジェクトの実験管理を容易にするツールです。特に、実験(Run)に親子関係を持たせて管理することで、複雑な実験の追跡と分析が簡単になります。
通常Runに親子関係を持たせたい場合は、mlflow.start_run(nested=True)とすればいいのですが、それが適用できない場面に遭遇したため、他の方法でRun間に親子関係を持たせる方法を調べることになりました。
この記事では、mlflowのRunの親子関係がどのように記述されているか、nested=Trueオプションを用いないで親子関係を持たせる方法をまとめています。

親子関係がどのように設定されているか

mlflowでは、tags.mlflow.parentRunIdによって、Runの親子関係が記述されています。
例えば以下のコードをサンプルとして実行します。

import mlflow

with mlflow.start_run() as parent_run:
    mlflow.set_tag("mlflow.runName", "parent_run")
    print(f"Parent run ID: {parent_run.info.run_id}")
    with mlflow.start_run(nested=True) as child_run:
        mlflow.set_tag("mlflow.runName", "child_run")
        print(f"Child run ID: {child_run.info.run_id}")


>>>
Parent run ID: 0bfac406f7084cd39c27d3274f1e39f2
Child run ID: ac358223146a437a8167badfdaa9c150

すると、

mlruns
└── 0
    ├── ac358223146a437a8167badfdaa9c150 <- Child Run
    │   └── tags
    │       └── mlflow.parentRunId  # 0bfac406f7084cd39c27d3274f1e39f2
    ├── 0bfac406f7084cd39c27d3274f1e39f2 <- Parent Run
    └── meta.yaml

のようにログが記録されます(各Runのディレクトリ内には、metricsやartifactsなどのディレクトリも生成されますが省略しています)。
このとき、Child runである、ac358223146a437a8167badfdaa9c150の中のtagsというディレクトリ内にmlflow.parentRunIdという名前のテキストファイルが作成され、ここに書かれたidによって親子関係が識別できるようになっています。
今回だとmlflow.parentRunIdの中身は、Parent run IDである0bfac406f7084cd39c27d3274f1e39f2となっています。
mlflow uiで見てみると、以下のように親子関係ができています。
Pasted image 20240207121212.png

nestedオプションを使わない親子関係の作り方

上記のことを踏まえると、

with mlflow.start_run(nested=True)

のようにして、親子関係を作ることができない場合でも

import mlflow

with mlflow.start_run() as run1:
    mlflow.set_tag("mlflow.runName", "run1")
    run1_id = run1.info.run_id
    print(f"Run1 ID: {run1.info.run_id}")

with mlflow.start_run() as run2:
    mlflow.set_tag("mlflow.runName", "run2")
    mlflow.set_tag("mlflow.parentRunId", run1.info.run_id)
    print(f"Run2 ID: {run2.info.run_id}")


>>>
Run1 ID: 3c4e15b063234ea7b2969c4c72141ef0
Run2 ID: 4d0dceb3f8e74c9bb1ba7951aec8b18d

とすることで、run2run1のChild Runとすることが可能です。
mlflow uiを立ち上げてみると、以下のようにきちんと親子関係ができています。
Pasted image 20240207121637.png

参考文献

mlflow document

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0