Поделиться через


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

В качестве первого шага для устранения неполадок при развертывании в службе "Экземпляры контейнеров 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 версии 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.

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

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