问题描述
我在 python 中有一个 ML 模型(在本地训练)。此前,该模型已部署到 Windows IIS 服务器,并且运行良好。
现在,我尝试将其作为服务部署在具有 1 个核心和 1 GB 内存的 Azure 容器实例 (ACI) 上。我参考了 one 和 two Microsoft 文档。文档的所有步骤都使用 SDK,但我使用的是 Azure 门户中的 GUI 功能。
注册模型后,我创建了一个入口脚本和一个 conda 环境 YAML 文件(见下文),并将两者上传到“自定义部署资产”(在部署模型区域)。
不幸的是,在点击 deploy 后,Deployment 状态卡在 Transitioning 状态。即使 4 小时后,状态仍然保持不变,也没有部署日志,所以我无法在这里找到我做错了什么。
注意:以下只是入口脚本的摘录
import pandas as pd
import pickle
import re,json
import numpy as np
import sklearn
def init():
global model
global classes
model_path = os.path.join(os.getenv('AZUREML_MODEL_DIR'),'randomForest50.pkl')
model = pickle.load(open(model_path,"rb"))
classes = lambda x : ["F","M"][x]
def run(data):
try:
namesList = json.loads(data)["data"]["names"]
pred = list(map(classes,model.predict(preprocessing(namesList))))
return str(pred[0])
except Exception as e:
error = str(e)
return error
name: gender_prediction
dependencies:
- python
- numpy
- scikit-learn
- pip:
- pandas
- pickle
- re
- json
解决方法
问题出在 YAML 文件中。 YAML 中的依赖项/库应根据 conda 环境。所以,我相应地改变了一切,并且奏效了。
修改后的 YAML 文件:
name: gender_prediction
dependencies:
- python=3.7
- numpy
- scikit-learn
- pip:
- azureml-defaults
- pandas
- pickle4
- regex
- inference-schema[numpy-support]