Мониторинг и сбор данных из конечных точек веб-службы Машинного обучения

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

Из этой статьи вы узнаете, как собирать данные из моделей, развернутых в конечных точках веб-службы в Службе Azure Kubernetes (AKS) или в Экземплярах контейнеров Azure (ACI). Используйте Azure Application Insights, чтобы получить из конечной точки следующие данные:

  • Выходные данные
  • Ответы
  • Частоты запросов, времени отклика и частоты сбоев.
  • Частоты зависимостей, времени отклика и частоты сбоев.
  • Исключения

В записной книжке enable-app-insights-in-production-service.ipynb демонстрируются основные концепции, описанные в этой статье.

Узнайте, как запускать записные книжки, следуя указаниям из статьи Использование записных книжек Jupyter в Машинном обучении Azure.

Важно!

Сведения в этой статье зависят от экземпляра Azure Application Insights, созданного в рабочей области. если вы удалили этот Application Insights экземпляр, не существует способа повторно создать его, кроме удаления и создания рабочей области.

Совет

Если вместо этого вы используете подключенные конечные точки, используйте сведения в статье Мониторинг подключенных конечных точек.

Предварительные требования

Настройка ведения журнала с помощью пакета SDK для Python

В этом разделе описывается, как включить ведение журнала Application Insights с помощью пакета SDK для Python.

Обновление развернутой службы

Чтобы обновить существующую веб-службу, выполните следующие действия:

  1. Найдите службу в рабочей области. Значение ws содержит имя рабочей области.

    from azureml.core.webservice import Webservice
    aks_service= Webservice(ws, "my-service-name")
    
  2. Обновите службу и включите Azure Application Insights.

    aks_service.update(enable_app_insights=True)
    

Трассировка пользовательских журналов в службе

Важно!

Azure Application Insights записывает в журнал только полезные данные размером не более 64 КБ. Достижение этого предела может привести к ошибкам, сообщениям о нехватке памяти или отсутствию записей в журнале. Если заносимые в журнал данные превышают размер 64 КБ, следует сохранить их в хранилище BLOB-объектов по инструкциям из статьи Сбор данных для моделей в рабочей среде.

Для более сложных ситуаций, например для отслеживания моделей в развертывании AKS, мы рекомендуем использовать сторонние библиотеки, например OpenCensus.

Чтобы вести журнал пользовательских трассировок, выполните инструкции из руководства по стандартному процессу развертывания для AKS или ACI, представленные в документе Развертывание моделей машинного обучения в Azure. После этого выполните следующие действия:

  1. Обновите файл оценки, добавив инструкции 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
    
  2. Обновите конфигурацию службы и включите Application Insights.

    config = Webservice.deploy_configuration(enable_app_insights=True)
    
  3. Создайте образ и разверните его в 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:

  1. Войдите в Студию по адресу https://ml.azure.com.

  2. Перейдите к пункту Модели и выберите модель, которую требуется развернуть.

  3. Выберите +Развернуть.

  4. Заполните форму Развернуть модель.

  5. Разверните меню Дополнительно.

    Форма развертывания

  6. Щелкните Включить сбор данных и диагностику Application Insights.

    Включение 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. Следующий процесс позволяет просмотреть эти данные в интерфейсе студии:

  1. В Студии машинного обучения Azure перейдите к рабочей области Машинного обучения Azure.

  2. Выберите Конечные точки.

  3. Выберите развернутую службу.

  4. Щелкните ссылку на Application Insights.

    Расположение URL-адреса Application Insights

  5. В Application Insights на вкладке Обзор или в разделе Мониторинг выберите элемент Журналы.

    Вкладка

  6. Чтобы просмотреть данные, сохраненные в журнал из файла 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.

непрерывный экспорт.

Дальнейшие действия

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