Databricksクイックスタートガイドのコンテンツです。
Track machine learning training runs | Databricks on AWS [2021/4/5時点]の翻訳です。
MLflowのトラッキングコンポーネントによって、機械学習モデルのトレーニングに関係するソース情報、パラメーター、メトリクス、タグ、アーティファクトを記録することができます。MLflowを使い始める際には、PythonによるDatabricks MLflowクイックスタートガイド、あるいは、MLflow quickstart tutorials(英語)を試してみてください。
MLflowのトラッキングにおいて理解すべき二つの概念があります。エクスペリメント(experiment)とラン(run)です:
- MLflowエクスペリメントは、MLflowランに対するアクセス制御、管理の基本単位となります。全てのMLflowランはエクスペリメントに属します。エクスペリメントによって、ランを可視化したり、検索することができます。また、他のツールで分析するためにアーティファクトやメタデータをダウンロードすることができます。
- MLflowランは一回のモデルコードの実行に対応づけられます。それぞれのランは以下の情報を記録します:
- ソース(Source): ランを起動したノートブック名、あるいはプロジェクト名とランのエントリーポイント。
- バージョン(Version): ノートブックから実行した場合にはノートブックのバージョン、MLflow Project(英語)から実行した場合にはGitコミットのハッシュ値。
- 開始、終了時刻(Start & end time): ランの開始時刻、終了時刻。
- パラメーター(Parameters): キーバリュー形式で保存されるモデルのパラメーター。キー、バリューともに文字列となります。
- メトリクス(Metrics): キーバリュー形式で保存されるモデルの評価メトリクス。バリューは数値となります。ランの過程でそれぞれのメトリクスが更新(例:モデルの損失関数がどのように収束するかを追跡)され、MLflowはメトリクスの履歴を保持し、可視化することを可能とします。
- タグ(Tags): キーバリュー形式で保存されるランのメタデータ。ランの実行中、実行後にタグを更新することができます。キー、バリューともに文字列となります。
- アーティファクト(Artifacts): あらゆる形式の出力ファイル。例えば、画像、モデル(例:pickleされたscikit-learnモデル)、データファイル(例:Parquetファイル)がアーティファクトとして保存できます。
MLflow Tracking API(英語)を用いて、モデルのランからパラメーター、メトリクス、タグ、アーティファクトを記録します。トラッキングAPIは、MLflowのtracking server(英語)とやりとりをします。Databricksを使う際には、Databricksがホストするトラッキングサーバーがデータを記録します。ホストされるMLflowトラッキングサーバーは、Python、Java、RのAPIを提供します。
エクスペリメントのアクセス権管理に関しては、MLflow Experiment permissions(英語)を参照ください。
注意
MLflowはDatabricksランタイムMLクラスターにインストールされています。DatabricksランタイムクラスターでMLflowを使うには、`mlflow@ライブラリをインストールする必要があります。クラスターにライブラリをインストールするには、Install a library on a cluster(英語)を参照ください。MLflowをインストールするのに必要なパッケージは以下の通りです:
- Pythonの場合は、Library SourceでPyPIを選択し、Packageフィールドに
mlflow
と入力します。 - Rの場合は、Library SourceでCRANを選択し、Packageフィールドに
mlflow
と入力します。 - Scalaの場合は、以下の二つのパッケージをインストールします:
-
Library SourceでCoordinatesを選択し、Packageフィールドに
org.mlflow:mlflow-client:1.11.0
と入力します。 -
Library SourceでPyPIを選択し、Packageフィールドに
mlflow
と入力します。
-
Library SourceでCoordinatesを選択し、Packageフィールドに
MLflowランの記録の格納場所
MLflowランは、以下の方法で設定されるアクティブなエクスペリメントに記録されます。
- mlflow.set_experiment()コマンド(英語)を使う。
-
mlflow.start_run()コマンド(英語)の
experiment_id
パラメーターで指定する。 - MLflowの環境変数のMLFLOW_EXPERIMENT_NAME か MLFLOW_EXPERIMENT_ID(英語)に設定する。
アクティブなエクスペリメントが設定されていない場合、ランはノートブックのエクスペリメントに記録されます。
エクスペリメント
エクスペリメントには2種類あります。ワークスペースエクスペリメントとノートブックエクスペリメントです。
- MLflow APIかワークスペースUIからワークスペースエクスペリメントを作成できます。ワークスペースエクスペリメントはノートブックに紐付けられておらず、いかなるノートブックでもエクスペリメントIDかエクスペリメント名を指定することでランをこれらのエクスペリメントに記録することができます。
- ノートブックエクスペリメントは特定のノートブックに紐付けられています。mlflow.start_run()を実行した際にアクティブなエクスペリメントが存在しない場合には、Databricksは自動でノートブックエクスペリメントを作成します。
エクスペリメントのアクセス権管理に関しては、MLflow Experiment permissions(英語)を参照ください。
エクスペリメント名の取得
エクスペリメント名をコピーするには、エクスペリメントページの上にあるアイコンをクリックします。アクティブなMLflowエクスペリメントを設定するために、MLflowのset_experiment
コマンドを用いる際にエクスペリメント名を使用できます。
ワークスペースエクスペリメント
ここでは、Databricks UIを用いたワークスペースエクスペリメントの作成方法を説明します。MLflow APIを用いて作成することもできます。
ワークスペースエクスペリメントにランを記録する方法については、Log runs to a notebook or workspace experiment(英語)を参照ください。
ワークスペースエクスペリメントの作成
- サイドバーのWorkspaceボタンあるいはHomeボタンをクリックします。
- エクスペリメントを作成したいフォルダーに移動します。
- 以下を実行します。
- Create MLflow Experimentダイアログで、エクスペリメントの名前と任意でアーティファクトの格納場所を指定します。
- アーティファクトの格納場所を指定しない場合、アーティファクトは
dbfs:/databricks/mlflow-tracking/<experiment-id>
に格納されます。 - アーティファクトの格納場所にはDBFS、S3、Azure Blog storageを指定することができます。
- S3にアーティファクトを保存する場合には、
s3://<bucket>/<path>
の形式でURIを指定します。MLflowはS3にアクセスするために、クラスターのインスタンスプロファイルを使用します。S3に格納されたアーティファクトは、MLflowのUIでは参照できません。オブジェクトストレージのクライアントを使用してダウンロードする必要があります。 - Azure Blob storageにアーティファクトを保存する場合には、
wasbs://<container>@<storage-account>.blob.core.windows.net/<path>
の形式でURIを指定します。Azure Blob storageに格納されたアーティファクトは、MLflowのUIでは参照できません。Blobストレージのクライアントを使用してダウンロードする必要があります。
- アーティファクトの格納場所を指定しない場合、アーティファクトは
- Createをクリックすることで、空のエクスペリメントが表示されます。
ワークスペースエクスペリメントの参照
ワークスペースエクスペリメントの削除
- サイドバーのWorkspaceボタンあるいはHomeボタンをクリックします。
- エクスペリメントを格納したフォルダーに移動します。
- エクスペリメント名を右にあるクリックし、Move to Trashを選択します。
ノートブックエクスペリメント
ノートブック上でmlflow.start_run()コマンドを実行した場合、ランはアクティブなエクスペリメントにメトリクスやパラメーターを記録します。アクティブなエクスペリメントが存在しない場合、Databricksはノートブックエクスペリメントを作成します。ノートブックエクスペリメントは対応するノートブックと同じ名前とIDを持ちます。ノートブックのURL(英語)の最後にある数字のIDがノートブックIDです。
ノートブックエクスペリメントにランを記録する方法については、Log runs to a notebook or workspace experimentを参照ください。
注意
API(例:PythonにおけるMlflowClient.tracking.delete_experiment()
)を用いてノートブックエクスペリメントを削除した場合、ノートブック自身もTrashフォルダーに移動されます。
ノートブックエクスペリメントの参照
ノートブックエクスペリメントと関連づけられたランを参照するには、ノートブックツールバーのExperimentアイコンをクリックします。
Experiment Runsのサイドバーが表示され、ランのパラメーター、メトリクスが表示されます。
エクスペリメントを表示するには、一番右のアイコンをクリックします。エクスペリメントページが表示されます。
ランを表示するには、エクスペリメント一覧のStart Timeをクリックします。Experiment Runsのサイドバーで、ランの日時の隣にあるをクリックすることで、直接ランにアクセスすることができます。
ランを生成したバージョンのノートブックを表示するには以下のいずれかを実施します。
ノートブックエクスペリメントの削除
ノートブックエクスペリメントはノートブックの一部であり削除することはできません。ノートブックを削除した際には、ノートブックエクスペリメントは削除されます。API(例:PythonにおけるMlflowClient.tracking.delete_experiment()
)を用いてノートブックエクスペリメントを削除した場合には、ノートブックも削除されます。
ラン
全てのMLflowランは、アクティブなエクスペリメントに記録されます。明示的にアクティブなエクスペリメントを指定していない場合には、ノートブックエクスペリメントに記録されます。
ランをノートブックエクスペリメント、ワークスペースエクスペリメントに記録する
以下のノートブックはどのようにしてノートブックエクスペリメント、ワークスペースエクスペリメントにランを記録するのかを説明しています。ノートブックの中で初期化されたMLflowランのみがノートブックエクスペリメントに記録されます。他のノートブックで起動されたMLflowランや、APIで起動されたランはワークスペースエクスペリメントに記録されます。記録されたログを参照する方法については、ノートブックエクスペリメントの参照、ワークスペースエクスペリメントの参照を参照してください。
エクスペリメント内のランの参照、管理
エクスペリメント内で、格納されているランに対して様々な操作を行うことができます。
ランのフィルタリング
パラメーターやメトリクスに基づいてランを検索することができます。あるパラメーターやメトリクスを持つランを検索するには、検索フィールドにクエリーを入力してSearchをクリックします。以下がクエリーの例です:
metrics.r2 > 0.3
params.elasticNetParam = 0.5
params.elasticNetParam = 0.5 AND metrics.avg_areaUnderROC > 0.3
ランの状態(アクティブ、削除済み)、ランにモデルバージョンが関連づけられているかどうかに基づいて検索を行うことも可能です。このためには、検索ボックスの右にあるFilterをクリックします。State、Linked Modelsドロップダウンメニューが表示されますので、条件を選択します。
ランのダウンロード
- 一つ以上のランを選択します。
- Download CSVをクリックします。以下のフィールドを含むCSVファイルがダウンロードされます。
Run ID,Name,Source Type,Source Name,User,Status,<parameter1>,<parameter2>,...,<metric1>,<metric2>,...
ランの詳細表示
ランの日付リンクをクリックします。ラン詳細画面が表示されます。画面には乱で用いられたパラメーター、ランの結果得られたメトリクス、タグ、メモが表示されます。また、ランで記録されたアーティファクトにもアクセスできます。
ランに対応するノートブック、Gitプロジェクトを参照するには:
- ランがDatabricksノートブック、ジョブで実行された場合には、Sourceフィールドをクリックし、ランで使われたノートブックバージョンを開きます。
- ランがリモートのGitプロジェクト(英語)から起動された場合には、Git Commitフィールドのリンクをクリックし、ランで用いられた特定バージョンのプロジェクトを表示します。Sourceフィールドのリンクは、ランで使われたGitプロジェクトのメインブランチを開きます。
ランでモデルを記録した場合には、ページ上のArtifactセクションにモデルが表示されます。Sparkデータフレーム、pandasデータフレームを用いて予測を行うために、どのようにモデルをロードして使うのかを説明するスニペットを表示させたい場合には、モデル名をクリックします。
ランの比較
- エクスペリメントで、ランの左にあるチェックボックスで二つ以上のランを選択します。
- Compareをクリックします。選択したランを比較する画面が表示されます。
- 以下のいずれかを実行します。
ランの削除
- エクスペリメントで、ランの左にあるチェックボックスを選択します。
- Deleteをクリックします。
- 親子関係のあるランにおいて、選択したランが親である場合、子のランも削除するのかを選択します。削除するオプションはデフォルトでオンになっています。
- Deleteをクリックして削除するか、Cancelをクリックしてキャンセルします。削除したランは30日間保持されます。削除されたランを表示するには、StateフィールドでDeletedを選択します。
Databricks外からMLflowトラッキングサーバーへのアクセス
MLflow CLIを使うなどして、Databricks外からトラッキングサーバーに対して読み書きを行うことができます。
データフレームを用いたMLflowランの分析
以下の二つのデータフレームAPIを用いてMLflowランデータにプログラムからアクセスすることができます。
- pandasデータフレームを返却するMLflow Pythonクライアントのsearch_runs API
- Apache Sparkデータフレームを返却するMLflow experiment(英語)データソース
以下のサインプルノートブックでは、MLflow Pythonクライアントを用いて、過去の評価メトリクス、特定ユーザーによって実行されたランの数、全ユーザーにおけるランの総数を計測してダッシュボードで可視化しています。
サンプルノートブック
以下のノートブックにおいては、いくつかの種類のモデルをトレーニングし、MLflowでトレーニングデータを追跡、Delta Lakeに追跡データを格納する流れを説明しています。
- Train a scikit-learn model and save in scikit-learn format(英語)
- Train a PyTorch model(英語)
- Train a PySpark model and save in MLeap format(英語)
- Track ML Model training data with Delta Lake(英語)