不健康的部署

问题描述

我将keras模型(在python中)部署到ML Azure。部署以不正常状态结束。这意味着什么? 我使用以下代码部署模型:

image_config = ContainerImage.image_configuration(execution_script='script.py',runtime='python',conda_file='config_conda.yml')

   aciconfig = AciWebservice.deploy_configuration(cpu_cores=1,memory_gb=1,description='')
   service = Webservice.deploy_from_model(workspace=ws,name=model_name,deployment_config=aciconfig,models=[model],image_config=image_config)
 
   service.wait_for_deployment(show_output=True) 

在config_conda.yml文件中,“ pip”部分和“ dependencies”部分之间有什么区别? 我在script.py中使用以下软件包:

import pandas as pd
   import numpy as np
   import string

   #scikit-learn
   from sklearn.metrics import roc_curve
   from sklearn.metrics import roc_auc_score
   from sklearn.model_selection import train_test_split
   from sklearn.feature_extraction.text import CountVectorizer
   from sklearn.linear_model import LogisticRegression
   from sklearn.model_selection import gridsearchcv
   from sklearn.preprocessing import LabelEncoder

   import nltk
   from nltk.corpus import stopwords
   from nltk.corpus import wordnet
   from nltk.stem import WordNetLemmatizer
   from nltk.stem.porter import Porterstemmer

   # Word2vec
   import gensim

   # Keras  
   from tensorflow import keras
   from keras import metrics
   from keras.models import Sequential
   from keras.layers import Dense
   from keras.layers import Dropout
   from keras.layers import Embedding
   from keras.layers import LSTM
   from keras.layers import GlobalMaxPool1D
   from keras import utils
   from keras.preprocessing.text import Tokenizer
   from keras.preprocessing.sequence import pad_sequences

   import multiprocessing 

解决方法

有关了解服务状态的信息,请参见https://docs.microsoft.com/en-us/azure/machine-learning/how-to-deploy-and-where?tabs=azcli#understanding-service-state

另请参见troubleshooting steps

“依赖项”将与conda install x一起安装,而“ pip”下列出的内容将与pip install x一起安装。尝试使用conda版本,因为它使用的预编译二进制文件不太可能引起问题。

,

根据我的经验,评分脚本或.yml文件(在您的情况下为script.py和config_conda.yml)出现问题时,端点最终处于不正常状态。您可以使用此命令查看日志,通常可以告诉您问题所在:

print(service.get_logs())

另一种调试方法是尝试首先将服务部署为LocalService:

myenv = Environment.from_conda_specification(name = "myenv",file_path = "config_conda.yml")

inference_config = InferenceConfig(entry_script = "script.py",environment = myenv)
deployment_config = LocalWebservice.deploy_configuration(port=6789)

local_service = Model.deploy(ws,"local-test",[model],inference_config,deployment_config)
local_service.wait_for_deployment(show_output = True)

这样,就可以打印出Docker容器构建过程的所有步骤(包括软件包安装)。完成后,您可以删除本地服务(local_service.delete())。

另外,您还可以使用Model.deploy而不是Webservice.deploy_from_model部署ACI Web服务(请参阅https://docs.microsoft.com/en-us/python/api/azureml-core/azureml.core.webservice(class)?view=azure-ml-py)。据我所知,通常速度更快