🙌

MLflow3.0

に公開

MLflow3.0

https://mlflow.org/blog/mlflow-3-launch
6月9日、MLflow3.0が発表されました。
一番最初の導入にはGenAIに関する機能が追加されましたと堂々と記載されています。
この記事の内容を少し掘り下げてみようと思います。

Deep Observability with MLflow Tracing

MLflowでのLLM Tracingは包括的であり、よくあるログのように入出力だけでなく、以下の項目を自動でtracingします。

  • クエリ処理のための初期LLM呼び出し
  • 埋め込み計算を伴うベクトルデータベースの検索
  • ドキュメントのランキングと選択ロジック
  • トークン使用量を伴う最終的な回答生成
  • すべての中間入力、出力、およびタイミング情報
  • 詳細かつ包括的なエラーメッセージ(スタックトレースを含む場合あり)error occurs
    また、実装もautolog1行と各関数への decoratorだけです。
mlflow.langchain.autolog()

@mlflow.trace(name="customer_support")
def answer_question(question, customer_tier="standard"):

Systematic Quality Evaluation

Evaluationのアセットが揃っています。
回答評価シート(事前に計算されたセット)を用いた評価と、評価時にapplicationをcallして評価する直接評価を両方サポートしています。

具体的にはこのあたりの記事で解説されています。
https://docs.databricks.com/aws/en/mlflow3/genai/eval-monitor/
また、legacyとなったドキュメントはこちらです。
https://mlflow.org/docs/latest/genai/eval-monitor/llm-evaluation
以前これについて記事を書いたのですが、今回嬉しくも悲しくもlegacyになりました。
https://zenn.dev/hirayuki/articles/47f9c350b68ab8

Application Lifecycle Management

こちらはModelの life cycleについてです。
元々古典的なMLモデルに対しても実装されている機能でした。
Model Registoryにモデルを登録して、champion等のaliasをつけて、LightGBMとかsklearn系とか、管理できるのがMLflowのモデルライフサイクルでした。

これが今回LLMに対しても展開されます。

Sample codeを一部抜粋します。

# Package and version the complete application
with mlflow.start_run():
    model_info = mlflow.pyfunc.log_model(
        artifact_path="customer_service_bot",
        python_model=CustomerServiceBot(),
        artifacts={
            "llm_config": "configs/llm_config.yaml",
            "knowledge_base": "data/knowledge_embeddings.pkl",
            "prompt_template": "prompts/customer_service_v2.txt"
        },
        pip_requirements=["openai", "langchain", "chromadb"],
        signature=mlflow.models.infer_signature(example_input, example_output)
    )

    # Register in model registry for deployment
    registered_model = mlflow.register_model(
        model_uri=model_info.model_uri,
        name="customer_service_bot",
        tags={"version": "v2.1", "eval_score": "0.87"}
    )

mlflow.register_modelが個人的に一番大事なポイントだと思っていて、このタイミングでモデルのバージョン管理やaliasによる stagingを実現できます。

Enhanced Traditional ML & Deep Learning

LLMだけじゃなく、古典的MLモデルに対しても発展をアピールしていて、3点特徴を挙げていました。

  1. 強化されたモデルレジストリ: すべてのモデルタイプに対してより優れた系統追跡を提供します。
  2. 統一された評価フレームワーク: 評価システムはGenAIを超えて、コンピュータビジョン、NLP、表形式データモデル向けのカスタムメトリクスをサポートします。これにより、チームは異なるモデルタイプ間で評価プロセスを標準化できるようになります。
  3. 改善されたデプロイメントワークフロー: 品質ゲートや自動テスト機能は、scikit-learnの分類器からマルチモーダル基盤モデルまで、あらゆるMLflowモデルに対応します。

※1はすみません、正直ケースが想像できていないので、誰かコメントくれると嬉しいです。

統一された評価フレームワークについてはかなりいいですね。
https://mlflow.org/docs/latest/ml/evaluation
MLflowはmlflow.models.evaluateという関数を用いてあらゆるモデル、sklearnであったり、pytorchであったり、、、それらを一個のこの関数でまとめて評価して、よしなにいい感じのmetricsを全部計算してくれる機能があります。

result = mlflow.models.evaluate(
        model="models:/my-model/1",
        data=eval_data,
        targets="target",
        model_type="classifier",
        evaluators=["default"],
    )

ただ、個人的にはBert modelとか動かしているとたまに不具合があって、これがより様々なケースに拡張したのだと思っています。

最後に

MLflowの進化の方向はLLMに向かっていると感じた3.0リリースでした。
逆に古典MLは結構出揃ってきたかな?という印象で、確かに普段使いしていてもあまり不自由はないですし、、、
今後はLLMの追跡Frameworkとしてより注目していきたいと思います。

いいねいただけると励みになります。ここまで読んでいただきありがとうございました。

Discussion