共用方式為


將機器學習模型部署至 Azure

適用於:Azure CLI ml 延伸模組 v1Python 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 端點?

部署模型的工作流程

無論部署模型的位置為何,工作流程都十分類似:

  1. 註冊模型。
  2. 準備輸入腳本。
  3. 準備推斷設定。
  4. 在本機部署模型,以確保一切運作正常。
  5. 選擇計算目標。
  6. 將模型部署至雲端。
  7. 測試所產生的 Web 服務。

如需機器學習部署工作流程中相關概念的詳細資訊,請參閱使用 Azure Machine Learning 來管理、部署及監視模型

必要條件

適用於:Azure CLI ml 延伸模組 v1

重要事項

本文中的 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

  • Azure Machine Learning 工作區。 如需詳細資訊,請參閱建立工作區資源
  • 模型。 本文中的範例會使用預先定型的模型。
  • 可以執行 Docker 的機器,例如計算執行個體

連線到您的工作區

適用於:Azure CLI ml 延伸模組 v1

若要查看您有權存取的工作區,請使用下列命令:

az login
az account set -s <subscription>
az ml workspace list --resource-group=<resource-group>

註冊模型

已部署機器學習服務的一般情況,就是您需要下列元件:

  • 代表您要部署的特定模型的資源 (例如:pytorch 模型檔案)。
  • 在服務中執行的程式代碼,並在指定的輸入上執行模型。

Azure Machine Learning 可讓您將部署區分成兩個不同的元件,而得以保留相同的程式碼,僅更新模型。 我們會定義將模型與程式代碼 分開 上傳為「註冊模型」的機制。

當您註冊模型時,我們會將模型上傳至雲端 (位於您工作區的預設儲存體帳戶中),然後將其掛接到 Web 服務執行所在的同一計算。

下列範例示範如何註冊模型。

重要事項

您應該只使用您建立或從信任來源取得的模型。 您應該將串行化模型視為程式代碼,因為許多熱門格式都發現了安全性弱點。 此外,模型可能會刻意以惡意意圖訓練,以提供偏差或不正確的輸出。

適用於:Azure CLI ml 延伸模組 v1

下列命令會下載模型,然後向您的 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 服務的資料,並將其傳遞給模型。 然後,其會將模型的回應傳回給用戶端。 腳本是您模型特有的。 輸入指令碼必須了解模型預期並傳回的資料。

您需要在輸入腳本中完成的兩個事項如下:

  1. 載入您的模型 (使用稱為 init() 的函數)
  2. 在輸入資料上執行模型 (使用稱為 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

適用於:Azure CLI ml 延伸模組 v1

最小推斷設定可以撰寫成:

{
    "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 服務所在的埠。

適用於:Azure CLI ml 延伸模組 v1

deploymentconfig.json 文件中的項目會對應至 LocalWebservice.deploy_configuration 的參數。 下表描述 JSON 文件中的實體之間的對應以及方法的參數:

JSON 實體 方法參數 描述
computeType 計算目標。 若為本機目標,該值必須為 local
port port 本機連接埠上公開服務的 HTTP 端點。

此 JSON 是與 CLI 搭配使用的範例部署設定:

{
    "computeType": "local",
    "port": 32267
}

將此 JSON 儲存為稱為 deploymentconfig.json 的檔案。

如需詳細資訊,請參閱部署結構描述

部署您的機器學習模型

您現在已準備好部署模型。

適用於:Azure CLI ml 延伸模組 v1

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>

呼叫您的模型

我們來檢查您的回應模型是否已成功部署。 您應該能夠執行活躍度要求,以及評分要求:

適用於:Azure CLI ml 延伸模組 v1

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 套件。

適用於:Azure CLI ml 延伸模組 v1

{
    "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

再次部署並呼叫您的服務

請重新部署您的服務:

適用於:Azure CLI ml 延伸模組 v1

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 要求傳送至服務:

適用於:Azure CLI ml 延伸模組 v1

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 容器執行個體:

適用於:Azure CLI ml 延伸模組 v1

部署設定的可用選項會根據您所選擇的計算目標而有所不同。

{
    "computeType": "aci",
    "containerResourceRequirements":
    {
        "cpu": 0.5,
        "memoryInGB": 1.0
    },
    "authEnabled": true,
    "sslEnabled": false,
    "appInsightsEnabled": false
}

將此檔案儲存為 re-deploymentconfig.json

如需詳細資訊,請參閱此參考

請重新部署您的服務:

適用於:Azure CLI ml 延伸模組 v1

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 服務的用戶端應用程式一文。

如何在工作室中設定電子郵件

若要開始在作業、線上端點或批次端點完成,或是發生問題 (失敗、已取消) 時接收電子郵件,請使用下列步驟:

  1. 在 Azure ML 工作室中,選取齒輪圖示來移至設定。
  2. 選取 [電子郵件通知] 索引標籤。
  3. 切換以啟用或停用特定事件的電子郵件通知。

[電子郵件通知] 索引標籤上 Azure ML 工作室設定的螢幕擷取畫面。

了解服務狀態

在模型部署期間,您可能會在其完全部署時看到服務狀態變更。

下表描述不同的服務狀態:

Web 服務狀態 描述 最終狀態?
轉換中 服務正在進行部署。
不健康 服務已部署,但目前無法連線。
無法排程 因為缺少資源,所以目前無法部署服務。
失敗 由於錯誤或損毀,服務無法部署。 是的
良好 服務狀況良好且端點可供使用。 是的

提示

部署時,會建置計算目標的 Docker 映像,並從 Azure Container Registry (ACR) 載入這些映像。 根據預設,Azure Machine Learning 會建立使用基本服務層級的 ACR。 將工作區的 ACR 變更為標準或進階層,可能會減少建置映像並將其載入至計算目標所需的時間。 如需詳細資訊,請參閱 Azure Container Registry 服務層級

附註

如果您要將模型部署至 Azure Kubernetes Service (AKS),建議您為該叢集啟用 Azure 監視器 。 這可協助您了解整體叢集健康情況和資源使用量。 下列資源可能也會有用處:

如果您嘗試將模型部署到狀況不良或多載的叢集,則預期會遇到問題。 如果您需要針對 AKS 叢集問題進行疑難解答的協助,請連絡 AKS 支援。

刪除資源

適用於:Azure CLI ml 延伸模組 v1

# 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>

深入閱讀刪除 Web 服務刪除模型

後續步驟