MLflowでは MLflow2.9.0 (December 6, 2023)から Stageを非推奨にしているようです。
Stageとは Modelの開発・テスト・本番かどうかを表すためのタグのようなものです。つまりはモデルのライフサイクル管理ですね。
https://mlflow.org/docs/latest/model-registry.html#migrating-from-stages
この件に関して全然知らなかったので、これを学んでいこうと思います。(1年以上前の変更ではありますが)
基本的に本記事は公式ドキュメントの読解と意訳的な立ち位置です。
今までのモデル管理とは
今まではモデルのライフサイクルを stageで管理してきました。
以下の画像通りですね。
さらには Model version tagsと Model version aliasesも実装されており、これらを活用してモデル管理をより柔軟にできますとのことです。
tagはモデル検索に利用できます。
例えば以下のコードを利用するとModel registoryに管理されているモデルのtags.validation_status = 'passed'だけ検索できます。
model_name = "IrisLinearRegressionModel"
versions = client.search_model_versions(f"name='{model_name}' and tags.validation_status = 'passed'")
また、公式ドキュメントからの抜粋ですが、 aliasは指定のモデルを呼び出す時にも便利です。
get_model_version_by_alias()
client API or the model URI models:/<registered model name>@champion
で呼び出すことができるので、コードはchampionに固めておいて、モデル管理だけUIからの変更やモデル管理を実現したパイプラインで変えておけば良いのでとても便利です。
(個人的にはその上で使える機能が多すぎてどう使えば良いかまだ悩みますが)
今後のモデル管理とは(Migrating models away from stages
)
一つ目と二つ目は環境(dev,staging,prod)に関して如何にモデルを分けるかが書かれていましたが、それよりも三つ目のsection、「aliasを使ってバージョン管理を推奨する。」この点が一番大切だと思ったので、これを書きたいと思います。
一番のポイントは今まで
models:/regression_model/Production
でproductionモデルを読み込んでいた箇所を models:/prod.ml_team.regression_model@champion
に変えようということですね。
(models:のenvは、開発環境と依存関係にあります。そして複数環境のモデルをcross environementで使う可能性があるので、自身でprefixとして prod.ml_teamとか付けてねってことみたいです。)
これは実際に触ってみてもう一つ嬉しいこともありました。今までstageは複数のモデルバージョンに対して productionを設定できてしまいました。しかしaliasは一つのモデルレジストリに対して一つのバージョンにしか設定できないようです。これは正しいより正しい管理が可能になりますね。
The "champion" alias is also being used on version 8. Adding it to this version will remove it from version 8.
まとめ
- stageは無くなるのでaliasで管理しよう
- cross environmentsに備えて prod等自分でmodel名のprefixにしてね