教學課程:雲端工作站上的模型開發

了解如何在 Azure Machine Learning 雲端工作站上使用筆記本開發定型指令碼。 本教學課程涵蓋開始使用所需的基本概念:

  • 安裝和設定雲端工作站。 您的雲端工作站是由 Azure Machine Learning 計算執行個體提供技術支援,此計算執行個體已預先設定環境以支援各種模型開發需求。
  • 使用雲端式開發環境。
  • 使用 MLflow 追蹤您的模型計量,全都來自筆記本內。

必要條件

若要使用 Azure Machine Learning,您必須先有工作區。 如果您沒有工作區,請完成建立要開始使用所需要的資源以建立工作區,並深入了解其使用方式。

開始使用筆記本

工作區中的 Notebooks 區段是開始了解 Azure Machine Learning 及其功能的絕佳位置。 您可以在這裡連線到計算資源、使用終端機,以及編輯和執行 Jupyter Notebook 和指令碼。

  1. 登入 Azure Machine Learning Studio

  2. 如果工作區未開啟,請選取您的工作區。

  3. 在左側導覽列中,選取 [筆記本]

  4. 如果您沒有計算執行個體,您會在畫面中間看到 [建立計算]。 選取 [建立計算] 並填寫表單。 您可以使用所有預設值。 (如果您已經有計算執行個體,您會在該位置看到 [終端機]。您稍後會在本教學課程中使用這個 [終端機]。)

    Screenshot shows how to create a compute instance.

設定用於原型設計的新環境 (選擇性)

為了讓指令碼執行,您必須在以程式碼所預期相依性和程式庫進行設定的環境中工作。 本節可協助您建立專為程式碼量身打造的環境。 若要建立筆記本連線的新 Jupyter 核心,您將會使用定義相依性的 YAML 檔案。

  • 上傳檔案。

    您上傳的檔案會儲存在 Azure 檔案共用中,這些檔案會掛接至每個計算執行個體,並在工作區內共用。

    1. 使用右上方的 [下載原始檔案] 按鈕,將這個 conda 環境檔案 workstation_env.yml 下載至您的電腦。
    1. 選取 [新增檔案],然後選取 [上傳檔案],將其上傳至您的工作區。

      Screenshot shows how to upload files to your workspace.

    2. 選取 [瀏覽並選取檔案]

    3. 選取您下載的 workstation_env.yml 檔案。

    4. 選取上傳

    您會在 [檔案] 索引標籤中的使用者名稱資料夾底下看到 workstation_env.yml 檔案。選取此檔案以進行預覽,並查看其指定的相依性。 您會看到如下的內容:

    name: workstation_env
    # This file serves as an example - you can update packages or versions to fit your use case
    dependencies:
      - python=3.8
      - pip=21.2.4
      - scikit-learn=0.24.2
      - scipy=1.7.1
      - pandas>=1.1,<1.2
      - pip:
        - mlflow-skinny 
        - azureml-mlflow
        - psutil>=5.8,<5.9
        - ipykernel~=6.0
        - matplotlib
    
  • 建立核心。

    現在,使用 Azure Machine Learning 終端機,根據 workstation_env.yml 檔案建立新的 Jupyter 核心。

    1. 選取 [終端機] 以開啟終端機視窗。 您也可以從左側命令列開啟終端機:

      Screenshot shows open terminal tool in notebook toolbar.

    2. 如果計算執行個體已停止,請選取 [啟動計算],並等到其執行為止。

      Screenshot shows how to start compute if it's stopped.

    3. 執行計算之後,您會在終端機中看到歡迎訊息,而且您可以開始輸入命令。

    4. 檢視您目前的 conda 環境。 作用中環境會以 * 標示。

      conda env list
      
    5. 如果您已為本教學課程建立子資料夾,請立即 cd 至該資料夾。

    6. 根據提供的 conda 檔案建立環境。 建置此環境需要幾分鐘的時間。

      conda env create -f workstation_env.yml
      
      
    7. 啟動新環境。

       conda activate workstation_env
      
    8. 驗證正確的環境為作用中,再次尋找以 * 標示的環境。

      conda env list
      
    9. 根據您的作用中環境建立新的 Jupyter 核心。

      python -m ipykernel install --user --name workstation_env --display-name "Tutorial Workstation Env" 
      
    10. 關閉終端機視窗。

您現在有新的核心。 接下來,您將會開啟筆記本並使用此核心。

建立筆記本

  1. 選取 [新增檔案],然後選擇 [建立新檔案]

    Screenshot: Create new file.

  2. 將您的新筆記本命名為 develop-tutorial.ipynb (或輸入您偏好的名稱)。

  3. 如果計算執行個體已停止,請選取 [啟動計算],並等到其執行為止。

    Screenshot shows how to start compute if it's stopped.

  4. 您會在右上方看到筆記本已連線到預設核心。 如果您已建立核心,請切換為使用教學課程工作站環境核心。

開發定型指令碼

在本節中,您會使用來自 UCI 資料集的準備完成測試和定型資料集,來開發 Python 定型指令碼,以預測信用卡預設付款。

此程式碼會使用 sklearn 來定型,以及使用 MLflow 來記錄計量。

  1. 從匯入您將在定型指令碼中使用的套件和程式庫的程式碼開始。

    import os
    import argparse
    import pandas as pd
    import mlflow
    import mlflow.sklearn
    from sklearn.ensemble import GradientBoostingClassifier
    from sklearn.metrics import classification_report
    from sklearn.model_selection import train_test_split
  2. 接下來,載入並處理此實驗的資料。 在本教學課程中,您會從網際網路上的檔案讀取資料。

    # load the data
    credit_df = pd.read_csv(
        "https://azuremlexamples.blob.core.windows.net/datasets/credit_card/default_of_credit_card_clients.csv",
        header=1,
        index_col=0,
    )
    
    train_df, test_df = train_test_split(
        credit_df,
        test_size=0.25,
    )
  3. 讓資料準備好進行定型:

    # Extracting the label column
    y_train = train_df.pop("default payment next month")
    
    # convert the dataframe values to array
    X_train = train_df.values
    
    # Extracting the label column
    y_test = test_df.pop("default payment next month")
    
    # convert the dataframe values to array
    X_test = test_df.values
  4. 新增程式碼以使用 MLflow 啟動自動記錄,以便追蹤計量和結果。 使用模型開發的反覆進行本質,MLflow 可協助您記錄模型參數和結果。 請回頭參考這些執行,以比較並了解您的模型執行方式。 當您準備好從開發階段移至 Azure Machine Learning 內工作流程的定型階段時,這些記錄也會提供內容。

    # set name for logging
    mlflow.set_experiment("Develop on cloud tutorial")
    # enable autologging with MLflow
    mlflow.sklearn.autolog()
  5. 將模型定型。

    # Train Gradient Boosting Classifier
    print(f"Training with data of shape {X_train.shape}")
    
    mlflow.start_run()
    clf = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1)
    clf.fit(X_train, y_train)
    
    y_pred = clf.predict(X_test)
    
    print(classification_report(y_test, y_pred))
    # Stop logging for this model
    mlflow.end_run()

    注意

    您可以忽略 mlflow 警告。 您仍然可以追蹤需要的所有結果。

反覆執行

有了模型結果之後,您可能想要變更某個項目,然後再試一次。 例如,嘗試不同的分類器技術:

# Train  AdaBoost Classifier
from sklearn.ensemble import AdaBoostClassifier

print(f"Training with data of shape {X_train.shape}")

mlflow.start_run()
ada = AdaBoostClassifier()

ada.fit(X_train, y_train)

y_pred = ada.predict(X_test)

print(classification_report(y_test, y_pred))
# Stop logging for this model
mlflow.end_run()

注意

您可以忽略 mlflow 警告。 您仍然可以追蹤需要的所有結果。

檢查結果

