Устранение неполадок с помощью развертывания модели в локальной среде

В качестве первого шага для устранения неполадок при развертывании в службе "Экземпляры контейнеров Azure" (ACI) или службе Azure Kubernetes (AKS) используйте развертывание модели в локальной среде. Использование локальной веб-службы упрощает обнаружение и устранение распространенных ошибок при развертывании веб-службы Docker Машинного обучения Azure.

Необходимые компоненты

  • Подписка Azure Попробуйте бесплатную или платную версию Машинного обучения Azure.
  • Вариант A (рекомендуется) — локальная отладка в экземпляре вычислений Машинное обучение Azure
  • Вариант B. Отладка локально на вычислительных ресурсах
  • Вариант В — включение локальной отладки с помощью HTTP-сервера вывода службы Машинного обучения Azure.
    • Машинное обучение Azure http-сервер вывода — это пакет Python, который позволяет легко проверить скрипт входа (score.py) в локальной среде разработки. Если возникла проблема со сценарием оценки, сервер вернет ошибку. Он также укажет место, где произошла ошибка.
    • Сервер также можно использовать при создании шлюзов проверки в конвейере непрерывной интеграции и развертывания. Например, запустите сервер с помощью потенциального сценария и запустите набор тестов для локальной конечной точки.

HTTP-сервер вывода Машинного обучения Azure

Локальный сервер вывода позволяет быстро выполнить отладку начального сценария (score.py). Если в базовом скрипте оценки есть ошибка, сервер не сможет инициализировать или обслуживать модель. Вместо этого возникает исключение с указанием места, в котором возникли проблемы. Подробнее об HTTP-сервере вывода Машинного обучения Azure

  1. Установите пакет azureml-inference-server-http из веб-канала PyPI.

    python -m pip install azureml-inference-server-http
    
  2. Запустите сервер и укажите score.py в качестве начального сценария:

    azmlinfsrv --entry_script score.py
    
  3. Отправьте запрос оценки на сервер с помощью команды curl.

    curl -p 127.0.0.1:5001/score
    

Примечание.

Изучите часто задаваемые вопросы о HTTP-сервере вывода машинного обучения Azure.

Отладка в локальной среде

В репозитории MachineLearningNotebooks есть записная книжка для локального развертывания, которую можно использовать для изучения готового к запуску примера.

Предупреждение

Развертывания локальных веб-служб не поддерживаются для рабочих сред.

Для развертывания в локальной среде измените код, чтобы использовать LocalWebservice.deploy_configuration() для создания конфигурации развертывания. Затем используйте Model.deploy() для развертывания службы. В следующем примере модель (содержащаяся в переменной моделей) развертывается как локальная веб-служба:

ОБЛАСТЬ ПРИМЕНЕНИЯ:Пакет SDK для Python для ML Azure версии 1

from azureml.core.environment import Environment
from azureml.core.model import InferenceConfig, Model
from azureml.core.webservice import LocalWebservice


# Create inference configuration based on the environment definition and the entry script
myenv = Environment.from_conda_specification(name="env", file_path="myenv.yml")
inference_config = InferenceConfig(entry_script="score.py", environment=myenv)
# Create a local deployment, using port 8890 for the web service endpoint
deployment_config = LocalWebservice.deploy_configuration(port=8890)
# Deploy the service
service = Model.deploy(
    ws, "mymodel", [model], inference_config, deployment_config)
# Wait for the deployment to complete
service.wait_for_deployment(True)
# Display the port that the web service is available on
print(service.port)

При определении собственной спецификации conda в формате YAML составьте список azureml-defaults с версией > 1.0.45 или более поздней в качестве зависимости pip. Этот пакет необходим для размещения модели в качестве веб-службы.

На этом этапе вы можете использовать службу обычным образом. Следующий код демонстрирует отправку данных в службу:

import json

test_sample = json.dumps({'data': [
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
    [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
]})

test_sample = bytes(test_sample, encoding='utf8')

prediction = service.run(input_data=test_sample)
print(prediction)

Дополнительные сведения о настройке среды Python см. на этой странице.

Обновление службы

Во время локального тестирования, возможно, нужно будет обновить файл score.py, чтобы добавить ведение журнала или попытаться решить любые обнаруженные проблемы. Чтобы перезагрузить изменения в файл score.py, используйте reload(). Например, следующий код перезагружает сценарий для службы, а затем отправляет в нее данные. Данные оцениваются с помощью обновленного файла score.py:

Важно!

Метод reload доступен лишь для локальных развертываний. Сведения об обновлении развернутой веб-службы в другом целевом объекте вычислений см. в этой статье.

service.reload()
print(service.run(input_data=test_sample))

Примечание.

Сценарий перезагружается из расположения, указанного объектом InferenceConfig, используемым службой.

Чтобы изменить модель, зависимости Conda или конфигурацию развертывания, используйте метод update(). В следующем примере обновляется модель, используемая службой:

service.update([different_model], inference_config, deployment_config)

Удаление службы

Чтобы удалить службу, воспользуйтесь методом delete().

Проверка журнала Docker

Можно распечатать подробные сообщения журнала ядра Docker из объекта службы. Вы можете просмотреть журнал для ACI, AKS и локальных развертываний. В следующем примере показано, как вывести данные журналов.

# if you already have the service object handy
print(service.get_logs())

# if you only know the name of the service (note there might be multiple services with the same name but different version number)
print(ws.webservices['mysvc'].get_logs())

Если в журналах несколько раз встречается строка Booting worker with pid: <pid>, то для запуска рабочей роли недостаточно памяти. Эту ошибку можно устранить, увеличив значение memory_gb в deployment_config.

Следующие шаги

Дополнительные сведения о развертывании см. в статьях, представленных ниже.