Azure ML: как получить доступ к журналам неудачного развертывания модели - PullRequest
1 голос
/ 08 мая 2020

Я развертываю модель Keras, которая выдает ошибку, указанную ниже. Исключение говорит о том, что я могу получить журналы, запустив print (service.get_logs ()), но это дает мне пустые результаты. Я развертываю модель из своего ноутбука Azure и использую ту же «служебную» переменную для получения журналов.

Кроме того, как я могу получить журналы из экземпляра контейнера? Я выполняю развертывание в созданном мной вычислительном кластере AKS. К сожалению, ссылка на документы в исключении также не содержит подробных сведений о том, как получить эти журналы.

More information can be found using '.get_logs()' Error: 
{   "code":
"KubernetesDeploymentFailed",   "statusCode": 400,   "message":
"Kubernetes Deployment failed",   "details": [
    {
      "code": "CrashLoopBackOff",
      "message": "Your container application crashed. This may be caused by errors in your scoring file's init() function.\nPlease check
the logs for your container instance: my-model-service. From
the AML SDK, you can run print(service.get_logs()) if you have service
object to fetch the logs. \nYou can also try to run image
mlwks.azurecr.io/azureml/azureml_3c0c34b65cf18c8644e8d745943ab7d2:latest
locally. Please refer to http://aka.ms/debugimage#service-launch-fails
for more information."
    }   ] }

ОБНОВЛЕНИЕ

Вот мой код для развертывания модели:

environment = Environment('my-environment')
environment.python.conda_dependencies = CondaDependencies.create(pip_packages=["azureml-defaults","azureml-dataprep[pandas,fuse]","tensorflow", "keras", "matplotlib"])
service_name = 'my-model-service'

# Remove any existing service under the same name.
try:
    Webservice(ws, service_name).delete()
except WebserviceException:
    pass

inference_config = InferenceConfig(entry_script='score.py', environment=environment)
comp = ComputeTarget(workspace=ws, name="ml-inference-dev")
service = Model.deploy(workspace=ws,
                       name=service_name,
                       models=[model],
                       inference_config=inference_config,
                       deployment_target=comp 
                      )
service.wait_for_deployment(show_output=True)

И мой score.py

import joblib
import numpy as np
import os

import keras

from keras.models import load_model
from inference_schema.schema_decorators import input_schema, output_schema
from inference_schema.parameter_types.numpy_parameter_type import NumpyParameterType


def init():
    global model

    model_path = Model.get_model_path('model.h5')
    model = load_model(model_path)
    model = keras.models.load_model(model_path)


# The run() method is called each time a request is made to the scoring API.
#
# Shown here are the optional input_schema and output_schema decorators
# from the inference-schema pip package. Using these decorators on your
# run() method parses and validates the incoming payload against
# the example input you provide here. This will also generate a Swagger
# API document for your web service.
@input_schema('data', NumpyParameterType(np.array([[0.1, 1.2, 2.3, 3.4, 4.5, 5.6, 6.7, 7.8, 8.9, 9.0]])))
@output_schema(NumpyParameterType(np.array([4429.929236457418])))
def run(data):

    return [123] #test

Обновление 2:

Вот скриншот страницы конечной точки. Нормально ли для ЦП быть .1? Кроме того, когда я нажимаю URL-адрес swagger в браузере, я получаю сообщение об ошибке: «Нет готовых реплик для службы do c -classify-env-service»

enter image description here

Обновление 3 После того, как наконец добрались до журналов контейнера, оказалось, что он задыхался от этой ошибки на моем счете. Py

ModuleNotFoundError: Нет названного модуля 'inference_schema'

Затем я запустил тест, который закомментировал ссылки для «input_schema» и «output_schema», а также упростил мои pip_packages и конечную точку REST! Я также смог сделать прогноз на основе модели.

pip_packages=["azureml-defaults","tensorflow", "keras"])

Итак, мой вопрос: как мне получить мои pip_packages для файла скоринга, чтобы использовать декораторы inference_schema? Я предполагаю, что мне нужно включить пакет pip azureml-sdk [auotml], но когда я это сделаю, создание образа не удастся, и я вижу несколько конфликтов зависимостей.

1 Ответ

2 голосов
/ 08 мая 2020

Попробуйте получить службу напрямую из рабочей области

ws.webservices[service_name].get_logs()

Кроме того, я обнаружил, что развертывание образа в качестве конечной точки проще, чем модель вывода + развертывания (в зависимости от вашего варианта использования)

my_image = Image(ws, name='test', version='26')  
service = AksWebservice.deploy_from_image(ws, "test1", my_image, deployment_config, aks_target)
...