既然您已嘗試兩個不同的模型,請使用 MLFfow 追蹤的結果來決定哪一個模型更好。 您可以參考正確性之類的計量,或其他對您的案例而言最重要的指標。 您可以藉由查看 MLflow 所建立的作業,更詳細地探討這些結果。

  1. 在左側導覽中,選取 [作業]

    Screenshot shows how to select Jobs in the navigation.

  2. 選取 [在雲端上開發教學課程] 的連結。

  3. 會顯示兩個不同的作業,您嘗試的模型各一個。 這些名稱會自動產生。 當您將滑鼠停留在名稱上方時,如果您想要重新命名,請使用名稱旁邊的鉛筆工具。

  4. 選取第一個作業的連結。 名稱會出現在頂端。 您也可以使用鉛筆工具在這裡重新命名。

  5. 此頁面會顯示作業的詳細資料,例如屬性、輸出、標記和參數。 在 [標記] 底下,您會看到 estimator_name,描述模型的類型。

  6. 選取 [計量] 索引標籤,以檢視 MLflow 記錄的計量。 (預期您的結果會有所不同,因為您有不同的訓練集。)

    Screenshot shows metrics for a job.

  7. 選取 [映像] 索引標籤,以檢視 MLflow 產生的映像。

    Screenshot shows images for a job.

  8. 返回並檢閱其他模型的計量和映像。

建立 Python 指令碼

現在,從您的筆記本建立 Python 指令碼以進行模型定型。

  1. 在筆記本工具列中,選取功能表。

  2. 選取 [匯出為] > [Python]

    Screenshot shows exporting a Python file from the notebook.

  3. 將檔案命名為 train.py

  4. 查看此檔案,並刪除在定型指令碼中不想要的程式碼。 例如,保留您想要使用的模型程式碼,並刪除您不需要的模型程式碼。

    • 請確定您保留可開始自動記錄的程式碼 (mlflow.sklearn.autolog())。
    • 您可能想要刪除自動產生的註解,並新增更多您自己的註解。
    • 當您以互動方式執行 Python 指令碼 (在終端機或筆記本中) 時,您可以保留定義實驗名稱的行 (mlflow.set_experiment("Develop on cloud tutorial"))。 或甚至提供不同的名稱,將其視為 [作業] 區段中的不同項目。 但是當您準備定型作業的指令碼時,該行將無法運作,而且應該省略 - 作業定義會包含實驗名稱。
    • 當您定型單一模型時,開始和結束執行的行 (mlflow.start_run()mlflow.end_run()) 也沒有必要 (不會有任何作用),但如果您想要的話,也可以保留。
  5. 在完成編輯後,儲存檔案。

您現在有 Python 指令碼可用來定型您慣用的模型。

執行 Python 指令碼

現在,您正在計算執行個體上執行此程式碼,也就是您的 Azure Machine Learning 開發環境。 教學課程:將模型定型示範如何在更強大的計算資源上以更可調整的方式執行定型指令碼。

  1. 在左側選取 [終端機] 以開啟終端機視窗。

    Screenshot shows how to open a terminal window.

  2. 檢視您目前的 conda 環境。 作用中環境會以 * 標示。

    conda env list
    
  3. 如果您已建立新的核心,請立即啟動:

    conda activate workstation_env
    
  4. 如果您已為本教學課程建立子資料夾,請立即 cd 至該資料夾。

  5. 執行您的定型指令碼。

    python train.py
    

注意

您可以忽略 mlflow 警告。 您仍然可以從自動記錄取得所有計量和映像。

檢查指令碼結果

返回 [作業] 以查看定型指令碼的結果。 請記住,定型資料會隨著每個分割而變更,因此執行之間的結果也會有所不同。

清除資源

如果您打算立即繼續進行其他教學課程,請跳至後續步驟

停止計算執行個體

如果現在不打算使用,請停止計算執行個體:

  1. 在工作室的左側導覽區域中,選取 [計算]
  2. 在頂端索引標籤中,選取 [計算執行個體]
  3. 選取清單中的計算執行個體。
  4. 在頂端工具列中,選取 [停止]

刪除所有資源

重要

您所建立的資源可用來作為其他 Azure Machine Learning 教學課程和操作說明文章的先決條件。

如果不打算使用您建立的任何資源,請刪除以免產生任何費用:

  1. 在 Azure 入口網站中,選取最左邊的 [資源群組]

  2. 從清單中,選取您所建立的資源群組。

  3. 選取 [刪除資源群組]

    Screenshot of the selections to delete a resource group in the Azure portal.

  4. 輸入資源群組名稱。 接著選取刪除

下一步

深入了解:

本教學課程說明在程式碼所在的相同電腦上建立模型、進行原型設計的早期步驟。 針對生產定型,了解如何在更強大的遠端計算資源上使用該定型指令碼: