0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Apple M5 MaxでMLflow公式Quickstartを実践する

0
Posted at

はじめに

この記事では、Apple Silicon M5 Max を搭載したMac上で、MLflow公式の MLflow Tracking Quickstart を最初から順番に実行します。

対象となる公式チュートリアルはこちらです。

公式チュートリアルでは pip を使っていますが、uvに変更しています。


今回のゴール

最終的には、次の流れをM5 Max上で動かします。

MLflowを使うと、

  • どんなパラメータで学習したか
  • 精度はいくつだったか
  • どんなモデルが生成されたか
  • Pythonやライブラリの環境
  • いつ、誰が実験したか

といった情報を「実験」としてまとめて管理できるようになります。


動作環境

今回想定する環境です。

項目 環境
Machine Apple Silicon M5 Max
OS macOS
CPU Architecture arm64
Python 3.14.6
Python管理 uv
MLflow 3.x
Machine Learning scikit-learn
データ Iris Dataset
Tracking Store SQLite
ブラウザ Chrome / Safariなど

全体の手順

公式Quickstartとの対応は次のようになります。

この記事 MLflow公式
STEP 0 M5 Max + uv用の追加準備
STEP 1 Set up MLflow
STEP 2 Prepare training data
STEP 3 Train a model with MLflow Autologging
STEP 4 View the Run in the MLflow UI
STEP 5 Log a model and metadata manually
STEP 6 Load the model back for inference

STEP 1〜6については公式Quickstartと同じ順番です。


STEP 0: M5 Max + uv環境を準備する

ここだけはMLflow公式Quickstartにはない、この記事独自の準備です。

STEP 0-1: uvとpythonをインストールする

すでにインストールされていたら無視してください。

Terminal
curl -LsSf https://astral.sh/uv/install.sh | sh

uv --version

uv python install 3.14.6

uv python list 3.14


STEP 0-2: MLflow用プロジェクトを作る

プロジェクトを作成します。

Terminal
uv init --no-package mlflow-quickstart

cd mlflow-quickstart

uv python pin 3.14.6

STEP 0-3: 必要なパッケージをインストール

MLflow、pandas、scikit-learn、JupyterLabを追加します。

Terminal
uv add mlflow pandas scikit-learn jupyterlab ipykernel

uv sync

動作確認

Terminal
uv run python -c "import platform; print(platform.machine())"

結果:

arm64

MLflowを確認します。

Terminal
uv run mlflow --version

結果:

mlflow, version 3.15.1

scikit-learnも確認します。

Terminal
uv run python -c "import sklearn; print(sklearn.__version__)"

結果:

1.9.0

この時点の構成


STEP 1: Set up MLflow

ここから公式Quickstartに入ります。

公式Quickstartの最初のステップはMLflowのセットアップです。

今回はローカルMacなので、MLflow公式のセットアップガイドでQuickstart/Local Development向けとして推奨されている SQLite をTracking Storeに使用します。


JupyterLabを起動

Terminal
uv run jupyter lab

ブラウザでJupyterLabが開きます。
スクリーンショット 2026-08-13 2.06.37.png
新しいNotebookを作成してください。

ファイル名は例えば、

mlflow_quickstart.ipynb

とします。


Tracking URIを設定

最初のセルです。

mlflow_quickstart.ipynb
import mlflow

mlflow.set_tracking_uri("sqlite:///mlflow.db")

mlflow.set_experiment("MLflow Quickstart")

実行します。

この時点では概念的に、

という状態になります。

確認してみます。

mlflow_quickstart.ipynb
print("Tracking URI:", mlflow.get_tracking_uri())

想定結果:

Tracking URI: sqlite:///mlflow.db

STEP 2: Prepare training data

次は機械学習に使用するデータを準備します。

公式Quickstartでは有名な Iris Dataset を使用しています。

次のセルを実行します。

mlflow_quickstart.ipynb
import pandas as pd

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score

# Load the Iris dataset
X, y = datasets.load_iris(return_X_y=True)

# Split the data into training and test sets
X_train, X_test, y_train, y_test = train_test_split(
    X,
    y,
    test_size=0.2,
    random_state=42,
)

# Define the model hyperparameters
params = {
    "solver": "lbfgs",
    "max_iter": 1000,
    "random_state": 8888,
}

ここまでの処理は、

という流れです。

データ数を確認してみます。

mlflow_quickstart.ipynb
print("X_train:", X_train.shape)
print("X_test :", X_test.shape)

