使用 Azure Machine Learning (SDK v1) 大規模定型 PyTorch 模型

適用於:Python SDK azureml v1

在本文中,您將了解如何使用 Azure Machine Learning 來執行 scikit-learn 定型指令碼。

本文中的範例指令碼用於分類鳶尾花影像,以根據 scikit-learn 的鳶尾花資料集來建立機器學習模型。

無論您是從頭開始定型機器學習 scikit-learn 模型,或是將現有的模型帶到雲端,您都可以使用 Azure Machine Learning,利用彈性的雲端計算資源來擴增開放原始碼定型作業。 您可以使用 Azure Machine Learning 建立、部署、版本設定和監視生產等級的模型。

必要條件

您可以在 Azure Machine Learning 計算執行個體或您自己的 Jupyter Notebook 中執行此程式碼:

  • Azure Machine Learning 計算執行個體

    • 完成快速入門:開始使用 Azure Machine Learning,以建立計算執行個體。 每個計算執行個體都包含預先載入 SDK 和筆記本範例存放庫的專用筆記本伺服器。
    • 在 Azure Machine Learning 工作室中選取筆記本索引標籤。 在範例定型資料夾中,藉由瀏覽至下列目錄來尋找完整和擴充的筆記本:how-to-use-azureml > ml-frameworks > scikit-learn > train-hyperparameter-tune-deploy-with-sklearn 資料夾。
    • 您可以使用範例定型資料夾中預先填入的程式碼來完成本教學課程。
  • 建立 Jupyter Notebook 伺服器,並在下列各節中執行程式碼。

設定實驗

本節藉由載入所需的 Python 套件、初始化工作區、定義定型環境,並準備定型指令碼,來設定訓練實驗。

初始化工作區

Azure Machine Learning 工作區是服務的最上層資源。 其可提供集中式位置以處理您建立的所有成品。 在 Python SDK 中,您可以藉由建立 workspace 物件來存取工作區成品。

必要條件區段建立的 config.json 檔案建立工作區物件。

from azureml.core import Workspace

ws = Workspace.from_config()

準備指令碼

在本教學課程中,已為您提供定型指令碼 train_iris.py。 在實務上,您應該能夠依原樣採用任何自訂訓練腳本,並使用 Azure Machine Learning 執行它,而不需要修改您的程式碼。

注意

  • 提供的訓練腳本示範如何使用腳本內的 物件,將一些計量記錄到您的 Azure Machine Learning 執行 Run
  • 提供的定型指令碼會使用來自 iris = datasets.load_iris() 函式的範例資料。 若要使用及存取您自己的資料,請參閱如何使用資料集進行定型,以在定型期間提供資料。

定義您的環境

若要定義封裝定型腳本相依性的 Azure Machine Learning 環境 ,您可以定義自訂環境或使用 和 Azure Machine Learning 策劃環境。

使用策展環境

或者,如果您不想定義自己的環境,Azure Machine Learning 會提供預先建置、 策劃的環境

如果您想要使用策展環境,可以改為執行下列命令:

from azureml.core import Environment

sklearn_env = Environment.get(workspace=ws, name='AzureML-Tutorial')

建立自訂環境

您也可以建立自己的自訂環境。 在 YAML 檔案中定義您的 conda 相依性;在此範例中,會將檔案命名為 conda_dependencies.yml

dependencies:
  - python=3.7
  - scikit-learn
  - numpy
  - pip:
    - azureml-defaults

從此 Conda 環境規格建立 Azure Machine Learning 環境。 環境會在執行階段封裝至 Docker 容器。

from azureml.core import Environment

sklearn_env = Environment.from_conda_specification(name='sklearn-env', file_path='conda_dependencies.yml')

如需有關建立和使用環境的詳細資訊,請參閱在 Azure Machine Learning 中建立和使用軟體環境

設定並提交您的定型執行

建立 ScriptRunConfig

建立 ScriptRunConfig 物件,以指定定型作業的組態詳細資料,包括您的定型指令碼、要使用的環境,以及要在其上執行的計算目標。 如果在 arguments 參數中指定,您定型指令碼的任何引數將透過命令列傳遞。

下列程式碼會設定 ScriptRunConfig 物件,以提交您的作業在本機電腦上執行。

from azureml.core import ScriptRunConfig

src = ScriptRunConfig(source_directory='.',
                      script='train_iris.py',
                      arguments=['--kernel', 'linear', '--penalty', 1.0],
                      environment=sklearn_env)

