使用 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 伺服器,並在下列各節中執行程式碼。
- 安裝 Azure Machine Learning SDK (>= 1.13.0)。
- 建立工作區設定檔。
設定實驗
本節藉由載入所需的 Python 套件、初始化工作區、定義定型環境,並準備定型指令碼,來設定訓練實驗。
初始化工作區
Azure Machine Learning 工作區是服務的最上層資源。 其可提供集中式位置以處理您建立的所有成品。 在 Python SDK 中,您可以藉由建立 workspace
物件來存取工作區成品。
從必要條件區段建立的 config.json
檔案建立工作區物件。
from azureml.core import Workspace
ws = Workspace.from_config()
準備指令碼
在本教學課程中,已為您提供定型指令碼 train_iris.py。 在實務上,您應該能夠採用任何自訂定型指令碼,並在不需要修改程式碼的情況下,使用 Azure Machine Learning 來執行。
注意
- 提供的定型指令碼示範如何使用指令碼中的
Run
物件,將某些計量記錄到您的 Azure Machine Learning 執行。 - 提供的定型指令碼會使用來自
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_framework
、model_framework_version
和 resource_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_framework
、model_framework_version
和 resource_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,請參閱下列其他文章。