スクリーンショット 2026-08-13 2.12.02.png


STEP 3: Train a model with MLflow Autologging

ここがMLflowの面白いところです。

通常、実験情報を保存するには、

mlflow.log_param(...)
mlflow.log_metric(...)
mlflow.log_model(...)

などを自分で書く必要があります。

しかしscikit-learnには Autologging が用意されています。

公式Quickstartでは次のコードを実行します。

mlflow_quickstart.ipynb
import mlflow

# Enable autologging for scikit-learn
mlflow.sklearn.autolog()

# Just train the model normally
lr = LogisticRegression(**params)

lr.fit(X_train, y_train)

ポイントはこの1行です。

mlflow.sklearn.autolog()

これだけでMLflowがモデル学習に関する情報を自動的に取得します。Autologgingではモデル、パラメータ、メトリクスなどを自動記録できます。

イメージすると、

となります。


STEP 4: View the Run in the MLflow UI

次は保存された実験をWeb UIから確認します。

JupyterLabはそのまま起動しておき、新しいTerminalを開きます。

プロジェクトディレクトリへ移動してください。

Terminal
cd mlflow-quickstart

SQLiteをBackend StoreとしてMLflow Serverを起動します。

Terminal
uv run mlflow server \
  --backend-store-uri sqlite:///mlflow.db \
  --port 5000

MLflow公式のローカルDB構成でも、SQLite使用時はこのようにBackend Storeを指定してUIを起動します。

ブラウザで、

http://localhost:5000

を開きます。

スクリーンショット 2026-08-13 2.15.44.png


MLflow Quickstartを開く

Experiment一覧から、

MLflow Quickstart

をクリックします。

左のメニューで「Model training」を選択すると
Autologgingによって作成されたRunが表示されます。

スクリーンショット 2026-08-13 2.20.07.png

さらに「Run Name」をクリックすると詳細な情報を確認できます。

スクリーンショット 2026-08-13 2.19.30.png


STEP 5: Log a model and metadata manually

ここまでは

mlflow.sklearn.autolog()

によって自動的に実験を記録しました。

次は公式Quickstartの通り、手動でログを記録します。

jupyternotebookに戻り、次のセルを追加します。

mlflow_quickstart.ipynb
# Start an MLflow run
with mlflow.start_run():

    # Log the hyperparameters
    mlflow.log_params(params)

    # Train the model
    lr = LogisticRegression(**params)

    lr.fit(X_train, y_train)

    # Log the model
    model_info = mlflow.sklearn.log_model(
        sk_model=lr,
        name="iris_model",
    )

    # Predict on the test set, compute and log the loss metric
    y_pred = lr.predict(X_test)

    accuracy = accuracy_score(y_test, y_pred)

    mlflow.log_metric("accuracy", accuracy)

    # Optional: Set a tag that we can use to remind ourselves
    # what this run was for
    mlflow.set_tag(
        "Training Info",
        "Basic LR model for iris data",
    )

スクリーンショット 2026-08-13 2.29.13.png
スクリーンショット 2026-08-13 2.31.31.png

今度はAutologgingに任せるのではなく、

mlflow.log_params()
mlflow.sklearn.log_model()
mlflow.log_metric()
mlflow.set_tag()

を明示的に呼び出しています。

図にすると、

となります。


UIでも確認する

MLflow UIに戻ります。

必要に応じてブラウザを更新してください。

新しいRunが追加されています。

スクリーンショット 2026-08-13 2.32.02.png

スクリーンショット 2026-08-13 2.32.42.png


STEP 6: Load the model back for inference

最後に、MLflowに保存したモデルをもう一度読み込みます。

これは非常に重要です。

MLflowは単に、

「学習結果をグラフで見るツール」

ではありません。

保存したモデルを再びロードして推論に利用できます。

公式Quickstartでは mlflow.pyfunc を使用します。

次のセルを実行します。

mlflow_quickstart.ipynb
# Load the model back for predictions as a generic Python Function model
loaded_model = mlflow.pyfunc.load_model(
    model_info.model_uri
)

predictions = loaded_model.predict(X_test)

iris_feature_names = datasets.load_iris().feature_names

result = pd.DataFrame(
    X_test,
    columns=iris_feature_names,
)

result["actual_class"] = y_test
result["predicted_class"] = predictions

result[:4]

Notebookに結果が表示されます。

スクリーンショット 2026-08-13 2.36.37.png

イメージすると、

