MLflowを使用した機械学習実験のトラッキング
MLflowを使った機械学習実験のトラッキング
イントロダクション
機械学習(ML)の領域は急速に拡大し、さまざまなセクターで応用されています。MLflowを使用して機械学習の実験を追跡し、それらを構築するために必要なトライアルを管理することは、それらが複雑になるにつれてますます困難になります。これにより、データサイエンティストにとって多くの問題が生じる可能性があります。例えば:
- 実験の損失または重複:実施された多くの実験を追跡することは困難であり、実験の損失や重複のリスクを高めます。
- 結果の再現性:実験の結果を再現することは困難な場合があり、モデルのトラブルシューティングや改善が困難になります。
- 透明性の欠如:モデルの予測を信頼するのが難しくなる場合があります。モデルの作成方法がわかりにくいためです。
上記の課題を考慮すると、MLの実験を追跡し、再現性を向上させるためのメトリックをログに記録し、協力を促進するツールを持つことが重要です。このブログでは、コード例を含め、オープンソースのML実験追跡とモデル管理ツールであるMLflowについて探求し学びます。
学習目標
- 本記事では、MLflowを使用した機械学習の実験追跡とモデルレジストリの理解を目指します。
- さらに、再利用可能で再現性のある方法でMLプロジェクトを提供する方法を学びます。
- 最後に、LLMとは何か、なぜアプリケーション開発のためにLLMを追跡する必要があるのかを学びます。
MLflowとは何ですか?
MLflowは、機械学習プロジェクトを簡単に扱うための機械学習実験追跡およびモデル管理ソフトウェアです。MLワークフローを簡素化するためのさまざまなツールと機能を提供します。ユーザーは結果を比較し、複製し、パラメータやメトリックをログに記録し、MLflowの実験を追跡することができます。また、モデルのパッケージ化と展開も簡単に行えます。
MLflowを使用すると、トレーニング実行中にパラメータとメトリックをログに記録することができます。
# mlflowライブラリをインポートする
import mlflow
# mlflowのトラッキングを開始する
mlflow.start_run()
mlflow.log_param("learning_rate", 0.01)
mlflow.log_metric("accuracy", 0.85)
mlflow.end_run()
さらに、MLflowはモデルのバージョニングとモデル管理もサポートしており、簡単にさまざまなバージョンのモデルを追跡して整理することができます:
import mlflow.sklearn
# モデルをトレーニングして保存する
model = train_model()
mlflow.sklearn.save_model(model, "model")
# 特定のバージョンのモデルをロードする
loaded_model = mlflow.sklearn.load_model("model", version="1")
# 予測のためにロードされたモデルを提供する
predictions = loaded_model.predict(data)
さらに、MLflowにはモデルレジストリがあり、協力的なモデル開発のためにモデルを簡単に監視、共有、展開することができます。
MLflowはモデルレジストリ、レシピ、およびプラグインをサポートし、豊富な言語モデル追跡も可能です。次に、MLflowライブラリの他のコンポーネントを見ていきます。
MLflow – 実験の追跡
MLflowには、任意のMLプロジェクトの機械学習実験を追跡するための実験追跡など、多くの機能があります。実験追跡は、診断目的のためのパラメータ、メトリック、コードバージョン、および出力ファイルのログを記録するための一意のAPIとUIのセットです。MLflowの実験追跡には、Python、Java、REST、およびRのAPIがあります。
次に、Pythonプログラミングを使用したMLflow実験追跡のコード例を見てみましょう。
import mlflow
import mlflow.sklearn
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
from mlflow.models.signature import infer_signature
# データセットの読み込みと前処理
data = load_dataset()
X_train, X_test, y_train, y_test = train_test_split(data["features"], data["labels"], test_size=0.2)
# MLflowの実験を開始する
mlflow.set_experiment("My Experiment")
mlflow.start_run():
# パラメータをログに記録する
mlflow.log_param("n_estimators", 100)
mlflow.log_param("max_depth", 5)
# モデルを作成してトレーニングする
model = RandomForestClassifier(n_estimators=100, max_depth=5)
model.fit(X_train, y_train)
# テストセットで予測を行う
y_pred = model.predict(X_test)
signature = infer_signature(X_test, y_pred)
# メトリックをログに記録する
accuracy = accuracy_score(y_test, y_pred)
mlflow.log_metric("accuracy", accuracy)
# モデルを保存する
mlflow.sklearn.save_model(model, "model")
# MLflowの実行を終了する
mlflow.end_run()
上記のコードでは、MLflowとsklearnライブラリからモジュールをインポートしてモデル実験のトラッキングを行います。その後、サンプルデータセットを読み込んで、mlflowの実験APIを使用して実験を進めます。実験を実行し、「マイエクスペリメント」という名前の実験に保存するために、start_run()、log_param()、log_metric()、save_model()のクラスを使用しています。
これ以外にも、MLflowはパラメータやメトリックを明示的にトラッキング関数を呼び出さずに自動的にログに記録する機能もサポートしています。トレーニングコードの前にmlflow.autolog()を使用して、すべてのパラメータとアーティファクトをログに記録することができます。
MLflow – モデルレジストリ
モデルレジストリは、一連のAPIとUIを使用して、完全なMLOpsワークフローとの効果的な連携を実現するために、モデルアーティファクトを格納する集中的なモデル登録所です。
モデルレジストリは、モデルの保存、モデルの登録、モデルのバージョン管理、ステージングなど、完全な機械学習モデルの系統図を提供します。これは単一のUIまたは一連のAPIを使用して行うことができます。
以下のスクリーンショットでは、MLflowモデルレジストリUIを見てみましょう。
上記のスクリーンショットは、MLflow UI上の保存されたモデルアーティファクトを表示し、「モデルを登録する」ボタンを使用してモデルをモデルレジストリに登録することができることを示しています。モデルが登録されると、モデルレジストリUIページでバージョン、タイムスタンプ、およびステージが表示されます。(詳細については、以下のスクリーンショットを参照してください。)
先ほど説明したUIワークフロー以外にも、MLflowはAPIワークフローをサポートしており、モデルレジストリにモデルを保存し、モデルのステージとバージョンを更新することができます。
# sklearnモデルをログに記録し、バージョン1として登録する
mlflow.sklearn.log_model(
sk_model=model,
artifact_path="sklearn-model",
signature=signature,
registered_model_name="sk-learn-random-forest-reg-model",
)
上記のコードは、モデルをログに記録し、モデルが存在しない場合にのみモデルを登録します。モデル名が存在する場合、新しいバージョンのモデルが作成されます。MLflowライブラリでは、モデルを登録するための他の多くの代替手段があります。同様の内容については、公式ドキュメントを参照することを強くお勧めします。
MLflow – プロジェクト
MLflowのもう一つのコンポーネントは、データチームの任意のメンバーに対して再利用可能で再現性のある形でデータサイエンスのコードをパッケージ化するために使用されるMLflowプロジェクトです。
プロジェクトコードには、プロジェクト名、エントリーポイント、および環境情報が含まれており、依存関係やその他のプロジェクトコードの設定を指定してプロジェクトを実行するために使用されます。MLflowはConda、仮想環境、Dockerイメージなどの環境をサポートしています。
要するに、MLflowプロジェクトファイルには以下の要素が含まれています:
- プロジェクト名
- 環境ファイル
- エントリーポイント
以下は、MLflowプロジェクトファイルの例です。
# プロジェクト名
name: My Project
python_env: python_env.yaml
# または
# conda_env: my_env.yaml
# または
# docker_env:
# image: mlflow-docker-example
# エントリーポイントを記述
entry_points:
main:
parameters:
data_file: path
regularization: {type: float, default: 0.1}
command: "python train.py -r {regularization} {data_file}"
validate:
parameters:
data_file: path
command: "python validate.py {data_file}"
上記のファイルは、プロジェクト名、環境設定ファイルの名前、およびプロジェクトの実行時に実行されるプロジェクトコードのエントリーポイントを示しています。
以下はPythonのpython_env.yaml環境ファイルの例です:
# プロジェクトを実行するために必要なPythonのバージョン。
python: "3.8.15"
# パッケージをビルドするために必要な依存関係。このフィールドはオプションです。
build_dependencies:
- pip
- setuptools
- wheel==0.37.1
# プロジェクトを実行するために必要な依存関係。
dependencies:
- mlflow==2.3
- scikit-learn==1.0.2
MLflow — LLMトラッキング
LLMは最近の技術業界で大きな影響力を持っています。LLMパワードアプリケーションの台頭に伴い、開発者はますますLLMをワークフローに取り入れており、開発ワークフロー中にそのようなモデルをトラッキングおよび管理する必要性が生じています。
LLMとは何ですか?
大規模言語モデルは、トランスフォーマーアーキテクチャを使用して開発されたニューラルネットワークモデルの一種で、訓練パラメータが数十億に及びます。このようなモデルは、高い流暢性と一貫性を持って、テキスト生成、翻訳、質問応答など、多様な自然言語処理タスクを実行することができます。
なぜLLMトラッキングが必要ですか?
従来の機械学習モデルとは異なり、LLMはパフォーマンスを評価し、最適なプロダクションモデルを見つけるためにプロンプトを監視する必要があります。LLMにはtop_k、temperatureなどの多くのパラメータと複数の評価メトリックスがあります。異なるパラメータの異なるモデルは特定のクエリに対してさまざまな結果を生み出します。したがって、最も優れたLLMを特定するためにそれらを監視することが重要です。
MLflowのLLMトラッキングAPIは、LLMの動作をログに記録し、監視するために使用されます。これには、LLMに提出された入力、出力、およびプロンプトが記録されます。また、プロセスの結果を表示および分析するための包括的なUIも提供します。LLMトラッキングAPIについて詳しく知りたい場合は、詳細な理解のために公式ドキュメントを参照することをお勧めします。
結論
まとめると、MLflowは、機械学習ワークフローと実験を管理するための非常に効果的で包括的なプラットフォームです。モデル管理やさまざまな機械学習ライブラリのサポートなどの機能を備えています。実験トラッキング、モデルレジストリ、プロジェクト、LLMトラッキングの4つの主要なコンポーネントを備えたMLflowは、機械学習モデルの管理と展開のためのシームレスなエンドツーエンドの機械学習パイプライン管理ソリューションを提供します。
キーポイント
この記事からの主な学びを見てみましょう。
- 機械学習実験トラッキングは、データサイエンティストや機械学習エンジニアがモデルのパラメータとメトリックを簡単にトラックし記録するのに役立ちます。
- モデルレジストリは、MLモデルを一元的に保管および管理するのに役立ちます。
- MLflowプロジェクトは、プロジェクトコードをパッケージングおよび展開するために機械学習コードを簡素化するのに役立ち、異なる環境での結果の再現を容易にします。
よくある質問
この記事で表示されているメディアはAnalytics Vidhyaの所有ではなく、著者の裁量で使用されています。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles