われがわログ

最適化アルゴリズムとかプログラミングについて書きたい

MLflow TrackingのREST APIを叩くC++ライブラリを作った

MLflow Trackingは数値実験のコード・設定等を管理できるソフトウェアであって、かなり使い勝手がよい。試行錯誤しながら計算をまわしていると「この結果のときパラメータどう設定したっけ、、」みたいなことがよくあるが、実験毎にパラメータを全てMLflow Trackingに保存しておけばこのような事態を防げる。また、計算の途中結果(例えばlossとかaccuracy)をグラフで確認できるのも便利だ。

MLflow Trackingが公式にサポートしている言語は、Python, R, Javaの3つで、その他REST APIを使ってもmlflowのサーバーと通信できる。さて、例のごとく、C++でも数値実験の管理をしたいということで、MLFlow TrackingのREST APIを叩くライブラリを作成した。コード例や依存ライブラリの説明はgithubのREADMEを見てほしい。

github.com

現在実装しているAPIは以下の通り。さしあたり、自分が必要なものだけ実装した。

  • Create Experiment
  • Get Experiment
  • Get Experiment By Name
  • Create Run
  • Log Metric
  • Log Batch
  • Set Tag
  • Log Param
  • Update Run

API一覧は下記URLのとおり。

mlflow.org

artifactをサーバに送信するAPIが存在しないため、このライブラリではartifactをアップロードできないのがネック。ファイルのパスをタグ orパラメータに保存しておくしかないか。

ちなみに、例外でなくRustのようなResult型で実行結果を返すようにしたのだが、どうもコードが冗長になる。私の使い方の問題か?