適用於:
Azure CLI ml 延伸模組 v1
Python SDK azureml v1
重要事項
本文提供使用 Azure Machine Learning SDK v1 的相關信息。 SDK v1 自 2025 年 3 月 31 日起已被取代。 其支援將於 2026 年 6 月 30 日結束。 您可以在該日期之前安裝並使用 SDK v1。 您使用 SDK v1 的現有工作流程將在支援終止日期後繼續運作。 不過,如果產品發生架構變更,它們可能會面臨安全性風險或重大變更。
建議您在 2026 年 6 月 30 日之前轉換至 SDK v2。 如需 SDK v2 的詳細資訊,請參閱 什麼是 Azure Machine Learning CLI 和 Python SDK v2? 和 SDK v2 參考。
了解如何將您的機器學習或深度學習模型部署為 Azure 雲端中的 Web 服務。
附註
Azure Machine Learning 端點 (v2) 提供經過改良且更簡單的部署體驗。 端點同時支援即時和批次推斷案例。 端點會提供整合介面,以叫用和管理跨計算類型的模型部署。 請參閱什麼是 Azure Machine Learning 端點?。
部署模型的工作流程
無論部署模型的位置為何,工作流程都十分類似:
- 註冊模型。
- 準備輸入腳本。
- 準備推斷設定。
- 在本機部署模型,以確保一切運作正常。
- 選擇計算目標。
- 將模型部署至雲端。
- 測試所產生的 Web 服務。
如需機器學習部署工作流程中相關概念的詳細資訊,請參閱使用 Azure Machine Learning 來管理、部署及監視模型。
必要條件
重要事項
本文中的 Azure CLI 命令使用 azure-cli-ml 或 v1 (Azure Machine Learning 的擴充功能)。 CLI v1 的支援已於 2025 年 9 月 30 日結束。 Microsoft 將不再提供此服務的技術支援或更新。 您使用 CLI v1 的現有工作流程將在支援終止日期之後繼續運作。 不過,如果產品發生架構變更,它們可能會面臨安全性風險或重大變更。
建議您盡快轉換至 ml或 v2 擴充功能。 如需有關 v2 延伸模組的詳細資訊,請參閱 Azure Machine Learning CLI 延伸模組和 Python SDK v2。
連線到您的工作區
若要查看您有權存取的工作區,請使用下列命令:
az login
az account set -s <subscription>
az ml workspace list --resource-group=<resource-group>
註冊模型
已部署機器學習服務的一般情況,就是您需要下列元件:
- 代表您要部署的特定模型的資源 (例如:pytorch 模型檔案)。
- 在服務中執行的程式代碼,並在指定的輸入上執行模型。
Azure Machine Learning 可讓您將部署區分成兩個不同的元件,而得以保留相同的程式碼,僅更新模型。 我們會定義將模型與程式代碼 分開 上傳為「註冊模型」的機制。
當您註冊模型時,我們會將模型上傳至雲端 (位於您工作區的預設儲存體帳戶中),然後將其掛接到 Web 服務執行所在的同一計算。
下列範例示範如何註冊模型。
重要事項
您應該只使用您建立或從信任來源取得的模型。 您應該將串行化模型視為程式代碼,因為許多熱門格式都發現了安全性弱點。 此外,模型可能會刻意以惡意意圖訓練,以提供偏差或不正確的輸出。
下列命令會下載模型,然後向您的 Azure Machine Learning 工作區註冊該模型:
wget https://aka.ms/bidaf-9-model -O model.onnx --show-progress
az ml model register -n bidaf_onnx \
-p ./model.onnx \
-g <resource-group> \
-w <workspace-name>
將 -p 設定為您想要註冊的資料夾或檔案路徑。
如需 az ml model register 的詳細資訊,請參閱參考文件。
從 Azure Machine Learning 定型作業註冊模型
如果需要註冊先前透過 Azure Machine Learning 定型作業建立的模型,您可以指定實驗、回合,以及此模型的路徑:
az ml model register -n bidaf_onnx --asset-path outputs/model.onnx --experiment-name myexperiment --run-id myrunid --tag area=qna
--asset-path 參數指的是模型的雲端位置。 在此範例中,會使用單一檔案的路徑。 若要在模型註冊中包含多個檔案,請將 --asset-path 設定為包含檔案的資料夾路徑。
如需 az ml model register 的詳細資訊,請參閱參考文件。
附註
您也可以透過工作區 UI 入口網站,從本機檔案註冊模型。
目前,有兩個選項可在 UI 中上傳本機模型檔案:
- 從本機檔案,註冊 v2 模型。
- 從本機檔案 (根據架構),註冊 v1 模型。
只有透過從本機檔案 (根據架構) 入口註冊的模型 (稱為 v1 模型),才能使用 SDKv1/CLIv1 部署為 webservices。
定義虛擬輸入指令碼
輸入指令碼會接收提交給已部署 Web 服務的資料,並將其傳遞給模型。 然後,其會將模型的回應傳回給用戶端。 腳本是您模型特有的。 輸入指令碼必須了解模型預期並傳回的資料。
您需要在輸入腳本中完成的兩個事項如下:
- 載入您的模型 (使用稱為
init()的函數) - 在輸入資料上執行模型 (使用稱為
run()的函數)
針對您的初始部署,請使用會列印其所收到資料的虛擬輸入腳本。
import json
def init():
print("This is init")
def run(data):
test = json.loads(data)
print(f"received data {test}")
return f"test is {test}"
將此檔案儲存為目錄 (稱為 echo_score.py) 內的 source_dir 此虛擬指令碼會傳回您對其傳送的資料,因此不會使用模型。 但是,這有助於測試評分指令碼是否執行中。
定義推斷設定
推斷設定會描述要在初始化 Web 服務時使用的 Docker 容器檔案。 當您部署 Web 服務時,來源目錄中的所有檔案,包括子目錄,都會壓縮並上傳至雲端。
下列推斷設定會指定機器學習部署將會使用 echo_score.py 目錄中的檔案 ./source_dir 來處理傳入要求,而且會搭配使用 Docker 映像與 project_environment 環境中指定的 Python 套件。
建立專案環境時,您可以使用任何 Azure Machine Learning 推斷策展環境,作為基礎 Docker 映像。 必要相依性會安裝在最上層。 產生的 Docker 映像會儲存至與您的工作區相關聯的存放庫。
附註
Azure Machine Learning 推斷來源目錄上傳不遵循 .gitignore 或 .amlignore
最小推斷設定可以撰寫成:
{
"entryScript": "echo_score.py",
"sourceDirectory": "./source_dir",
"environment": {
"docker": {
"arguments": [],
"baseDockerfile": null,
"baseImage": "mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04",
"enabled": false,
"sharedVolumes": true,
"shmSize": null
},
"environmentVariables": {
"EXAMPLE_ENV_VAR": "EXAMPLE_VALUE"
},
"name": "my-deploy-env",
"python": {
"baseCondaEnvironment": null,
"condaDependencies": {
"channels": [],
"dependencies": [
"python=3.6.2",
{
"pip": [
"azureml-defaults"
]
}
],
"name": "project_environment"
},
"condaDependenciesFile": null,
"interpreterPath": "python",
"userManagedDependencies": false
},
"version": "1"
}
}
以名稱 dummyinferenceconfig.json 儲存檔案。
請參閱這篇文章,以取得更詳盡的推斷設定討論。
定義部署設定
部署設定會指定 Web 服務為了執行所需的記憶體和核心數量。 其也會提供基礎 Web 服務的設定詳細資料。 例如,部署組態可讓您指定您的服務需要 2 GB 的記憶體、2 個 CPU 核心、1 個 GPU 核心,並啟用自動調整。
部署設定的可用選項會根據您所選擇的計算目標而有所不同。 在本機部署中,您所能指定的只是您的 Web 服務所在的埠。
deploymentconfig.json 文件中的項目會對應至 LocalWebservice.deploy_configuration 的參數。 下表描述 JSON 文件中的實體之間的對應以及方法的參數:
| JSON 實體 | 方法參數 | 描述 |
|---|---|---|
computeType |
無 | 計算目標。 若為本機目標,該值必須為 local。 |
port |
port |
本機連接埠上公開服務的 HTTP 端點。 |
此 JSON 是與 CLI 搭配使用的範例部署設定:
{
"computeType": "local",
"port": 32267
}
將此 JSON 儲存為稱為 deploymentconfig.json 的檔案。
如需詳細資訊,請參閱部署結構描述。
部署您的機器學習模型
您現在已準備好部署模型。
將 bidaf_onnx:1 取代為您的模型名稱及其版本號碼。
az ml model deploy -n myservice \
-m bidaf_onnx:1 \
--overwrite \
--ic dummyinferenceconfig.json \
--dc deploymentconfig.json \
-g <resource-group> \
-w <workspace-name>
呼叫您的模型
我們來檢查您的回應模型是否已成功部署。 您應該能夠執行活躍度要求,以及評分要求:
curl -v http://localhost:32267
curl -v -X POST -H "content-type:application/json" \
-d '{"query": "What color is the fox", "context": "The quick brown fox jumped over the lazy dog."}' \
http://localhost:32267/score
定義輸入指令碼
現在是時候實際載入您的模型。 首先,修改您的輸入腳本:
import json
import numpy as np
import os
import onnxruntime
from nltk import word_tokenize
import nltk
def init():
nltk.download("punkt")
global sess
sess = onnxruntime.InferenceSession(
os.path.join(os.getenv("AZUREML_MODEL_DIR"), "model.onnx")
)
def run(request):
print(request)
text = json.loads(request)
qw, qc = preprocess(text["query"])
cw, cc = preprocess(text["context"])
# Run inference
test = sess.run(
None,
{"query_word": qw, "query_char": qc, "context_word": cw, "context_char": cc},
)
start = np.asscalar(test[0])
end = np.asscalar(test[1])
ans = [w for w in cw[start : end + 1].reshape(-1)]
print(ans)
return ans
def preprocess(word):
tokens = word_tokenize(word)
# split into lower-case word tokens, in numpy array with shape of (seq, 1)
words = np.asarray([w.lower() for w in tokens]).reshape(-1, 1)
# split words into chars, in numpy array with shape of (seq, 1, 1, 16)
chars = [[c for c in t][:16] for t in tokens]
chars = [cs + [""] * (16 - len(cs)) for cs in chars]
chars = np.asarray(chars).reshape(-1, 1, 1, 16)
return words, chars
將此檔案儲存為 score.py,而不是 source_dir。
請注意,使用 AZUREML_MODEL_DIR 環境變數來找出您註冊的模型。 現在您已新增一些 pip 套件。
{
"entryScript": "score.py",
"sourceDirectory": "./source_dir",
"environment": {
"docker": {
"arguments": [],
"baseDockerfile": null,
"baseImage": "mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04",
"enabled": false,
"sharedVolumes": true,
"shmSize": null
},
"environmentVariables": {
"EXAMPLE_ENV_VAR": "EXAMPLE_VALUE"
},
"name": "my-deploy-env",
"python": {
"baseCondaEnvironment": null,
"condaDependencies": {
"channels": [],
"dependencies": [
"python=3.6.2",
{
"pip": [
"azureml-defaults",
"nltk",
"numpy",
"onnxruntime"
]
}
],
"name": "project_environment"
},
"condaDependenciesFile": null,
"interpreterPath": "python",
"userManagedDependencies": false
},
"version": "2"
}
}
將此檔案儲存為 inferenceconfig.json
再次部署並呼叫您的服務
請重新部署您的服務:
將 bidaf_onnx:1 取代為您的模型名稱及其版本號碼。
az ml model deploy -n myservice \
-m bidaf_onnx:1 \
--overwrite \
--ic inferenceconfig.json \
--dc deploymentconfig.json \
-g <resource-group> \
-w <workspace-name>
然後確定您可以將 Post 要求傳送至服務:
curl -v -X POST -H "content-type:application/json" \
-d '{"query": "What color is the fox", "context": "The quick brown fox jumped over the lazy dog."}' \
http://localhost:32267/score
選擇計算目標
用來裝載模型的計算目標會影響已部署端點的成本和可用性。 使用此資料表選擇適當的計算目標。
| 計算目標 | 用於 | GPU 支援 | 描述 |
|---|---|---|---|
| 本機 Web 服務 | 測試/偵錯 | 用於有限的測試和疑難排解。 硬體加速取決於本機系統中的程式庫使用情況。 | |
| Azure Machine Learning Kubernetes | 即時推斷 | 是的 | 在雲端中執行推斷工作負載。 |
| Azure 容器執行個體 | 即時推斷 建議僅用於開發/測試目的。 |
用於需要少於 48 GB RAM 的低規模 CPU 型工作負載。 您無須管理叢集。 僅適用於大小小於 1 GB 的模型。 在設計工具中支援。 |
附註
選擇叢集 SKU 時,請先擴大,然後再擴增。首先,根據模型的需求為機器設置 150% 的 RAM,然後分析其結果,並找出效能符合您的需求的機器。 了解這點之後,請增加機器數目,以符合您的同時推斷需求。
附註
Azure Machine Learning 端點 (v2) 提供經過改良且更簡單的部署體驗。 端點同時支援即時和批次推斷案例。 端點會提供整合介面,以叫用和管理跨計算類型的模型部署。 請參閱什麼是 Azure Machine Learning 端點?。
部署至雲端
確認服務在本機運作並選擇遠端計算目標后,即可部署至雲端。
變更您的部署設定,以對應至您所選擇的計算目標,在此案例中為 Azure 容器執行個體:
部署設定的可用選項會根據您所選擇的計算目標而有所不同。
{
"computeType": "aci",
"containerResourceRequirements":
{
"cpu": 0.5,
"memoryInGB": 1.0
},
"authEnabled": true,
"sslEnabled": false,
"appInsightsEnabled": false
}
將此檔案儲存為 re-deploymentconfig.json。
如需詳細資訊,請參閱此參考。
請重新部署您的服務:
將 bidaf_onnx:1 取代為您的模型名稱及其版本號碼。
az ml model deploy -n myservice \
-m bidaf_onnx:1 \
--overwrite \
--ic inferenceconfig.json \
--dc re-deploymentconfig.json \
-g <resource-group> \
-w <workspace-name>
若要檢視服務記錄,請使用下列命令:
az ml service get-logs -n myservice \
-g <resource-group> \
-w <workspace-name>
呼叫您的遠端 Web 服務
當您從遠端部署時,可能已啟用金鑰驗證。 以下範例說明如何使用 Python 取得您的服務金鑰,以提出推斷要求。
import requests
import json
from azureml.core import Webservice
service = Webservice(workspace=ws, name="myservice")
scoring_uri = service.scoring_uri
# If the service is authenticated, set the key or token
key, _ = service.get_keys()
# Set the appropriate headers
headers = {"Content-Type": "application/json"}
headers["Authorization"] = f"Bearer {key}"
# Make the request and display the response and logs
data = {
"query": "What color is the fox",
"context": "The quick brown fox jumped over the lazy dog.",
}
data = json.dumps(data)
resp = requests.post(scoring_uri, data=data, headers=headers)
print(resp.text)print(service.get_logs())
如需更多其他語言的範例用戶端,請參閱有關要取用 Web 服務的用戶端應用程式一文。
如何在工作室中設定電子郵件
若要開始在作業、線上端點或批次端點完成,或是發生問題 (失敗、已取消) 時接收電子郵件,請使用下列步驟:
- 在 Azure ML 工作室中,選取齒輪圖示來移至設定。
- 選取 [電子郵件通知] 索引標籤。
- 切換以啟用或停用特定事件的電子郵件通知。
了解服務狀態
在模型部署期間,您可能會在其完全部署時看到服務狀態變更。
下表描述不同的服務狀態:
| Web 服務狀態 | 描述 | 最終狀態? |
|---|---|---|
| 轉換中 | 服務正在進行部署。 | 否 |
| 不健康 | 服務已部署,但目前無法連線。 | 否 |
| 無法排程 | 因為缺少資源,所以目前無法部署服務。 | 否 |
| 失敗 | 由於錯誤或損毀,服務無法部署。 | 是的 |
| 良好 | 服務狀況良好且端點可供使用。 | 是的 |
提示
部署時,會建置計算目標的 Docker 映像,並從 Azure Container Registry (ACR) 載入這些映像。 根據預設,Azure Machine Learning 會建立使用基本服務層級的 ACR。 將工作區的 ACR 變更為標準或進階層,可能會減少建置映像並將其載入至計算目標所需的時間。 如需詳細資訊,請參閱 Azure Container Registry 服務層級。
附註
如果您要將模型部署至 Azure Kubernetes Service (AKS),建議您為該叢集啟用 Azure 監視器 。 這可協助您了解整體叢集健康情況和資源使用量。 下列資源可能也會有用處:
如果您嘗試將模型部署到狀況不良或多載的叢集,則預期會遇到問題。 如果您需要針對 AKS 叢集問題進行疑難解答的協助,請連絡 AKS 支援。
刪除資源
# Get the current model id
import os
stream = os.popen(
'az ml model list --model-name=bidaf_onnx --latest --query "[0].id" -o tsv'
)
MODEL_ID = stream.read()[0:-1]
MODEL_ID
az ml service delete -n myservice
az ml service delete -n myaciservice
az ml model delete --model-id=<MODEL_ID>
若要刪除已部署的 Web 服務,請使用 az ml service delete <name of webservice>。
若要從您的工作區中刪除已註冊的模型,請使用 az ml model delete <model id>