如果您想要改為在遠端叢集上執行作業,您可以將所需的計算目標指定為 ScriptRunConfig 的 compute_target 參數。

from azureml.core import ScriptRunConfig

compute_target = ws.compute_targets['<my-cluster-name>']
src = ScriptRunConfig(source_directory='.',
                      script='train_iris.py',
                      arguments=['--kernel', 'linear', '--penalty', 1.0],
                      compute_target=compute_target,
                      environment=sklearn_env)

提交您的執行

from azureml.core import Experiment

run = Experiment(ws,'Tutorial-TrainIRIS').submit(src)
run.wait_for_completion(show_output=True)

警告

Azure Machine Learning 藉由複製整個來源目錄來執行定型指令碼。 如果您有不想要上傳的敏感性資料,請使用 .ignore 檔案,或不要將其包含在來源目錄中。 請改用 Azure Machine Learning 資料集來存取您的資料。

執行期間發生的情況

流程執行時,會經歷下列階段:

  • 準備:根據定義的環境來建置 Docker 映像。 映像上傳至工作區的容器登錄,並快取以供稍後執行。 記錄也會串流至執行歷程記錄,並可檢視以監視進度。 如果改為指定策展環境,則會使用支援該策展環境的快取映像。

  • 縮放:如果 Batch AI 叢集需要更多節點來執行執行比目前可用的節點,則叢集會嘗試擴大規模。

  • 執行中:指令碼資料夾中的所有指令碼都會上傳至計算目標、掛接或複製資料存放區,並執行 script。 stdout 和 ./logs 資料夾的輸出都會串流到執行歷程記錄,並且可用來監視執行。

  • 後置處理:執行的 ./outputs 資料夾會複製到執行歷程記錄。

儲存並註冊模型

將模型定型之後,您可以將其儲存並註冊到您的工作區。 註冊模型可讓您在工作區中儲存模型並設定其版本,以簡化模型管理和部署

將下列程式碼新增至您的定型指令碼 train_iris.py,以儲存模型。

import joblib

joblib.dump(svm_model_linear, 'model.joblib')

使用下列程式碼,將模型註冊到您的工作區。 藉由指定參數 model_frameworkmodel_framework_versionresource_configuration,將無程式碼模型部署變成可用狀態。 無程式碼模型部署可讓您直接將模型從已註冊的模型部署為 Web 服務,而 ResourceConfiguration 物件會定義 Web 服務的計算資源。

from azureml.core import Model
from azureml.core.resource_configuration import ResourceConfiguration

model = run.register_model(model_name='sklearn-iris', 
                           model_path='outputs/model.joblib',
                           model_framework=Model.Framework.SCIKITLEARN,
                           model_framework_version='0.19.1',
                           resource_configuration=ResourceConfiguration(cpu=1, memory_in_gb=0.5))

部署

您剛註冊的模型可以與 Azure Machine Learning 中任何其他已註冊的模型完全相同的方式部署。 部署操作說明包含註冊模型區段,但您可以針對部署直接跳到 [creating a compute targethow-to-deploy-and-where.md#choose-a-compute-target),因為您已經有註冊的模型。

(預覽版) 無程式碼模型部署

重要

此功能目前為公開預覽狀態。 此預覽版本是在沒有服務等級協定的情況下提供,不建議用於生產工作負載。 可能不支援特定功能,或可能已經限制功能。 如需詳細資訊,請參閱 Microsoft Azure 預覽版增補使用條款

除了傳統的部署路由之外,您也可以使用無程式碼部署功能 (預覽版) 進行 scikit-learn。 所有內建 scikit-learn 模型類型都支援無程式碼模型部署。 藉由使用 model_frameworkmodel_framework_versionresource_configuration 參數來註冊您的模型 (如上所示),您可以直接使用 deploy() 靜態函式來部署您的模型。

web_service = Model.deploy(ws, "scikit-learn-service", [model])

注意

這些相依性包含在預先建立的 scikit-learn 推斷容器。

    - azureml-defaults
    - inference-schema[numpy-support]
    - scikit-learn
    - numpy

完整的操作說明涵蓋 Azure Machine Learning 中更深入的部署。

後續步驟

在本文中,您已定型並註冊 scikit-learn 模型,並了解部署選項。 若要深入了解 Azure Machine Learning,請參閱下列其他文章。