Как получить доступ ко всем зарегистрированным моделям при развертывании модели машинного обучения в экземпляре контейнера Azure?

Я создал конвейер непрерывной интеграции / развертывания в Azure DevOps для обучения и развертывания модели машинного обучения в производственной среде. Он использует службы машинного обучения Azure на Python, чтобы настроить все, то есть обучить модель, зарегистрировать ее в рабочей области машинного обучения и развернуть как веб-службу. Одно из требований состоит в том, что мне нужно использовать несколько моделей в развернутом веб-сервисе. Нет проблем с включением моделей в развернутый веб-сервис при просмотре рабочей области с портала Azure. Моя проблема заключается в том, что я не знаю, как получить к ним доступ, не зная названия моделей.

Что обычно происходит, выглядит так: 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.

То, что я хотел бы использовать, будет выглядеть примерно так (но это дает ошибку, поскольку я не могу перечислить модели). 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


person Tomas Bergvall    schedule 03.07.2019    source источник


Ответы (1)


Мой текущий подход заключается в навигации по структуре каталогов, предоставляемой Azure в образе Docker, созданном конвейером выпуска.

    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)

Сообщите мне, если найдете лучшее решение.

person Tomas Bergvall    schedule 04.07.2019