Cloudera AI の Experiment とは
Cloudera AI ワークベンチ には Experiment という機能があります。
Experiment は、MLflow による試行の結果を自動的に統一的なファイルシステム上に保管し、UIにより管理・アクセスできるようにする仕組みです。
この記事では、そんな Experiment の機能でできることの紹介と、使い方について解説します。
※「MLflow ってなんですか?」という人よりは、MLflow にある程度習熟していて、 run などの結果をもっと統一的に管理したい! というニーズを抱えている人向けの機能なので、この記事では MLflow については特に解説しません。
Experiment 機能でできること
Experiment は、MLflow を普通に使う感覚で Cloudera AI ワークベンチのノートブック上のコードを実行すると、その内容を自動的に拾ってくれて統合管理できる仕組みです。
Experiment機能では、MLflow の run の結果を以下のように、GUIで表示することができます。
run の詳細画面では、各種のメトリクスやパラメータを表示するとともに・・・
その run で利用したファイルを参照することもできます。
Experiment 機能の使い方
前述のとおり、Experiment は、 Cloudera AI ワークベンチのノートブックで実行された MLflow の結果を自動的に拾ってくれて統合管理できる仕組みです。
MLflow のどのコードを実行することで、 Experiment 上でどのように見えるのかを解説します。
まずは各コードの役割を説明した上で、最後に全体を統合したコードサンプルを掲載します。
mlflow のインポート
Cloudera AI 上でコードを実行する際も、mlflow のインポートは必要になるのでインポートします。
import mlflow
Experiment を指定する - set_experiment("Experiment名")
set_experiment("Experiment名") で、以後の run をその名前のExperiment 配下で実行するように指定します。
mlflow.set_experiment("Experiment名")
指定した名前の Experiment が存在しない場合は、初回実行時に作成します。
Experiment を指定しない場合、run は default の Experiment に入ります。
パラメータを記録する - log_param("パラメータ名", 値)
log_param("パラメータ名", 値) で、該当する値を指定したパラメータ名で記録します。
mlflow.log_param("パラメータ名", 値)
※実際のコードでは、値の部分は run の中で変数化されていることが多いと思います。Experiment 機能が実行時点の変数の中身を拾い、記録していきます。
メトリクスを記録する - log_metric("メトリクス名", 値)
log_metric("メトリクス名", 値) で、該当する値を指定したパラメータ名で記録します。
mlflow.log_metric("メトリクス名", 値)
※実際のコードでは、値の部分は run の中で変数化されているかと思います。Experiment 機能が実行時点の変数の中身を拾い、記録していきます。
モデルを保管する - sklearn.log_model(モデル, "モデル名")
sklearn.log_model(モデル, "モデル名") を実行することで、モデルが run のアーティファクトとして自動的に管理されます。
mlflow.sklearn.log_model(モデル, "モデル名")
モデル以外の関連ファイルを記録する - log_artifact(ファイル)
log_artifact(ファイル) を実行することで、任意のファイルを run のアーティファクトとして管理することができます。
mlflow.log_artifact(ファイル)
フルコードサンプル
上記で解説したコードを、一連の流れの中で実行するサンプルコードです。
Cloudera ワークベンチのノートブックに以下のコードをコピーし実行することで、以下の結果を得られます。(箇条書きの○内数字はコード内のコメントに対応)
- ① iris-classification-demo という名前の Experiment を作る
- ② パラメータ(n_estimators, max_depth, random_state)を記録する
- ③ メトリクス(accuracy, precision, recall)を記録する
- ④ プロット結果の画像ファイルをアーティファクトとして保管する
- ⑤ メタデータのレポートを格納した json ファイルをアーティファクトとして保管する
- ⑥ モデルを保管する
import mlflow
import mlflow.sklearn
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import json
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, precision_score, recall_score, confusion_matrix
# ---------------------------------------------------------
# 1. データセット(Iris)の準備
# ---------------------------------------------------------
iris = load_iris()
X = pd.DataFrame(iris.data, columns=iris.feature_names)
y = iris.target
# データを訓練用とテスト用に分割 (これで y_test も定義されます)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
# ---------------------------------------------------------
# 2. MLflow Experiment の設定(①)
# ---------------------------------------------------------
mlflow.set_experiment("iris-classification-demo")
# ---------------------------------------------------------
# 3. 実験(Run)の実行関数
# ---------------------------------------------------------
def run_iris_experiment(n_estimators: int, max_depth: int, run_name: str):
with mlflow.start_run(run_name=run_name):
# --- (A) パラメータの記録 --- (②)
mlflow.log_param("n_estimators", n_estimators)
mlflow.log_param("max_depth", max_depth)
mlflow.log_param("random_state", 42)
# --- (B) モデルの訓練と予測 ---
model = RandomForestClassifier(
n_estimators=n_estimators,
max_depth=max_depth,
random_state=42
)
model.fit(X_train, y_train)
predictions = model.predict(X_test)
# --- (C) メトリクスの記録 --- (③)
acc = accuracy_score(y_test, predictions)
prec = precision_score(y_test, predictions, average="macro")
rec = recall_score(y_test, predictions, average="macro")
mlflow.log_metric("accuracy", acc)
mlflow.log_metric("precision", prec)
mlflow.log_metric("recall", rec)
# ---------------------------------------------------------
# ★ (D) Artifacts への保存処理
# ---------------------------------------------------------
# 1. 画像ファイル (混同行列のヒートマップ)
cm = confusion_matrix(y_test, predictions)
plt.figure(figsize=(6, 4))
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues',
xticklabels=iris.target_names, yticklabels=iris.target_names)
plt.title(f'Confusion Matrix ({run_name})')
plt.xlabel('Predicted')
plt.ylabel('Actual')
plt.tight_layout()
plot_filename = "confusion_matrix.png"
plt.savefig(plot_filename)
plt.close() # メモリ解放
# MLflow Artifact にアップロード(④)
mlflow.log_artifact(plot_filename)
# 2. メタデータ/レポートファイル (JSON)
extra_info = {
"dataset": "Iris Dataset",
"train_samples": len(X_train),
"test_samples": len(X_test),
"features": list(X.columns)
}
json_filename = "data_info.json"
with open(json_filename, "w") as f:
json.dump(extra_info, f, indent=4)
# MLflow Artifact にアップロード(⑤)
mlflow.log_artifact(json_filename)
# 3. 学習済みモデル本体の保存 (⑥)
mlflow.sklearn.log_model(model, "random_forest_model")
print(f"[{run_name}] 完了 - Accuracy: {acc:.4f} (Artifacts も保存されました)")
# ---------------------------------------------------------
# 4. 実験の実行
# ---------------------------------------------------------
run_iris_experiment(n_estimators=10, max_depth=2, run_name="run_small_tree")
run_iris_experiment(n_estimators=100, max_depth=10, run_name="run_large_tree")
以上!
いかがでしたか?
上記を参考に、ぜひ Cloudera AI ベンチの便利機能 Experiment を使いこなしてください✨










