本地模型部署的疑難排解

嘗試本地模型部署,做為針對 Azure Container Instances (ACI) 或 Azure Kubernetes Service (AKS) 的部署進行疑難排解的第一步。 使用本地 Web 服務可讓您更輕鬆地找出並修正常見的 Azure Machine Learning Docker Web 服務部署錯誤。

必要條件

  • Azure 訂用帳戶。 試用免費或付費版本的 Azure Machine Learning
  • 選項 A (建議) - 在 Azure Machine Learning Compute 執行個體上進行本機偵錯
  • 選項 B - 在您的計算上進行本機偵錯
  • 選項 C - 使用 Azure Machine Learning 推斷 HTTP 伺服器啟用本機偵錯。
    • Azure Machine Learning 推斷 HTTP 伺服器 (預覽) 是 Python 套件,可讓您輕鬆在本機開發環境中驗證輸入指令碼 (score.py)。 如果評分指令碼有問題,伺服器會傳回錯誤。 伺服器也會傳回發生錯誤的位置。
    • 在持續整合和部署管線中建立驗證閘道時,也可以使用伺服器。 例如,使用候選的指令碼啟動伺服器,並針對本機端點執行測試套件。

Azure Machine Learning 推斷 HTTP 伺服器

本機推斷伺服器可讓您快速地對輸入指令碼 (score.py)進行偵錯。 如果基礎評分指令碼有 BUG,則伺服器無法初始化或處理模型。 相反地會擲回例外狀況和發生問題的位置。 深入了解 Azure Machine Learning 推斷 HTTP 伺服器

  1. pypi 摘要安裝 azureml-inference-server-http 套件:

    python -m pip install azureml-inference-server-http
    
  2. 啟動伺服器,並將 score.py 設定為輸入指令碼:

    azmlinfsrv --entry_script score.py
    
  3. 使用 curl,將評分要求傳送至伺服器:

    curl -p 127.0.0.1:5001/score
    

注意

了解 Azure 機器學習推斷 HTTP 伺服器的常見問題。

在本機執行偵錯

您可以在MachineLearningNotebooks 存放庫中尋找範例本地部署筆記本,以探索可執行的範例。

警告

針對生產案例,不支援本機 Web 服務部署。

若要在本機部署,請修改您的程式碼,以使用 LocalWebservice.deploy_configuration() 建立部署組態。 然後使用 Model.deploy() 來部署服務。 下列範例會將模型 (包含在模型變數中) 部署為本機 Web 服務:

適用於:Python SDK azureml 第 1 版

from azureml.core.environment import Environment
from azureml.core.model import InferenceConfig, Model
from azureml.core.webservice import LocalWebservice


# Create inference configuration based on the environment definition and the entry script
myenv = Environment.from_conda_specification(name="env", file_path="myenv.yml")
inference_config = InferenceConfig(entry_script="score.py", environment=myenv)
# Create a local deployment, using port 8890 for the web service endpoint
deployment_config = LocalWebservice.deploy_configuration(port=8890)
# Deploy the service
service = Model.deploy(
    ws, "mymodel", [model], inference_config, deployment_config)
# Wait for the deployment to complete
service.wait_for_deployment(True)
# Display the port that the web service is available on
print(service.port)

如果您要定義自己的 conda 規格 YAML,請列出 azureml-defaults 版本 >= 1.0.45 做為 pip 相依性。 需要此套件才能將模型裝載為 Web 服務。

此時,您可以照常使用服務。 下列程式碼示範如何將資料傳送至服務:

import json

test_sample = json.dumps({'data': [
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
    [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
]})

test_sample = bytes(test_sample, encoding='utf8')

prediction = service.run(input_data=test_sample)
print(prediction)

如需自訂 Python 環境的詳細資訊,請參閱建立和管理用於訓練和部署的環境

更新服務

在本機測試期間,您可能需要更新 score.py 檔案,以新增記錄或嘗試解決您發現的任何問題。 若要重新載入 score.py 檔案的變更,請使用 reload()。 例如,下列程式碼會重新載入服務的指令碼,然後將資料過去。 資料會使用更新後的 score.py 檔案進行評分:

重要

reload 方法僅可用於本機部署。 如需將部署更新至另一個計算目標,請參閱如何更新您的 webservice

service.reload()
print(service.run(input_data=test_sample))

注意

此指令碼會從服務所使用的 InferenceConfig 物件指定的位置重新載入。

若要變更模型、Conda 相依性或部署組態,請使用 update()。 下列範例會更新服務所使用的模型:

service.update([different_model], inference_config, deployment_config)

刪除服務

要刪除服務,請使用 delete()

檢查 Docker 記錄

您可以從服務物件中列印詳細的 Docker 引擎記錄訊息。 您可以檢視 ACI、AKS 和本機部署記錄。 下列範例示範如何列印記錄。

# if you already have the service object handy
print(service.get_logs())

# if you only know the name of the service (note there might be multiple services with the same name but different version number)
print(ws.webservices['mysvc'].get_logs())

如果您在記錄中看到行 Booting worker with pid: <pid> 出現多次,則表示沒有足夠的記憶體可啟動背景工作角色。 您可以藉由增加 deployment_config 的值 memory_gb,來處理錯誤

後續步驟

深入了解部署: