在 Azure 容器实例中部署机器学习模型时如何访问所有已注册的模型?

Posted

技术标签:

【中文标题】在 Azure 容器实例中部署机器学习模型时如何访问所有已注册的模型?【英文标题】:How to access all registered models when deploying a machine learning model in an Azure Container Instance? 【发布时间】:2019-11-14 02:15:26 【问题描述】:

我在 Azure DevOps 中构建了一个持续集成/部署管道,用于训练机器学习模型并将其部署到生产环境中。它使用 Python 中的 Azure 机器学习服务来设置一切,即训练模型、将其注册到机器学习工作区并将其部署为 Web 服务。一个要求是我需要在部署的 web 服务中使用多个模型。从 Azure 门户查看工作区时,将模型包含在已部署的 Web 服务中没有问题。我的问题在于我不知道如何在不知道模型名称的情况下访问它们。

通常情况如下所示: score.py

from azureml.core.model import Model
from sklearn.externals import joblib
import pandas
def init():
   global model
   model_path = Model.get_model_path('model_name')
   model = joblib.load(model_path)
def run(raw_data):
   data = pandas.DataFrame(json.loads(raw_data)['Inputs'])
   return do_prediction(data) # Use the model to make prediction

然后我还有一个 python 脚本,它创建一个包含所有需要模型的图像并将其部署为 Azure 中的 Web 服务。

我想使用的东西看起来像这样(但它给出了一个错误,因为我无法列出模型)。 score.py

from azureml.core.model import Model
from sklearn.externals import joblib
import pandas
def init():
   model_list = []
   models = Model.list() # Gives an error since no workspace is provided.
   for model in models:
      model_list.append(joblib.load(model.name))
def run(raw_data):
   data = pandas.DataFrame(json.loads(raw_data)['Inputs'])
   return do_prediction(data) # Use the model to make prediction

【问题讨论】:

【参考方案1】:

我目前的做法是在发布管道创建的 Docker 映像中导航 Azure 提供的目录结构。

    root_dir = './azureml-models'
    for model_name in os.listdir(root_dir):
        for model_version in os.listdir(os.path.join(root_dir, model_name) ):
            model_path = Model.get_model_path(model_name, version = int(model_version))
            model = joblib.load(model_path)

如果您找到更好的解决方案,请告诉我。

【讨论】:

以上是关于在 Azure 容器实例中部署机器学习模型时如何访问所有已注册的模型?的主要内容,如果未能解决你的问题,请参考以下文章

ML.NET机器学习API容器化与Azure DevOps实践:RESTful API

机器学习模型python在线服务部署的两种实例

ML.NET机器学习API容器化与Azure DevOps实践:持续集成与k8s持续部署

如何将 MarkLogic docker hub 映像部署到 Azure 容器实例 ACI

在 AzureML 中部署模型时如何将参数传递给评分文件

如何使用 TeamCity 在 Azure Service Fabric 中自动部署 Docker 容器?