Advanced Experiment Tracking for LLM-Powered applications with Customized Open-Source MLFLow のまとめ

## はじめに
本記事は、Databricksのイベント「Databricks Data + AI Summit 2024」の「Advanced Experiment Tracking for LLM-Powered applications with Customized Open-Source MLFLow」の講演内容を日本語でまとめた記事です。
　　
[Intuit](https://www.intuit.com/)では、オープンソースのMLflowを活用して、LLMを搭載したアプリケーションのエクスペリメントトラッキングを高度化しています。本稿では、その取り組みについて詳しく解説します。

## LLMアプリケーションの概要
Intuitでは、QuickBooks、Mailchimp、Credit Karma、TurboTaxといった主要製品にLLMを搭載したアプリケーションを組み込んでいます。これらのアプリケーションは、顧客のビジネス活動を支援する重要な役割を担っています。

## なぜオープンソースMLflowを選択したのか？
マネージドソリューションではなく、オープンソースMLflowを選択した理由は、以下の3点です。

1. **クラウドプラットフォーム間での柔軟性**: Intuitでは、さまざまなMLユーザーが異なるツールやサービスを使用しています。MLflowはKubernetesクラスターにデプロイされ、UIを提供することで、ユーザーが使用するクライアントツールやクラウドに関係なく、統一されたエクスペリメントトラッキングソリューションを提供します。
2. **セルフマネージドバックエンドデータ**: ベンダーマネージドソリューションを使用する場合、データの管理はベンダー側に委ねられます。Intuitでは、プラットフォームチームとしてバックエンドに多くのメタデータを収集しており、エクスペリメントトラッキングデータも非常に重要です。MLflowを使用することで、これらのデータを統合し、さまざまなステークホルダー向けのレポートやダッシュボードを柔軟に構築できます。
3. **堅牢なオープンソース機能の活用**: MLflowは豊富な機能を備えており、活気のある開発コミュニティが存在します。ゼロから何かを構築するのではなく、これらの機能とコミュニティを活用することで、開発を加速させることができます。

## 評価プロセス
アプリケーションの評価ワークフローは、以下の手順で行われます。

1. **エンドユーザーによる設定**: UI上でデータセット、メトリック、追跡方法を設定します。
2. **スケーラブルなインフラストラクチャ上での評価実行**: KubernetesとKubeflowを使用して、評価をスケーラブルに実行します。
3. **結果のキャプチャ**: MLflowを使用して、メトリック、タグ、アーティファクトを記録します。
4. **実行の比較と選択**: MLflowのネイティブ機能を使用して、実行を比較し、最良の結果を生み出したプロンプトやガードレールを選択します。
5. **レビューと承認**: ドメインエキスパートが設定内容をレビューし、承認します。
6. **本番環境へのデプロイ**: 承認された設定が本番環境にデプロイされます。

## トラッキングと選択、レビュー、そして本番環境へのジャーニー
MLflowは、LLM搭載アプリのライフサイクル全体、つまり開発から本番環境へのデプロイメントまでをサポートします。開発者は、さまざまなプロンプト、パラメーター、ガードレールを試行し、評価結果に基づいて最適な設定を選択します。レビュー担当者は、選択された設定内容を精査し、承認します。承認された設定は、本番環境にデプロイされ、エンドユーザーに提供されます。

## 今後の展望
現在、MLflowの新しい機能である`MLflow evaluate`の活用を検討しています。この機能は、LLMの評価を効率化する強力なツールですが、Intuit独自のLLMゲートウェイとの連携が必要です。MLflowチームと協力し、ベンダー固有の契約ではなく、内部ゲートウェイプロキシを呼び出す方法を模索しています。

また、アプリケーション固有の評価データセットに対応するため、ドメイン固有のデータセットAPIの開発にも取り組んでいます。将来的には、これらの機能をコミュニティに還元し、より多くのユーザーがMLflowを活用できるようにしていきたいと考えています。

## 補足：MLflow evaluateとは？
ここで、今後の展望で述べたMLflow evaluateについて補足します。

MLflow 2.4で導入された`mlflow.evaluate()`は、大規模言語モデル(LLM)の評価を簡素化する強力な機能です。従来のMLモデルとは異なり、LLMの評価には単一の正解が存在しないことが多く、複雑です。`mlflow.evaluate()`はこの課題に対処し、以下のようなタスクにおけるLLMの性能を評価できます。

- テキスト要約
- テキスト分類
- 質問応答  
- テキスト生成

この機能は3つの主要コンポーネントで構成されています。

1. **評価対象のモデル**: MLflow pyfuncモデル、予測列を含むDataFrame、登録済みMLflowモデルのURI、あるいはPython呼び出し可能オブジェクト(HuggingFaceパイプラインなど)を指定できます。

2. **メトリクス**: 完全一致、ROUGE、ARIグレードレベル、Flesch-Kincaidグレードレベルなど、タスク固有のメトリクスを自動的に計算します。カスタムメトリクスの追加も可能です。

3. **評価データセット**: 入力テキストと正解ラベル(groundtruth)を含むDataFrameを指定します。

`mlflow.evaluate()`は指定したデータセットに対するLLMの予測とパフォーマンスメトリクスをMLflow Trackingに記録します。これにより、複数のLLMモデルの性能を比較し、本番環境に最適な候補を選択することが容易になります。

さらに、MLflow 2.4ではLLMの出力を比較するためのArtifact View UIと、データセット情報を追跡するための機能が導入されています。これらの新機能により、LLMのモデル開発サイクル全体をMLflowで効率的に管理できるようになりました。
　　
MLflow evaluateの詳細については、以下のドキュメントが参考になります。
- [MLflow 2.4を発表：ロバストなモデル評価のためのLLMOpsツール](https://www.databricks.com/jp/blog/announcing-mlflow-24-llmops-tools-robust-model-evaluation)
- [Evaluate large language models with MLflow](https://docs.databricks.com/ja/mlflow/llm-evaluate.html)

## まとめ
Intuitでは、オープンソースMLflowを積極的に活用し、LLM搭載アプリケーションのエクスペリメントトラッキングを効率化しています。MLflowの豊富な機能と活気のあるコミュニティを活用することで、開発を加速させ、高品質なLLM搭載アプリを顧客に提供しています。
さらに、MLflowの新機能であるMLflow evaluateの活用を検討しており、この機能はLLMの評価を効率化する強力なツールです。MLflow evaluateは、柔軟なモデル指定、多様な評価メトリクス、スケーラブルなインフラストラクチャを提供し、LLMのパフォーマンス評価を大幅に向上させます。Intuitは、MLflow evaluateをLLMのライフサイクル全体に組み込むことで、モデルの評価プロセスをさらに革新し、より高品質なアプリケーションを提供することを目指しています。

## Databricks Champion からのコメント
Intuit社はオープンソースの扱うメリットを理解し、自社の特定ニーズに応じて最適なソリューションを選んだことを示していますね。
個人的にはMLflowの新機能である「MLflow evaluate」の今後の活用方法が非常に気になります。
Intuit社がLLMのライフサイクル全体にMLflow evaluate を組み込むことで、モデルの評価プロセスがより一層革新的になっていくことに期待です！