MLflowを使用した機械学習実験のトラッキング

MLflowを使った機械学習実験のトラッキング

イントロダクション

機械学習(ML)の領域は急速に拡大し、さまざまなセクターで応用されています。MLflowを使用して機械学習の実験を追跡し、それらを構築するために必要なトライアルを管理することは、それらが複雑になるにつれてますます困難になります。これにより、データサイエンティストにとって多くの問題が生じる可能性があります。例えば:

  • 実験の損失または重複:実施された多くの実験を追跡することは困難であり、実験の損失や重複のリスクを高めます。
  • 結果の再現性:実験の結果を再現することは困難な場合があり、モデルのトラブルシューティングや改善が困難になります。
  • 透明性の欠如:モデルの予測を信頼するのが難しくなる場合があります。モデルの作成方法がわかりにくいためです。
Photo by CHUTTERSNAP on Unsplash

上記の課題を考慮すると、MLの実験を追跡し、再現性を向上させるためのメトリックをログに記録し、協力を促進するツールを持つことが重要です。このブログでは、コード例を含め、オープンソースのML実験追跡とモデル管理ツールであるMLflowについて探求し学びます。

学習目標

  • 本記事では、MLflowを使用した機械学習の実験追跡とモデルレジストリの理解を目指します。
  • さらに、再利用可能で再現性のある方法でMLプロジェクトを提供する方法を学びます。
  • 最後に、LLMとは何か、なぜアプリケーション開発のためにLLMを追跡する必要があるのかを学びます。

MLflowとは何ですか?

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 – モデルレジストリ

モデルレジストリイラスト(出典:Databricks)

モデルレジストリは、一連のAPIとUIを使用して、完全なMLOpsワークフローとの効果的な連携を実現するために、モデルアーティファクトを格納する集中的なモデル登録所です。

モデルレジストリは、モデルの保存、モデルの登録、モデルのバージョン管理、ステージングなど、完全な機械学習モデルの系統図を提供します。これは単一のUIまたは一連のAPIを使用して行うことができます。

以下のスクリーンショットでは、MLflowモデルレジストリUIを見てみましょう。

mlflow UIのスクリーンショット

上記のスクリーンショットは、MLflow UI上の保存されたモデルアーティファクトを表示し、「モデルを登録する」ボタンを使用してモデルをモデルレジストリに登録することができることを示しています。モデルが登録されると、モデルレジストリUIページでバージョン、タイムスタンプ、およびステージが表示されます。(詳細については、以下のスクリーンショットを参照してください。)

MLflowモデルレジストリ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は、機械学習モデルの管理と展開のためのシームレスなエンドツーエンドの機械学習パイプライン管理ソリューションを提供します。

キーポイント

この記事からの主な学びを見てみましょう。

  1. 機械学習実験トラッキングは、データサイエンティストや機械学習エンジニアがモデルのパラメータとメトリックを簡単にトラックし記録するのに役立ちます。
  2. モデルレジストリは、MLモデルを一元的に保管および管理するのに役立ちます。
  3. MLflowプロジェクトは、プロジェクトコードをパッケージングおよび展開するために機械学習コードを簡素化するのに役立ち、異なる環境での結果の再現を容易にします。

よくある質問

この記事で表示されているメディアはAnalytics Vidhyaの所有ではなく、著者の裁量で使用されています。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

データサイエンス

データサイエンスへのゲートの解除:GATE 2024 in DS&AIの究極の学習ガイド

イントロダクション Graduate Aptitude Test in Engineering(GATE)は、インドで行われる大学院入学試験です。この試験は主...

機械学習

NVIDIAは、Generative AIを用いて薬物探索を加速させるためにGenentechと協力

ジェネンテック(ロシュグループの一員)は、 生成AI を使って新しい治療法を発見し、患者に効果的に治療を提供することを先...

AI研究

UC San Diegoの研究者たちは、EUGENeという使いやすいディープラーニングゲノミクスソフトウェアを紹介します

ディープラーニングは生活のあらゆる分野で使用されています。あらゆる領域でその有用性があります。バイオメディカル研究に...

機械学習

2023年にディープラーニングのためのマルチGPUシステムを構築する方法

「これは、予算内でディープラーニングのためのマルチGPUシステムを構築する方法についてのガイドです特に、コンピュータビジ...

機械学習

「コルーチンの実行のマスタリング:UnityにおけるYield、Flow、そして実用例」となります

この包括的なガイドを通じて、Unityでの高度なコルーチンの使用方法を探求しましょうyieldingのテクニック、ゲームループの統...

データサイエンス

分散システム設計におけるコンセンサスアルゴリズムの役割の探索

この記事では、信頼性、データの一貫性、および耐障害性を確保する責任を負う人々の重要性と役割について探求します