分享方式:


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

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

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

必要條件

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

從計算開始

工作區中的 [計算] 區段可讓您建立計算資源。 計算執行個體是完全由 Azure Machine Learning 管理的雲端式工作站。 本教學課程系列使用計算執行個體。 您也可以使用它來執行自己的程式碼,以及開發和測試模型。

  1. 登入 Azure Machine Learning Studio
  2. 如果工作區未開啟,請選取您的工作區。
  3. 在左側導覽中,選取 [計算]
  4. 如果您沒有計算執行個體,您會在畫面中間看到 [新增]。 選取 [新增],然後填妥表單。 您可以使用所有預設值。
  5. 如果您有計算執行個體,請從清單中選取它。 若已停止,請選取 [開始]

開啟 Visual Studio Code (VS Code)

一旦擁有執行中的計算執行個體,您就可以透過各種方式加以存取。 本教學課程示範如何從 VS Code 使用計算執行個體。 VS Code 為您提供完全整合式開發環境 (IDE) 搭配 Azure Machine Learning 資源的強大功能。

在計算執行個體清單中,針對您想使用的計算執行個體選取 [VS Code (Wed)] 或 [VS Code (桌面)] 連結。 如果您選擇 [VS Code (桌面)],您可能會看到快顯視窗,詢問您是否要開啟應用程式。

此螢幕擷取畫面顯示要啟動 VS Code (Web) 或 (桌面) 的連結。

這個 VS Code 執行個體會連結至計算執行個體和工作區檔案系統。 即使您在桌面上開啟它,您看到的檔案是工作區中的檔案。

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

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

  • 上傳檔案。

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

    1. 使用右上方的 [下載原始檔案] 按鈕,將這個 conda 環境檔案 workstation_env.yml 下載至您的電腦。

    2. 將檔案從您的電腦拖曳至 VS Code 視窗。 此檔案會上傳至您的工作區。

    3. 將檔案移至使用者名稱資料夾底下。

      此螢幕擷取畫面顯示如何上傳檔案。

    4. 選取此檔案以進行預覽,並查看其指定的相依性。 您會看到如下的內容:

    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
    
  • 建立核心。

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

    1. 在頂端功能表列上,選取 [終端機] > [新增終端機]

      螢幕擷取畫面顯示筆記本工具列中的開啟終端機工具。

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

      conda env list
      
    3. cd 至您上傳 workstation_env.yml 檔案的資料夾。 例如,如果您將其上傳至您的使用者資料夾:

      cd Users/myusername
      
    4. 請確定 workstation_env.yml 位於此資料夾中。

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

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

      conda activate workstation_env
      

      注意

      如果您看到 CommandNotFoundError,請依照指示執行 conda init bash、關閉終端機,然後開啟新的終端機。 然後重試 conda activate workstation_env 命令。

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

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

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

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

建立筆記本

  1. 在頂端功能表列上,選取 [檔案] > [新增檔案]
  2. 將新檔案命名為 develop-tutorial.ipynb (或輸入您偏好的名稱)。 確定您使用 .ipynb 副檔名。

設定核心

  1. 在右上方,選取 [選取核心]
  2. 選取 [Azure ML 計算執行個體 (computeinstance-name)]
  3. 選取您建立的核心,即 Tutorial Workstation Env。 如果沒看到它,請選取右上方的 [重新整理] 工具。

開發定型指令碼

在本節中,您會使用來自 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. 回到 Azure Machine Learning 工作室中您的工作區。

  2. 在左側導覽中,選取 [工作]

    螢幕擷取畫面顯示如何在導覽中選取 [作業]。

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

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

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

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

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

    螢幕擷取畫面顯示作業的計量。

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

    螢幕擷取畫面顯示作業的影像。

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

建立 Python 指令碼

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

  1. 在 VS Code 視窗中,以滑鼠右鍵按一下筆記本檔案名稱,然後選取 [將筆記本匯入至指令碼]

  2. 使用功能表 [檔案] > [儲存] 來儲存這個新的指令碼檔案。 將它稱為 train.py

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

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

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

執行 Python 指令碼

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

  1. 選取您稍早在本教學課程中建立的環境作為 Python 版本 (workstations_env)。 在筆記本的右下角,您會看到環境名稱。 選取它,然後在畫面中間選取環境。

    顯示選取新環境的螢幕擷取畫面。

  2. 現在執行 Python 指令碼。 使用右上方的 [執行 Python 檔案] 工具。

    螢幕擷取畫面顯示畫面右上方的 [執行 Python 檔案] 工具。

注意

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

檢查指令碼結果

回到 Azure Machine Learning 工作室中您的工作區中的 [作業],查看定型指令碼的結果。 請記住,定型資料會隨著每個分割而變更,因此執行之間的結果也會有所不同。

清除資源

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

停止計算執行個體

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

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

刪除所有資源

重要

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

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

  1. 在 [Azure 入口網站] 的搜尋方塊中,輸入 [資源群組],然後從結果中選取它。

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

  3. 在 [概觀] 頁面上,選取 [刪除資源群組]

    在 Azure 入口網站中刪除資源群組選項的螢幕擷取畫面。

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

下一步

深入了解:

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