mei_13のPython講座 ロゴ

【Pythonコラム】MLflow:機械学習プロジェクトを整理整頓する魔法のツールボックス




MLflow:機械学習プロジェクトを整理整頓する魔法のツールボックス

機械学習プロジェクトは、実験の繰り返し、モデルのバージョン管理、再現性の確保など、複雑な作業が山積みです。「あの時使ったデータは?」「最高のパフォーマンスを出したモデルはどれだ?」といった疑問にスムーズに答えられますか?もし答えに窮するなら、MLflowがあなたの救世主になるかもしれません。

MLflowは、機械学習のライフサイクル全体を管理するためのオープンソースプラットフォームです。プロジェクトの整理、実験の追跡、モデルのデプロイを支援し、チームでのコラボレーションを円滑にします。たとえるなら、散らかりがちなあなたの研究室を整理整頓し、必要なものがすぐに取り出せるようにしてくれる、頼もしいツールボックスのような存在です。

MLflowの主要コンポーネント

MLflowは、主に以下の4つのコンポーネントで構成されています。

  1. MLflow Tracking:実験の記録と管理

    MLflow Trackingは、実験を記録し、パラメータ、メトリック、ソースコード、アーティファクト(例えば、モデルのファイルや画像)などを追跡するためのツールです。実験ごとに「ラン」と呼ばれる単位で情報を記録します。

    例えば、以下のようなコードで、学習率やエポック数などのパラメータ、損失や精度などのメトリックを記録できます。

    import mlflow
    import mlflow.sklearn
    from sklearn.linear_model import LogisticRegression
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import accuracy_score
    
    # データ準備(例)
    X, y = ... # 特徴量とターゲット変数
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
    
    with mlflow.start_run():
        # パラメータの記録
        learning_rate = 0.01
        epochs = 100
        mlflow.log_param("learning_rate", learning_rate)
        mlflow.log_param("epochs", epochs)
    
        # モデルの学習
        model = LogisticRegression(solver='liblinear', random_state=0)
        model.fit(X_train, y_train)
    
        # 評価とメトリックの記録
        y_pred = model.predict(X_test)
        accuracy = accuracy_score(y_test, y_pred)
        mlflow.log_metric("accuracy", accuracy)
    
        # モデルの保存
        mlflow.sklearn.log_model(model, "model")
    
    

    このコードを実行すると、MLflowは自動的に実験情報を記録し、MLflow UIで確認することができます。MLflow UIは、ブラウザからアクセスできるインターフェースで、実験の比較や過去のランの確認に役立ちます。

  2. MLflow Projects:コードのパッケージ化と再現性の確保

    MLflow Projectsは、機械学習プロジェクトをパッケージ化し、再現性を確保するための標準的な方法を提供します。MLprojectというファイルを作成し、プロジェクトの依存関係や実行方法を記述します。これにより、誰でも同じ環境で同じコードを実行し、同じ結果を得ることができます。

    例えば、MLprojectファイルは以下のようになります。

    name: my_project
    conda_env: conda.yaml # 依存関係を記述したconda環境ファイル
    entry_points:
      main:
        command: "python train.py --learning-rate {learning_rate} --epochs {epochs}"
        parameters:
          learning_rate: {type: float, default: 0.01}
          epochs: {type: int, default: 100}
    

    そして、以下のコマンドでプロジェクトを実行できます。

    mlflow run . -P learning-rate=0.005 -P epochs=200
    

    これにより、train.pyが指定されたパラメータで実行され、結果がMLflow Trackingに記録されます。

  3. MLflow Models:モデルのパッケージ化とデプロイ

    MLflow Modelsは、様々なプラットフォーム(例えば、REST API、Dockerコンテナ、AWS SageMaker)にモデルをデプロイするための標準的な方法を提供します。モデルをMLflow形式で保存することで、異なる環境やツールで簡単にモデルを再利用できます。

    上記の例で保存したモデルは、以下のコマンドでREST APIとしてデプロイできます。

    mlflow models serve -m runs:/<run_id>/model -p 1234
    

    <run_id>は、MLflow Trackingで記録されたランのIDです。これにより、ポート1234でREST APIが起動し、モデルにアクセスできます。

  4. MLflow Registry:モデルの管理とバージョン管理

    MLflow Registryは、モデルのライフサイクル全体を管理するための中心的なリポジトリです。モデルのバージョン管理、ステージング、本番環境へのデプロイなど、モデルの進化を追跡し、管理することができます。

    モデルをRegistryに登録するには、以下のコードを使用します。

    from mlflow.tracking import MlflowClient
    
    client = MlflowClient()
    model_uri = "runs:/<run_id>/model"
    model_name = "my_model"
    
    client.register_model(model_uri, model_name)
    

MLflowを始めるためのステップ

  1. インストール: pip install mlflow コマンドで簡単にインストールできます。

  2. 実験の記録: mlflow.start_run() を使って実験を開始し、mlflow.log_param()mlflow.log_metric() でパラメータやメトリックを記録します。

  3. MLflow UIの活用: mlflow ui コマンドでMLflow UIを起動し、実験結果を可視化します。

まとめ

MLflowは、機械学習プロジェクトを効率的に管理し、再現性を高めるための強力なツールです。最初は少し難しく感じるかもしれませんが、基本的な使い方をマスターすれば、あなたの機械学習ワークフローを劇的に改善することができます。MLflowを使いこなして、よりスマートな機械学習ライフを実現しましょう!



< Dask
コラム一覧に戻る
LangSmith >

レッスン概要

◯月額4,000円で質問し放題!!
◯完全オンライン
◯翌日までには必ず返信
◯挫折しない独自の学習メソッド
◯圧倒的高評価!!
◯テキストベースで時間を選ばない
◯高品質なサンプルコード
詳細はこちら
興味がある方はまず質問だけでもどうぞ!