次の方法で共有


メトリックおよびログ ファイルの記録および表示 (v1)

適用対象:Azure Machine Learning SDK v1 for Python

重要

この記事では、Azure Machine Learning SDK v1 の使用に関する情報を提供します。 SDK v1 は 2025 年 3 月 31 日の時点で非推奨となり、サポートは 2026 年 6 月 30 日に終了します。 SDK v1 は、その日付までインストールして使用できます。

2026 年 6 月 30 日より前に SDK v2 に移行することをお勧めします。 SDK v2 の詳細については、「 Azure Machine Learning Python SDK v2SDK v2 リファレンスとは」を参照してください。

既定の Python ログ パッケージと Azure Machine Learning Python SDK 固有の機能の両方を使用してリアルタイムの情報をログに記録します。 ユーザーは、ローカル環境でログし、ポータルでワークスペースにログを送信できます。

ログは、エラーや警告を診断したり、パラメーターやモデルのパフォーマンスなどのパフォーマンス メトリックを追跡したりするのに役立ちます。 この記事では、次のシナリオでログを有効にする方法について説明します。

  • 実行メトリックのログ記録
  • 対話型のトレーニング セッション
  • ScriptRunConfig を使用したトレーニング ジョブの送信
  • Python ネイティブの logging 設定
  • その他のソースからのログ

ヒント

この記事では、モデルのトレーニング プロセスを監視する方法について説明します。 Azure Machine Learning からリソース使用状況やイベント (クォータ、トレーニング実行の完了、モデル デプロイの完了など) を監視することに関心がある場合は、「Azure Machine Learning の監視」を参照してください。

データ型

複数のデータ型 (スカラー値、リスト、テーブル、イメージ、ディレクトリなど) をログに記録できます。 さまざまなデータ型の詳細と Python コードの例については、Run クラスのリファレンス ページをご覧ください。

実行メトリックのログ

メトリックの視覚化に影響を与えるには、ログ API の次のメソッドを使います。 これらのログに記録されたメトリックのサービスの制限に注意してください。

ログされる値 コード例 ポータルでの形式
数値の配列をログする run.log_list(name='Fibonacci', value=[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]) 単一変数の折れ線グラフ
同じメトリック名が繰り返し使われる単一の数値をログする (for ループ内からの場合など) for i in tqdm(range(-10, 10)): run.log(name='Sigmoid', value=1 / (1 + np.exp(-i))) angle = i / 2.0 単一変数の折れ線グラフ
2 つの数値列が繰り返される 1 つの行をログする run.log_row(name='Cosine Wave', angle=angle, cos=np.cos(angle)) sines['angle'].append(angle) sines['sine'].append(np.sin(angle)) 変数が 2 つの折れ線グラフ
2 つの数値列を含むテーブルをログする run.log_table(name='Sine Wave', value=sines) 変数が 2 つの折れ線グラフ
イメージをログに記録します run.log_image(name='food', path='./breadpudding.jpg', plot=None, description='desert') このメソッドを使用してイメージ ファイルをログに記録するか、matplotlib を使用して実行にプロットします。 これらのイメージは実行レコードで表示して比較できます

MLflow を使用したログ

モデル、メトリック、および成果物のログ記録には、ローカル モードからクラウドへの移植性をサポートしているオープン ソースの MLflow の使用をお勧めします。 次の表とコード例では、MLflow を使ってトレーニングの実行からメトリックと成果物をログする方法を示します。 MLflow のログ記録方法と設計パターンの詳細を確認してください

pip パッケージ mlflowazureml-mlflow をワークスペースにインストールしてください。

pip install mlflow
pip install azureml-mlflow

MLflow トラッキング URI が Azure Machine Learning バックエンドを指すように設定して、メトリックと成果物がワークスペースに記録されるようにします。

from azureml.core import Workspace
import mlflow
from mlflow.tracking import MlflowClient

ws = Workspace.from_config()
mlflow.set_tracking_uri(ws.get_mlflow_tracking_uri())

mlflow.create_experiment("mlflow-experiment")
mlflow.set_experiment("mlflow-experiment")
mlflow_run = mlflow.start_run()
ログされる値 コード例
数値 (int または float) をログに記録する mlflow.log_metric('my_metric', 1)
ブール値をログに記録する mlflow.log_metric('my_metric', 0) 0 = True、1 = False
文字列をログに記録する mlflow.log_text('foo', 'my_string') 成果物としてログに記録されます
numpy メトリックまたは PIL 画像オブジェクトをログに記録する mlflow.log_image(img, 'figure.png')
matlotlib プロットまたは画像ファイルをログに記録する mlflow.log_figure(fig, "figure.png")