となります。


完成したプロジェクト

最終的には、おおむね次のような構成になります。

mlflow-quickstart-m5max/
├── .python-version
├── .venv/
├── mlflow.db
├── mlflow_quickstart.ipynb
├── pyproject.toml
├── README.md
└── uv.lock

特に重要なのが、

.python-version
pyproject.toml
uv.lock

です。

これらを管理することで、どのPythonとどのライブラリを使ったのか再現しやすくなります。


初学者向け解説

ここからは、ここまで登場した技術について整理します。


MLflowとは何か

機械学習では、

モデルを作る

ことだけが仕事ではありません。

実際には何度も、

パラメータ変更
↓
学習
↓
評価
↓
パラメータ変更
↓
再学習

を繰り返します。

例えば、

実験1
max_iter = 100
accuracy = 0.92

実験2
max_iter = 500
accuracy = 0.95

実験3
max_iter = 1000
accuracy = 0.97

となった場合、

どの設定で0.97になったんだっけ?

という問題が発生します。

これを管理するのがMLflow Trackingです。


Experimentとは

Experimentは、

実験プロジェクト

のような箱です。

今回は、

mlflow.set_experiment("MLflow Quickstart")

としました。

したがって、

MLflow Quickstart

というExperimentの中に複数のRunが保存されます。


Runとは

Runは、

1回の実験

です。

例えば、

MLflow Quickstart
│
├── Run A
│   └── Autologging
│
└── Run B
    └── Manual Logging

となります。


Parameterとは

Parameterはモデルを作るための設定値です。

今回の場合、

params = {
    "solver": "lbfgs",
    "max_iter": 1000,
    "random_state": 8888,
}

が該当します。


Metricとは

Metricはモデルの性能を表す数値です。

今回は、

accuracy

を記録しました。

例えば、

accuracy = 0.9666

なら、

約96.7%

正しく分類できたという意味になります。


Artifactとは

Artifactは実験で生成されたファイルです。

例えば、

モデル
設定ファイル
依存パッケージ情報

などです。

MLflowは単に数値だけではなく、モデルそのものも実験結果として管理できます。


Autologgingとは

今回特に重要なのが、

mlflow.sklearn.autolog()

です。

通常なら、

パラメータを保存
メトリクスを保存
モデルを保存

という処理をそれぞれ実装しなければなりません。

Autologgingなら、

となります。

そのため、既存の機械学習コードにMLflowを導入する際にも非常に便利です。


pyfuncとは

最後に使用した、

mlflow.pyfunc.load_model()

pyfunc は、

Python Function

というMLflow共通のモデルインターフェースです。

scikit-learnだけではなく、

scikit-learn
PyTorch
TensorFlow
XGBoost
独自Python Model

などをMLflow上で扱うとき、共通の操作方法を提供する役割があります。


uvを使う理由

Pythonプロジェクトでは、

Python本体
仮想環境
依存パッケージ
バージョン固定

を管理する必要があります。

uvでは、

のようにまとめて扱えます。

今回のようなML/AI環境では、Pythonとライブラリの組み合わせが再現できることは非常に重要です。


M5 Maxを使う意味

今回のQuickstart自体は非常に小さなIris Datasetを扱うため、M5 Maxの性能を使い切る処理ではありません。

むしろ今回確認したかったのは、

Apple Silicon
        +
Python
        +
uv
        +
scikit-learn
        +
MLflow

というML開発環境をMac上だけで構築できることです。

今後、

MLflow Tracking
↓
Hyperparameter Tuning
↓
PyTorch
↓
Apple MPS
↓
Transformer
↓
LoRA

と進めていけば、M5 Maxをより活かしたモデル開発環境に発展させられます。


まとめ

今回、M5 Max上でMLflow公式Quickstartを順番通り実行しました。

実施したことは、

uv
 ↓
Python
 ↓
MLflow
 ↓
Iris Dataset
 ↓
LogisticRegression
 ↓
Autologging
 ↓
MLflow UI
 ↓
Manual Logging
 ↓
Model Load
 ↓
Inference

です。

特に重要なのは、

MLflowは「モデルを作るライブラリ」ではなく、「モデルを作る過程を管理する仕組み」である

という点です。

モデル開発では、

コード
データ
パラメータ
評価結果
モデル
実行環境

をセットで管理できなければ、「なぜそのモデルが良かったのか」を後から再現できません。

MLflow Trackingは、その実験履歴を管理するための第一歩になります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?