Устранение неполадок с помощью развертывания модели в локальной среде
В качестве первого шага для устранения неполадок при развертывании в службе "Экземпляры контейнеров Azure" (ACI) или службе Azure Kubernetes (AKS) используйте развертывание модели в локальной среде. Использование локальной веб-службы упрощает обнаружение и устранение распространенных ошибок при развертывании веб-службы Docker Машинного обучения Azure.
Необходимые компоненты
- Подписка Azure Попробуйте бесплатную или платную версию Машинного обучения Azure.
- Вариант A (рекомендуется) — локальная отладка в экземпляре вычислений Машинное обучение Azure
- Рабочая область машинного обучения Azure с работающим экземпляром вычислительной среды.
- Вариант B. Отладка локально на вычислительных ресурсах
- Пакет SDK для Машинного обучения Azure.
- Интерфейс командной строки Azure.
- Расширение CLI для Машинного обучения Azure.
- Вам необходима рабочая установка Docker в локальной системе.
- Чтобы проверить установку Docker, выполните команду
docker run hello-world
в терминале или командной строке. Сведения об установке Docker или устранении ошибок Docker см. в документации Docker.
- Вариант В — включение локальной отладки с помощью HTTP-сервера вывода службы Машинного обучения Azure.
- Машинное обучение Azure http-сервер вывода — это пакет Python, который позволяет легко проверить скрипт входа (
score.py
) в локальной среде разработки. Если возникла проблема со сценарием оценки, сервер вернет ошибку. Он также укажет место, где произошла ошибка. - Сервер также можно использовать при создании шлюзов проверки в конвейере непрерывной интеграции и развертывания. Например, запустите сервер с помощью потенциального сценария и запустите набор тестов для локальной конечной точки.
- Машинное обучение Azure http-сервер вывода — это пакет Python, который позволяет легко проверить скрипт входа (
HTTP-сервер вывода Машинного обучения Azure
Локальный сервер вывода позволяет быстро выполнить отладку начального сценария (score.py
). Если в базовом скрипте оценки есть ошибка, сервер не сможет инициализировать или обслуживать модель. Вместо этого возникает исключение с указанием места, в котором возникли проблемы. Подробнее об HTTP-сервере вывода Машинного обучения Azure
Установите пакет
azureml-inference-server-http
из веб-канала PyPI.python -m pip install azureml-inference-server-http
Запустите сервер и укажите
score.py
в качестве начального сценария:azmlinfsrv --entry_script score.py
Отправьте запрос оценки на сервер с помощью команды
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
.
Следующие шаги
Дополнительные сведения о развертывании см. в статьях, представленных ниже.