SDK を使用して実行メトリックを表示する

run.get_metrics() を使用して、トレーニング済みモデルのメトリックを表示できます。

from azureml.core import Run
run = Run.get_context()
run.log('metric-name', metric_value)

metrics = run.get_metrics()
# metrics is of type Dict[str, List[float]] mapping metric names
# to a list of the values for that metric in the given run.

metrics.get('metric-name')
# list of metrics in the order they were recorded

MLflow では、実行オブジェクトのデータと情報のプロパティを介して実行情報にアクセスすることもできます。 詳細については、MLflow.entities.Run オブジェクトのドキュメントを参照してください。

実行が完了したら、MlFlowClient() を使用してこれを取得できます。

from mlflow.tracking import MlflowClient

# Use MlFlow to retrieve the run that was just completed
client = MlflowClient()
finished_mlflow_run = MlflowClient().get_run(mlflow_run.info.run_id)

実行オブジェクトのデータ フィールドで、実行のメトリック、パラメーター、タグを表示できます。

metrics = finished_mlflow_run.data.metrics
tags = finished_mlflow_run.data.tags
params = finished_mlflow_run.data.params

mlflow.entities.Run.data.metrics の下のメトリック ディクショナリは、指定されたメトリック名に対して最後にログされた値のみを返します。 たとえば、sample_metric という名前のメトリックに対して 1、2、3、4 の順にログされた場合、sample_metric のメトリック ディクショナリに含まれるのは 4 のみです。

特定のメトリック名に対してログされたすべてのメトリックを取得するには、MlFlowClient.get_metric_history() を使用できます。

スタジオの UI で実行メトリックを表示する

ログされたメトリックを含む、完了した実行レコードを、Azure Machine Learning スタジオで参照できます。

[実験] タブに移動します。複数の実験についてワークスペース内のすべての実行を表示するには、[すべての実行] タブを選びます。上部のメニュー バーで実験フィルターを適用して、特定の実験の実行にドリルダウンできます。

個々の実験ビューで、[すべての実験] タブを選びます。実験実行ダッシュボードでは、実行ごとに追跡されたメトリックとログを確認できます。

また、実行一覧テーブルを編集して、複数の実行を選択し、特定の実行に関してログされた直近の値や、最小値、最大値を表示できます。 グラフをカスタマイズして、ログされたメトリックの値と集計を複数の実行について比較します。 グラフの y 軸に複数のメトリックをプロットし、x 軸をカスタマイズしてログ記録されたメトリックをプロットすることができます。

実行のログ ファイルを表示およびダウンロードする

ログ ファイルは、Azure Machine Learning ワークロードをデバッグするための必須リソースです。 トレーニング ジョブを送信した後、特定の実行にドリルダウンしてそのログと出力を表示します。

  1. [実験] タブに移動します。
  2. 特定の実行の runID を選択します。
  3. ページの上部にある [出力とログ] を選びます。
  4. [すべてダウンロード] を選んで、すべてのログを zip フォルダーにダウンロードします。
  5. ログ ファイルを選んでから [ダウンロード] を選んで、個々のログ ファイルをダウンロードすることもできます。

実行の [出力とログ] セクションのスクリーンショット。

user_logs フォルダー

このフォルダーには、ユーザーが生成したログに関する情報が格納されます。 このフォルダーは既定で開いており、std_log.txt ログが選択されています。 std_log.txt には、コードのログ (print ステートメントなど) が表示されます。 このファイルには、プロセスごとに 1 つ、コントロール スクリプトとトレーニング スクリプトからの stdout ログと stderr ログが格納されます。 ほとんどの場合は、ここでログを監視します。

system_logs フォルダー

このフォルダーは、Azure Machine Learning によって生成されたログを格納しており、既定では閉じられます。 システムによって生成されたログは、実行時のジョブのステージに基づいて、別々のフォルダーにグループ化されます。

その他のフォルダー

マルチコンピューティング クラスターでのジョブのトレーニングでは、ノード IP ごとにログが存在します。 各ノードの構造は、単一ノードのジョブと同じです。 execution ログ、stderr ログ、stdout ログ全般に対して 1 つのログ フォルダーが追加されています。

Azure Machine Learning では、AutoML やトレーニング ジョブを実行する Docker コンテナーなど、トレーニング中にさまざまなソースからの情報がログに記録されます。 これらのログの多くについては、ドキュメントに記載されていません。 問題が発生し、Microsoft サポートに問い合わせた場合、トラブルシューティングの際にこれらのログを使用できる可能性があります。

