本地模型部署的疑難排解
嘗試本地模型部署,做為針對 Azure Container Instances (ACI) 或 Azure Kubernetes Service (AKS) 的部署進行疑難排解的第一步。 使用本地 Web 服務可讓您更輕鬆地找出並修正常見的 Azure Machine Learning Docker Web 服務部署錯誤。
必要條件
- Azure 訂用帳戶。 試用免費或付費版本的 Azure Machine Learning。
- 選項 A (建議) - 在 Azure Machine Learning Compute 執行個體上進行本機偵錯
- 具有執行中計算執行個體的 Azure Machine Learning 工作區
- 選項 B - 在您的計算上進行本機偵錯
- Azure Machine Learning SDK。
- Azure CLI。
- 適用於 Azure Machine Learning 的 CLI 擴充功能。
- 在您的本機系統上具有運作中的 Docker 安裝。
- 若要驗證您的 Docker 安裝,請從終端或命令提示字元使用命令
docker run hello-world
。 如需有關安裝 Docker 或針對 Docker 錯誤進行疑難排解的資訊,請參閱 Docker 文件。
- 選項 C - 使用 Azure Machine Learning 推斷 HTTP 伺服器啟用本機偵錯。
- Azure Machine Learning 推斷 HTTP 伺服器是 Python 套件,可讓您輕鬆在本機開發環境中驗證您的輸入腳本 (
score.py
)。 如果評分指令碼有問題,伺服器會傳回錯誤。 伺服器也會傳回發生錯誤的位置。 - 在持續整合和部署管線中建立驗證閘道時,也可以使用伺服器。 例如,使用候選的指令碼啟動伺服器,並針對本機端點執行測試套件。
- Azure Machine Learning 推斷 HTTP 伺服器是 Python 套件,可讓您輕鬆在本機開發環境中驗證您的輸入腳本 (
Azure Machine Learning 推斷 HTTP 伺服器
本機推斷伺服器可讓您快速地對輸入指令碼 (score.py
)進行偵錯。 如果基礎分數指令碼有錯誤 (bug),伺服器將無法初始化或提供模型。 相反地會擲回例外狀況和發生問題的位置。 深入了解 Azure Machine Learning 推斷 HTTP 伺服器
從 pypi 摘要安裝
azureml-inference-server-http
套件:python -m pip install azureml-inference-server-http
啟動伺服器,並將
score.py
設定為輸入指令碼:azmlinfsrv --entry_script score.py
使用
curl
,將評分要求傳送至伺服器:curl -p 127.0.0.1:5001/score
注意
了解常見問題:有關 Azure 機器學習推斷 HTTP 伺服器。
在本機執行偵錯
您可以在MachineLearningNotebooks 存放庫中尋找範例本地部署筆記本,以探索可執行的範例。
警告
針對生產案例,不支援本機 Web 服務部署。
若要在本機部署,請修改您的程式碼,以使用 LocalWebservice.deploy_configuration()
建立部署組態。 然後使用 Model.deploy()
來部署服務。 下列範例會將模型 (包含在模型變數中) 部署為本機 Web 服務:
適用於: Python SDK azureml v1 (部分機器翻譯)
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
,來處理錯誤
下一步
深入了解部署: