Не удается развернуть обученную модель в существующей цели вычисления AKS - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть модель, которая прошла обучение на компьютере по машинному обучению в службе машинного обучения Azure.Зарегистрированная модель уже живет в моей рабочей области, и я хотел бы развернуть ее на уже существующем экземпляре AKS, который я ранее подготовил в своей рабочей области.Я могу успешно настроить и зарегистрировать образ контейнера:

# retrieve cloud representations of the models
rf = Model(workspace=ws, name='pumps_rf')
le = Model(workspace=ws, name='pumps_le')
ohc = Model(workspace=ws, name='pumps_ohc')
print(rf); print(le); print(ohc)

<azureml.core.model.Model object at 0x7f66ab3b1f98>
<azureml.core.model.Model object at 0x7f66ab7e49b0>
<azureml.core.model.Model object at 0x7f66ab85e710>

package_list = [
  'category-encoders==1.3.0',
  'numpy==1.15.0',
  'pandas==0.24.1',
  'scikit-learn==0.20.2']

# Conda environment configuration
myenv = CondaDependencies.create(pip_packages=package_list)
conda_yml = 'file:'+os.getcwd()+'/myenv.yml'

with open(conda_yml,"w") as f:
    f.write(myenv.serialize_to_string())

Настройка и регистрация изображения работает:

# Image configuration
image_config = ContainerImage.image_configuration(execution_script='score.py', 
                                                  runtime='python', 
                                                  conda_file='myenv.yml',
                                                  description='Pumps Random Forest model')


# Register the image from the image configuration
# to Azure Container Registry
image = ContainerImage.create(name = Config.IMAGE_NAME, 
                              models = [rf, le, ohc],
                              image_config = image_config,
                              workspace = ws)

Creating image
Running....................
SucceededImage creation operation finished for image pumpsrfimage:2, operation "Succeeded"

Подключение к существующему кластеру также работает:

# Attach the cluster to your workgroup
attach_config = AksCompute.attach_configuration(resource_group = Config.RESOURCE_GROUP,
                                                cluster_name = Config.DEPLOY_COMPUTE)
aks_target = ComputeTarget.attach(workspace=ws, 
                                  name=Config.DEPLOY_COMPUTE, 
                                  attach_configuration=attach_config)

# Wait for the operation to complete
aks_target.wait_for_completion(True)
SucceededProvisioning operation finished, operation "Succeeded"

Однако, когда я пытаюсь развернуть образ в существующем кластере, он завершается ошибкой с WebserviceException.

# Set configuration and service name
aks_config = AksWebservice.deploy_configuration()

# Deploy from image
service = Webservice.deploy_from_image(workspace = ws,
                                       name = 'pumps-aks-service-1' ,
                                       image = image,
                                       deployment_config = aks_config,
                                       deployment_target = aks_target)
# Wait for the deployment to complete
service.wait_for_deployment(show_output = True)
print(service.state)

WebserviceException: Unable to create service with image pumpsrfimage:1 in non "Succeeded" creation state.
---------------------------------------------------------------------------
WebserviceException                       Traceback (most recent call last)
<command-201219424688503> in <module>()
      7                                        image = image,
      8                                        deployment_config = aks_config,
----> 9                                        deployment_target = aks_target)
     10 # Wait for the deployment to complete
     11 service.wait_for_deployment(show_output = True)

/databricks/python/lib/python3.5/site-packages/azureml/core/webservice/webservice.py in deploy_from_image(workspace, name, image, deployment_config, deployment_target)
    284                         return child._deploy(workspace, name, image, deployment_config, deployment_target)
    285 
--> 286         return deployment_config._webservice_type._deploy(workspace, name, image, deployment_config, deployment_target)
    287 
    288     @staticmethod

/databricks/python/lib/python3.5/site-packages/azureml/core/webservice/aks.py in _deploy(workspace, name, image, deployment_config, deployment_target)

Есть идеи, как решить эту проблему?Я пишу код в блокноте Databricks.Кроме того, я могу без проблем создавать и развертывать кластер с помощью портала Azure, поэтому, похоже, это проблема с моим кодом / Python SDK или с тем, как Databricks работает с AMLS.

ОБНОВЛЕНИЕ: я смог развернутьмой образ для AKS с использованием портала Azure и веб-службы работает, как ожидалось.Это означает, что проблема лежит где-то между Databricks, Azureml Python SDK и Службой машинного обучения.

ОБНОВЛЕНИЕ 2: Я работаю с Microsoft, чтобы решить эту проблему.Мы сообщим вам, как только мы найдем решение.

Ответы [ 3 ]

0 голосов
/ 04 марта 2019

Договорились об ответе Арвида.Вы смогли успешно запустить его?Вы также можете попробовать и развернуть его в ACI, но если проблема в файле Score.py, у вас возникнет та же проблема, но попробовать быстро.Кроме того, это немного более болезненно, но если вы хотите отладить развертывание, но вы можете выставить порт tcp 5678 на локальном развертывании док-станции и использовать VSCode и PTVSD для подключения к нему и пошаговой отладки.

0 голосов
/ 07 марта 2019

В моем исходном коде при создании изображения я не использовал:

image.wait_for_creation(show_output=True)

Как следствие, я вызывал CreateImage и DeployImage до того, как было создано изображение, из-за которого произошла ошибка.Не могу поверить, что это было так просто ..

ОБНОВЛЕНО SNIPPET СОЗДАНИЯ ИЗОБРАЖЕНИЯ:

# Register the image from the image configuration
# to Azure Container Registry
image = ContainerImage.create(name = Config.IMAGE_NAME, 
                              models = [rf, le, ohc],
                              image_config = image_config,
                              workspace = ws)

image.wait_for_creation(show_output=True)
0 голосов
/ 21 февраля 2019

Из личного опыта я бы сказал, что сообщение об ошибке, которое вы видите, может указывать на наличие ошибки в скрипте внутри изображения.Такие ошибки не обязательно препятствуют успешному созданию изображения, но могут помешать его использованию в службе.Однако, если вы успешно смогли развернуть образ в других службах, вы должны исключить эту опцию.

Вы можете следовать этому руководству для получения дополнительной информации о том, каклокальная отладка образа Docker, а также поиск журналов и другой полезной информации.

...