見出し画像

SIGNATE_おれおれ環境構築備忘録_2(MLflow追加編)

はじめに

前回の記事では、Docker環境でJupyter Notebookを使用する基本的な環境構築について説明しました。今回は、機械学習の実験管理ツールであるMLflowを追加し、モデルの開発・管理をより効率的に行える環境を構築します。

MLflowについては下記サイトの他、解説を参照願います。

変更点の概要

前回の環境から以下の機能を追加します:

  • MLflow UIによる実験管理

  • 実験結果の可視化

  • モデルのバージョン管理

設定ファイルの変更

Dockerfile

FROM condaforge/miniforge3:latest

RUN apt update && \
    apt install -y build-essential

COPY requirements.txt /tmp
RUN pip install -r /tmp/requirements.txt
RUN pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu

# 必要なディレクトリを作成
RUN mkdir /home/work
RUN mkdir -p /mlflow/artifacts

# ポートの設定
EXPOSE 8888 5000

# 作業ディレクトリを設定
WORKDIR /home/work

# MLflowサーバーとJupyter Notebookを起動
CMD mlflow server --host 0.0.0.0 --port 5000 --backend-store-uri file:///mlflow/mlruns --default-artifact-root file:///mlflow/mlruns & \
    jupyter notebook \
    --port=8888 \
    --ip=0.0.0.0 \
    --allow-root \
    --no-browser \
    --NotebookApp.token='' \
    --NotebookApp.notebook_dir='/home/work'

docker-compose.yml

version: "3"

services:
  jupyter-mlflow:
    build: ./
    shm_size: '2gb'
    ports:
      - "8888:8888"
      - "5001:5000"
    volumes:
      - "./:/home/work"
      - "./mlflow:/mlflow"
    environment:
      - MLFLOW_TRACKING_URI=/mlflow/mlruns

requirements.txt に追加

mlflow
scikit-learn

環境構築と基本操作

コンテナのビルドと起動

docker-compose up -d --build

アクセス方法

MLflowの使い方

基本的な実験の記録

import mlflow
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from sklearn.linear_model import LinearRegression

# MLflowの設定
mlflow.set_tracking_uri("file:///mlflow/mlruns")

# 実験名を設定
experiment_name = "linear_regression_test"
try:
    experiment_id = mlflow.create_experiment(experiment_name)
except mlflow.exceptions.MlflowException:
    experiment_id = mlflow.get_experiment_by_name(experiment_name).experiment_id

mlflow.set_experiment(experiment_name)

# サンプルデータの作成
X = np.array([[1], [2], [3], [4], [5]])
y = np.array([2, 4, 6, 8, 10])

# データの分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# MLflowで実験を記録
with mlflow.start_run() as run:
    print(f"Run ID: {run.info.run_id}")
    
    # モデルのトレーニング
    model = LinearRegression()
    model.fit(X_train, y_train)
    
    # 予測と評価
    predictions = model.predict(X_test)
    mse = mean_squared_error(y_test, predictions)
    
    # パラメータと指標を記録
    mlflow.log_param("model_type", "LinearRegression")
    mlflow.log_param("train_size", len(X_train))
    mlflow.log_param("test_size", len(X_test))
    
    # より多くのメトリクスを記録
    mlflow.log_metric("mse", mse)
    mlflow.log_metric("rmse", np.sqrt(mse))
    mlflow.log_metric("coefficient", model.coef_[0])
    mlflow.log_metric("intercept", model.intercept_)
    
    # 入力例とモデルシグネチャを設定してモデルを保存
    signature = mlflow.models.infer_signature(
        X_train, 
        model.predict(X_train)
    )
    
    input_example = X_train[0:2]
    
    mlflow.sklearn.log_model(
        model, 
        "model",
        signature=signature,
        input_example=input_example
    )
    
    print(f"MSE: {mse}")
    print(f"RMSE: {np.sqrt(mse)}")
    print(f"Coefficient: {model.coef_[0]}")
    print(f"Intercept: {model.intercept_}")


notebook上で実行した結果
localhost:5001を確認すると実行結果が追加されている
IDや値を確認することができる。

注意点

  • .gitignoreに以下を追加し、MLflow関連ファイルをGit管理から除外

mlflow/
mlruns/
artifacts/

まとめ

MLflowを追加することで、以下のような利点が得られます:

  • 実験結果の可視化と比較が容易に

  • モデルのバージョン管理が可能に

  • パラメータとメトリクスの追跡が簡単に

前回の環境に比べ、より本格的な機械学習開発が可能になりました。

この記事が気に入ったらサポートをしてみませんか?