Мониторинг и сбор данных из конечных точек веб-службы Машинного обучения
ОБЛАСТЬ ПРИМЕНЕНИЯ: Пакет SDK для Python версии 1
Из этой статьи вы узнаете, как собирать данные из моделей, развернутых в конечных точках веб-службы в Службе Azure Kubernetes (AKS) или в Экземплярах контейнеров Azure (ACI). Используйте Azure Application Insights, чтобы получить из конечной точки следующие данные:
- Выходные данные
- Ответы
- Частоты запросов, времени отклика и частоты сбоев.
- Частоты зависимостей, времени отклика и частоты сбоев.
- Исключения
В записной книжке enable-app-insights-in-production-service.ipynb демонстрируются основные концепции, описанные в этой статье.
Узнайте, как запускать записные книжки, следуя указаниям из статьи Использование записных книжек Jupyter в Машинном обучении Azure.
Внимание
Сведения в этой статье зависят от экземпляра Azure Application Insights, созданного в рабочей области. если вы удалили этот Application Insights экземпляр, не существует способа повторно создать его, кроме удаления и создания рабочей области.
Совет
Если вместо этого вы используете подключенные конечные точки, используйте сведения в статье Мониторинг подключенных конечных точек.
Необходимые компоненты
Подписка Azure, например бесплатная или платная версия Машинного обучения Azure.
Должны быть установлены рабочая область машинного обучения Azure, локальный каталог со скриптами и пакет SDK машинного обучения Azure для Python. Дополнительные сведения см. в статье Настройка среды разработки Python для Машинного обучения Azure.
Обученная модель машинного обучения. Дополнительные сведения см. в учебнике Обучение модели классификации изображений с помощью примера Jupyter Notebook.
Настройка ведения журнала с помощью пакета SDK для Python
В этом разделе описывается, как включить ведение журнала Application Insights с помощью пакета SDK для Python.
Обновление развернутой службы
Чтобы обновить существующую веб-службу, выполните следующие действия:
Найдите службу в рабочей области. Значение
ws
содержит имя рабочей области.from azureml.core.webservice import Webservice aks_service= Webservice(ws, "my-service-name")
Обновите службу и включите Azure Application Insights.
aks_service.update(enable_app_insights=True)
Трассировка пользовательских журналов в службе
Внимание
Azure Application Insights записывает в журнал только полезные данные размером не более 64 КБ. Достижение этого предела может привести к ошибкам, сообщениям о нехватке памяти или отсутствию записей в журнале. Если заносимые в журнал данные превышают размер 64 КБ, следует сохранить их в хранилище BLOB-объектов по инструкциям из статьи Сбор данных для моделей в рабочей среде.
Для более сложных ситуаций, например для отслеживания моделей в развертывании AKS, мы рекомендуем использовать сторонние библиотеки, например OpenCensus.
Чтобы вести журнал пользовательских трассировок, выполните инструкции из руководства по стандартному процессу развертывания для AKS или ACI, представленные в документе Развертывание моделей машинного обучения в Azure. После этого выполните следующие действия:
Обновите файл оценки, добавив инструкции print для отправки данных в Application Insights в процессе вывода. Для получения более сложной информации, например данных из запросов и ответов, используйте структуру JSON.
Следующий пример файла
score.py
записывает в журнал сообщения об инициализации модели, входные и выходные данные процесса вывода, а также любые ошибки.import pickle import json import numpy from sklearn.externals import joblib from sklearn.linear_model import Ridge from azureml.core.model import Model import time def init(): global model #Print statement for appinsights custom traces: print ("model initialized" + time.strftime("%H:%M:%S")) # note here "sklearn_regression_model.pkl" is the name of the model registered under the workspace # this call should return the path to the model.pkl file on the local disk. model_path = Model.get_model_path(model_name = 'sklearn_regression_model.pkl') # deserialize the model file back into a sklearn model model = joblib.load(model_path) # note you can pass in multiple rows for scoring def run(raw_data): try: data = json.loads(raw_data)['data'] data = numpy.array(data) result = model.predict(data) # Log the input and output data to appinsights: info = { "input": raw_data, "output": result.tolist() } print(json.dumps(info)) # you can return any datatype as long as it is JSON-serializable return result.tolist() except Exception as e: error = str(e) print (error + time.strftime("%H:%M:%S")) return error
Обновите конфигурацию службы и включите Application Insights.
config = Webservice.deploy_configuration(enable_app_insights=True)
Создайте образ и разверните его в AKS или ACI. Дополнительные сведения см. в статье Развертывание моделей с помощью Службы машинного обучения Azure.
Отключение наблюдения в Python
Чтобы отключить Azure Application Insights, используйте следующий код:
## replace <service_name> with the name of the web service
<service_name>.update(enable_app_insights=False)
Настройка ведения журналов в Студии машинного обучения Azure
Также вы можете включить Azure Application Insights из Студии машинного обучения Azure. Когда все будет готово для развертывания модели в формате веб-службы, выполните следующий процесс включения Application Insights:
Войдите в Студию по адресу https://ml.azure.com.
Перейдите к пункту Модели и выберите модель, которую требуется развернуть.
Выберите +Развернуть.
Заполните форму Развернуть модель.
Разверните меню Дополнительно.
Щелкните Включить сбор данных и диагностику Application Insights.
Просмотр метрик и журналов
Запросы по журналам развернутых моделей
Журналы подключенных конечных точек — это клиентские данные. Чтобы получить журналы из ранее развернутой веб-службы, используйте функцию get_logs()
. Эти журналы могут содержать подробные сведения об ошибках, возникающих во время развертывания.
from azureml.core import Workspace
from azureml.core.webservice import Webservice
ws = Workspace.from_config()
# load existing web service
service = Webservice(name="service-name", workspace=ws)
logs = service.get_logs()
Если у вас несколько клиентов, вам может потребоваться добавить следующий код проверки подлинности перед добавлением следующего кода проверки подлинности. ws = Workspace.from_config()
from azureml.core.authentication import InteractiveLoginAuthentication
interactive_auth = InteractiveLoginAuthentication(tenant_id="the tenant_id in which your workspace resides")
Просмотр журналов в студии
Azure Application Insights хранит журналы службы в той же группе ресурсов, что и рабочая область Машинного обучения Azure. Следующий процесс позволяет просмотреть эти данные в интерфейсе студии:
В Студии машинного обучения Azure перейдите к рабочей области Машинного обучения Azure.
Выберите Конечные точки.
Выберите развернутую службу.
Щелкните ссылку на Application Insights.
В Application Insights на вкладке Обзор или в разделе Мониторинг выберите элемент Журналы.
Чтобы просмотреть данные, сохраненные в журнал из файла score.py, откройте таблицу traces. Следующий запрос выполняет поиск по журналам строки со значением input:
traces | where customDimensions contains "input" | limit 10
Дополнительные сведения об использовании Azure Application Insights см. в статье Что такое Application Insights?
Метаданные веб-службы и данные ответа
Внимание
Azure Application Insights записывает в журнал только полезные данные размером не более 64 КБ. Достижение этого предела может привести к ошибкам, сообщениям о нехватке памяти или отсутствию записей в журнале.
Чтобы записать сведения о запросе веб-службы, добавьте инструкции print
в файл score.py. Каждая инструкция print
создает одну запись в таблице трассировки Application Insights под сообщением STDOUT
. Application Insights сохраняет выходные данные инструкции print
в customDimensions
и в таблице трассировки Contents
. Вывод строк JSON создает иерархическую структуру данных в выходных данных трассировки в разделе Contents
.
Экспорт данных для хранения и обработки
Внимание
Application Insights Azure поддерживает только экспорты в хранилище BLOB-объектов. Дополнительные сведения об ограничениях этой реализации см. в статье Экспорт данных телеметрии из Application Insights.
В Application Insights используйте возможность непрерывного экспорта, чтобы экспортировать данные в учетную запись хранения BLOB-объектов, для которой можно определить параметры хранения. Application Insights экспортирует данные в формате JSON.
Следующие шаги
В этой статье вы узнали, как включить ведение журнала и как просматривать журналы для конечных точек веб-службы. Теперь переходите к действиям, которые описаны в следующих статьях:
Подробные сведения об использовании данных, собираемых из моделей в рабочей среде, см. в статье MLOps: управление моделями, развертывание и мониторинг с помощью Машинного обучения Azure. Эти данные помогут вам постепенно улучшать процессы машинного обучения.