対話型のログ セッション

対話型のログ セッションは、通常、ノートブック環境で使用されます。 メソッド Experiment.start_logging() を使用すると、対話型のログ セッションが開始されます。 セッション中にログに記録されるすべてのメトリックは、実験の実行レコードに追加されます。 run.complete() メソッドは、セッションを終了し、実行を完了としてマークします。

ScriptRun ログ

このセクションでは、ScriptRunConfig を使用して構成したときに作成される実行の内部にログ記録のコードを追加する方法について説明します。 ScriptRunConfig クラスを使用して、反復可能な実行のためにスクリプトと環境をカプセル化できます。 このオプションを使用して、監視用の視覚的な Jupyter Notebook ウィジェットを表示することもできます。

この例では、アルファ値に対してパラメーター スイープを実行し、run.log() メソッドを使用して結果をキャプチャします。

  1. ログ ロジック train.py を含むトレーニング スクリプトを作成します。

    # Copyright (c) Microsoft. All rights reserved.
    # Licensed under the MIT license.
    
    from sklearn.datasets import load_diabetes
    from sklearn.linear_model import Ridge
    from sklearn.metrics import mean_squared_error
    from sklearn.model_selection import train_test_split
    from azureml.core.run import Run
    import os
    import numpy as np
    import mylib
    # sklearn.externals.joblib is removed in 0.23
    try:
        from sklearn.externals import joblib
    except ImportError:
        import joblib
    
    os.makedirs('./outputs', exist_ok=True)
    
    X, y = load_diabetes(return_X_y=True)
    
    run = Run.get_context()
    
    X_train, X_test, y_train, y_test = train_test_split(X, y,
                                                        test_size=0.2,
                                                        random_state=0)
    data = {"train": {"X": X_train, "y": y_train},
            "test": {"X": X_test, "y": y_test}}
    
    # list of numbers from 0.0 to 1.0 with a 0.05 interval
    alphas = mylib.get_alphas()
    
    for alpha in alphas:
        # Use Ridge algorithm to create a regression model
        reg = Ridge(alpha=alpha)
        reg.fit(data["train"]["X"], data["train"]["y"])
    
        preds = reg.predict(data["test"]["X"])
        mse = mean_squared_error(preds, data["test"]["y"])
        run.log('alpha', alpha)
        run.log('mse', mse)
    
        model_file_name = 'ridge_{0:.2f}.pkl'.format(alpha)
        # save model in the outputs folder so it automatically get uploaded
        with open(model_file_name, "wb") as file:
            joblib.dump(value=reg, filename=os.path.join('./outputs/',
                                                         model_file_name))
    
        print('alpha is {0:.2f}, and mse is {1:0.2f}'.format(alpha, mse))
    
  2. train.py スクリプトを送信して、ユーザーが管理する環境内で実行します。 スクリプト フォルダー全体がトレーニング用に送信されます。

    from azureml.core import ScriptRunConfig
    
    src = ScriptRunConfig(source_directory='./scripts', script='train.py', environment=user_managed_env)
    run = exp.submit(src)

    show_output パラメーターを使用すると詳細ログが有効になり、これによってトレーニング プロセスからの詳細情報と、リモート リソースまたはコンピューティング先に関する情報を見ることができます。 次のコードを使用して、実験を送信するときに詳細ログ記録を有効にします。

    run = exp.submit(src, show_output=True)
    

    結果の実行の wait_for_completion 関数で同じパラメーターを使うこともできます。

    run.wait_for_completion(show_output=True)
    

Python のネイティブ ログ

SDK の一部のログには、ログ レベルを DEBUG に設定するよう指示するエラーが含まれる場合があります。 ログ レベルを設定するには、スクリプトに次のコードを追加します。

import logging
logging.basicConfig(level=logging.DEBUG)

他のログ記録ソース

Azure Machine Learning では、トレーニング中に、自動機械学習の実行や、ジョブを実行する Docker コンテナーなど、他のソースからの情報をログすることもできます。 これらのログは文書化されていませんが、問題が発生して Microsoft サポートに問い合わせた場合、トラブルシューティングの際にこれらのログを使用できる可能性があります。

Azure Machine Learning デザイナーにおけるメトリックのログ記録の詳細については、デザイナーでメトリックをログに記録する方法に関する記事を参照してください

ノートブックの例

次のノートブックは、この記事の概念を示しています。

ノートブックの実行方法については、Jupyter Notebook を使用したこのサービスの探索に関する記事をご覧ください。

次のステップ

Azure Machine Learning の使用方法について詳しくは、以下の記事をご覧ください。