Share via


記錄和檢視計量與記錄檔第 1 版

適用於:Python SDK azureml v1

請使用預設的 Python 記錄套件和 Azure Machine Learning Python SDK 特有的功能來記錄即時資訊。 您可以登入本機,並將記錄傳送至入口網站中的工作區。

記錄可協助您診斷錯誤和警告,或追蹤參數和模型效能等效能計量。 在本文中,您將了解如何在下列案例中啟用記錄:

  • 記錄執行計量
  • 互動式定型工作階段
  • 使用 ScriptRunConfig 提交定型作業
  • Python 原生 logging 設定
  • 從其他來源記錄

提示

本文說明如何監視模型定型程序。 如果您想要從 Azure Machine Learning 監視資源使用量和事件 (例如配額、已完成的定型執行,或已完成的模型部署),請參閱監視 Azure Machine Learning (部分機器翻譯)。

資料類型

您可以記錄多個資料類型,包括純量值、清單、資料表、影像、目錄等等。 如需詳細資訊和不同資料類型的 Python 程式碼範例,請參閱回合類別參考頁面

記錄執行計量

在記錄 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 個數字資料行重複記錄資料列 run.log_row(name='Cosine Wave', angle=angle, cos=np.cos(angle)) sines['angle'].append(angle) sines['sine'].append(np.sin(angle)) 兩個變數的折線圖
使用 2 個數字資料行記錄資料表 run.log_table(name='Sine Wave', value=sines) 兩個變數的折線圖
記錄影像 run.log_image(name='food', path='./breadpudding.jpg', plot=None, description='desert') 使用此方法可將影像檔案或 matplotlib 繪圖記錄到執行內。 這些影像會顯示在執行記錄中,並可供比較

使用 MLflow 來記錄

建議您使用 MLflow 來記錄模型、計量和成品,因為其為開放原始碼,並支援本機模式到雲端的可攜性。 下列資料表和程式碼範例會說明如何使用 MLflow 來記錄定型執行的計量和成品。 深入了解 MLflow 的記錄方法和設計模式

請務必將 mlflowazureml-mlflow pip 套件安裝到您的工作區。

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()
記錄的值 程式碼範例 備註
記錄數字值 (整數或浮點數) 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 底下的計量字典只會傳回給定計量名稱最近記錄的值。 例如,如果您依序記錄 1、2、3、4 到稱為 sample_metric 的計量中,則 sample_metric 的計量字典中只會顯示 4。

若要取得針對特定計量名稱所記錄的所有計量,您可以使用 MlFlowClient.get_metric_history()

在工作室 UI 中檢視執行計量

您可以在 Azure Machine Learning 工作室中瀏覽已完成的執行記錄,包括所記錄的計量。

瀏覽至 [實驗] 索引標籤。若要在工作區中跨實驗檢視所有執行,請選取 [所有執行] 索引標籤。您可以在頂端功能表列中套用實驗篩選條件,以向下切入特定實驗的執行。

若要個別檢視實驗,請選取 [所有實驗] 索引標籤。您可以在實驗執行儀表板上查看每次執行的追蹤計量和記錄。

您也可以編輯執行清單資料表,以選取多個執行,並顯示執行的最新記錄值、最小記錄值或最大記錄值。 請自訂圖表以比較跨多個執行的記錄計量值和彙總。 您可以在圖表的 Y 軸上繪製多個計量,並自訂 X 軸來繪製所記錄的計量。

檢視和下載執行的記錄檔

記錄檔是對 Azure Machine Learning 工作負載進行偵錯時不可或缺的資源。 在提交定型作業後,請向下切入至特定執行以檢視其記錄和輸出:

  1. 瀏覽至 [實驗] 索引標籤。
  2. 選取特定執行的 runID。
  3. 選取頁面頂端的 [輸出和記錄]
  4. 選取 [全部下載],將所有記錄下載到 zip 資料夾。
  5. 您也可以選擇記錄檔並選取 [下載],以下載個別的記錄檔

Screenshot of Output and logs section of a run.

user_logs 資料夾

此資料夾包含使用者產生的記錄相關資訊。 預設會開啟此資料夾,並選取 std_log.txt 記錄檔。 程式碼的記錄 (例如,print 陳述式) 會顯示在 std_log.txt 中。 此檔案包含來自控制指令碼和定型指令碼的 stdout 記錄和 stderr 記錄 (每個程序一個)。 大部分情況下,您會在這裡監視記錄。

system_logs 資料夾

此資料夾包含 Azure Machine Learning 所產生的記錄,依預設會關閉。 系統所產生的記錄會根據執行階段中的作業階段分組到不同的資料夾。

其他資料夾

針對在多個計算叢集上定型的作業,每個節點 IP 都會有記錄。 每個節點的結構與單一節點作業相同。 另外還有一個存放了整體執行、stderr 和 stdout 記錄的記錄資料夾。

Azure Machine Learning 會在定型期間記錄來自各種來源的資訊,例如 AutoML 或執行定型作業的 Docker 容器。 其中的許多記錄並未記載下來。 如果您遇到問題並聯繫 Microsoft 支援服務,他們在進行疑難排解時可能會使用這些記錄。

互動式記錄工作階段

互動式記錄工作階段通常用於筆記本環境。 Experiment.start_logging() 方法會啟動互動式記錄工作階段。 工作階段期間記錄的所有計量都會加入實驗的回合記錄中。 run.complete() 方法會結束工作階段,並將該回合標示為已完成。

ScriptRun 記錄

在本節中,您將了解在使用 ScriptRunConfig 進行設定時所建立的執行程序內,新增記錄程式碼的方法。 您可以使用 ScriptRunConfig 類別來封裝可重複回合的指令碼和環境。 您也可以使用此選項來顯示用於監視的視覺型 Jupyter Notebook 小工具。

這個範例會對 Alpha 值執行參數整理,並使用 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 設計工具中的記錄計量相關資訊,請參閱如何在設計工具中記錄計量

Notebook 範例

下列 Notebook 示範了此文章中說明的概念:

了解如何依照使用 Jupyter 筆記本來探索這項服務一文來執行筆記本。

下一步

若要深入了解如何使用 Azure Machine Learning,請參閱下列文章: