Как Logz.io ускоряет рекомендации машинного обучения и решения по обнаружению аномалий с помощью Amazon SageMaker

Исходный узел: 1594837

logz.io является партнером по передовым технологиям AWS Partner Network (APN) с Компетенции AWS в области DevOps, безопасности, данных и аналитики. Logz.io предлагает платформу наблюдения «программное обеспечение как услуга» (SaaS), основанную на лучших в своем классе программных решениях с открытым исходным кодом для аналитики журналов, метрик и отслеживания. Клиенты отправляют в Logz.io все больше данных из различных источников данных для управления работоспособностью и производительностью своих приложений и служб. Это может быть ошеломляющим для новых пользователей, которые хотят перемещаться по различным панелям мониторинга, созданным с течением времени, обрабатывать различные уведомления о предупреждениях и соединять точки при устранении неполадок в работе.

Среднее время обнаружения (MTTD) и среднее время разрешения (MTTR) являются ключевыми показателями для наших клиентов. Они рассчитываются путем измерения времени, когда пользователь на нашей платформе начинает исследовать проблему (например, производственная служба не работает) до момента, когда он прекращает выполнять действия на платформе, связанные с конкретным расследованием.

Чтобы помочь клиентам сократить MTTD и MTTR, Logz.io обращается к машинному обучению (ML), чтобы предоставлять рекомендации для соответствующих панелей мониторинга и запросов, а также выполнять обнаружение аномалий посредством самообучения. В результате средний пользователь получает совокупный опыт всей своей компании, опираясь на мудрость многих. Мы обнаружили, что наше решение может снизить MTTR до 20%.

По мере уменьшения MTTD пользователи могут быстрее идентифицировать проблему и решить ее. Наш семантический слой данных содержит семантику для запуска и остановки расследования, а также популярность каждого действия, которое пользователь выполняет в отношении определенного предупреждения.

В этом посте мы рассказываем, как Logz.io использовал Создатель мудреца Амазонки чтобы сократить время и усилия для проверки концепции (POC), экспериментов от исследований до оценки производства, а также то, как мы сократили наши производственные затраты.

Задача

До тех пор, пока Logz.io не использовал SageMaker, время между исследованиями и тестированием POC и экспериментами на производстве было довольно продолжительным. Это было связано с тем, что нам нужно было создать задания Spark для сбора, очистки и нормализации данных. Эта работа требуется DevOps для чтения каждого источника данных. Навыки DevOps и инженерии данных не входят в нашу команду машинного обучения, и это привело к высокой зависимости между командами.

Еще одна задача заключалась в том, чтобы предоставить нашим продуктам услугу логического вывода на основе машинного обучения, достигнув при этом оптимального соотношения цены и производительности. Наш оптимальный сценарий — поддерживать как можно больше моделей для вычислительного устройства, обеспечивая при этом высокий уровень параллелизма от клиентов со многими моделями. У нас была гибкость в отношении времени вывода, потому что наше начальное окно потока данных для службы вывода — это 5-минутная корзина журналов.

Фаза исследования

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

Чтобы ускорить итерационный цикл, мы хотели протестировать код наших ноутбуков на реальных производственных данных, запуская его в масштабе. Кроме того, мы хотели избежать узких мест, связанных с DevOps и обработкой данных во время первоначального тестирования в рабочей среде, имея при этом возможность просматривать результаты и пытаться оценить время выполнения кода.

Чтобы реализовать это, мы хотели предоставить нашей команде специалистов по обработке и анализу данных полный контроль и сквозную ответственность, начиная с исследований и заканчивая первоначальными испытаниями в производстве. Нам нужно было, чтобы они легко извлекали данные, сохраняя при этом управление доступом к данным и отслеживая этот доступ. Им также необходимо было легко развертывать свои пользовательские ноутбуки POC в производстве с возможностью масштабирования, при этом отслеживая время выполнения и ожидаемые затраты.

Этап оценки

На этом этапе мы оценили несколько платформ машинного обучения, чтобы удовлетворить требования как к обучению, так и к обслуживанию. Мы обнаружили, что SageMaker лучше всего подходит для наших случаев использования, поскольку поддерживает как обучение, так и логические выводы. Кроме того, его можно настраивать, поэтому мы можем адаптировать его в соответствии с предпочитаемым нами исследовательским процессом.

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

Мы оценили множество решений и в итоге остановились на следующей архитектуре:

  • Табличка данных - Версия с открытым исходным кодом Табличка данных помогли нам легко извлекать и объединять наши данные с помощью нашего Spark Амазонка ЭМИ кластеры с простым SQL, при этом отслеживая доступ к данным
  • Экземпляр блокнота SageMaker и задания обработки — Это помогло нам с масштабируемостью среды выполнения и гибкостью типов машин и платформ машинного обучения при совместной работе над нашим кодом через соединение Git.

Архитектура решения на этапе исследования

Следующая диаграмма иллюстрирует архитектуру решения на этапе исследования и состоит из следующих компонентов:

  • Блокноты SageMaker – Исследователи данных используют их ноутбуки проводить свои исследования.
  • Лямбда-функция AWSAWS Lambda — это бессерверное решение, которое запускает задание обработки по требованию. В задании используется контейнер Docker с записной книжкой, которую мы хотим запустить во время нашего эксперимента, вместе со всеми нашими общими файлами, которые необходимы для поддержки записной книжки (requirements.txt и код функций многопроцессорной обработки в отдельной записной книжке).
  • Амазонка ЭКРРеестр Amazon Elastic Container (Amazon ECR) хранит наш контейнер Docker.
  • Работа SageMaker Processing - Мы можем запустить это работа по обработке данных на любой машине ML, и он запускает нашу записную книжку с параметрами.
  • Табличка данных – Этот сервис помогает нам использовать SQL и легко объединять несколько источников данных. Он переводит его в код Spark и оптимизирует его, одновременно отслеживая доступ к данным и помогая уменьшить утечки данных. Версия Xtra предоставила еще больше возможностей.
  • Амазонка ЭМИ – Этот сервис запускает извлечение данных как рабочие нагрузки через Spark, обращаясь ко всем нашим ресурсам данных.

Благодаря жизненному циклу экземпляра записной книжки SageMaker мы можем контролировать максимальное время выполнения экземпляра записной книжки, используя autostop.py шаблон скрипты.

После тестирования платформ машинного обучения мы выбрали ядро ​​SageMaker MXNet для наших этапов кластеризации и ранжирования.

Чтобы протестировать код записной книжки на наших производственных данных, мы запустили записную книжку, инкапсулировав ее через Docker в Amazon ECS, и запустили ее как задание обработки, чтобы проверить максимальное время выполнения на разных типах машин.

Контейнер Docker также помогает нам распределять ресурсы между тестами ноутбуков. В некоторых случаях ноутбук призывает другие ноутбуки использовать несколько процессов, разделяя большие кадры данных на более мелкие кадры данных, которые могут выполняться одновременно на каждом виртуальном ЦП в большом типе машины.

Решение для логического вывода в реальном времени

На этапе исследования мы использовали паркет Простой сервис хранения Amazon (Amazon S3) для сохранения наших рекомендаций. Они используются один раз в день из нашего инженерного конвейера, чтобы прикрепить рекомендации к нашему механизму предупреждений.

Однако наша дорожная карта требует решения с более высокой частотой обновления, и в долгосрочной перспективе одного запроса в день недостаточно, потому что мы хотим давать рекомендации даже во время расследования.

Чтобы внедрить это решение в масштабе, мы протестировали большинство решений SageMaker для конечных точек в ходе нашего исследования по обнаружению аномалий. Мы протестировали 500 готовых моделей с одной конечной машиной различных типов и использовали параллельные многопоточные клиенты для выполнения запросов к конечной точке. Мы измерили время отклика, ЦП, память и другие показатели (дополнительную информацию см. Мониторинг Amazon SageMaker с помощью Amazon CloudWatch). Мы обнаружили, что конечная точка с несколькими моделями идеально подходит для наших вариантов использования.

Конечная точка с несколькими моделями может значительно снизить наши затраты по сравнению с одной конечной точкой или даже Kubernetes для использования веб-сервисов Flask (или других Python). Наше первое предположение заключалось в том, что мы должны предоставить единую конечную точку, используя небольшую машину с 4 виртуальными ЦП, для каждого клиента и в среднем запрашивать четыре выделенные модели, поскольку каждый виртуальный ЦП обслуживает одну модель. С мультимодельной конечной точкой мы могли объединить больше клиентов на одной машине с несколькими конечными точками.

У нас была модель и файлы кодирования для каждого клиента, и после проведения нагрузочных тестов мы определили, что можем обслуживать 50 клиентов, каждый из которых использует 10 моделей и даже использует самый маленький экземпляр ml.t2.medium для наших решений.

На этом этапе мы рассмотрели возможность использования мультимодельные конечные точки. Конечные точки с несколькими моделями предоставляют масштабируемое и экономичное решение для развертывания большого количества моделей, позволяя размещать несколько моделей в одном контейнере логического вывода. Это снижает затраты на хостинг за счет улучшения использования конечной точки по сравнению с использованием нескольких небольших конечных точек одной модели, каждая из которых обслуживает одного клиента. Это также снижает накладные расходы на развертывание, поскольку SageMaker управляет загрузкой моделей в память и их масштабированием на основе шаблонов трафика к ним.

Кроме того, преимущество конечной точки с несколькими моделями заключается в том, что если у вас высокая скорость вывода от конкретных клиентов, его структура сохраняет в памяти последние модели обслуживания для повышения производительности.

После того, как мы оценили затраты с использованием конечных точек с несколькими моделями по сравнению со стандартными конечными точками, мы обнаружили, что это потенциально может привести к снижению затрат примерно на 80%.

Исход

В этом разделе мы рассмотрим этапы и результаты процесса.

Мы используем конфигурацию записной книжки жизненного цикла, чтобы разрешить запуск записных книжек в качестве заданий обработки путем инкапсуляции записной книжки в контейнере Docker для более быстрой проверки кода и использования механизма автоматической остановки:

#!/bin/bash # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You
# may not use this file except in compliance with the License. A copy of
# the License is located at
#
# http://aws.amazon.com/apache2.0/
#
# or in the "license" file accompanying this file. This file is
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
# ANY KIND, either express or implied. See the License for the specific
# language governing permissions and limitations under the License. set -e # OVERVIEW
# This script installs the sagemaker_run_notebook extension package in SageMaker Notebook Instance
#
# There are two parameters you need to set:
# 1. S3_LOCATION is the place in S3 where you put the extension tarball
# 2. TARBALL is the name of the tar file that you uploaded to S3. You should just need to check
# that you have the version right.
sudo -u ec2-user -i <<'EOF'
# PARAMETERS
VERSION=0.18.0
EXTENSION_NAME=sagemaker_run_notebook
# Set up the user setting and workspace directories
mkdir -p /home/ec2-user/SageMaker/.jupyter-user/{workspaces,user-settings}
# Run in the conda environment that the Jupyter server uses so that our changes are picked up
source /home/ec2-user/anaconda3/bin/activate JupyterSystemEnv
# Install the extension and rebuild JupyterLab so it picks up the new UI
aws s3 cp s3://aws-emr-resources-11111111-us-east-1/infra-sagemaker/sagemaker_run_notebook-0.18.0-Logz-latest.tar.gz ./sagemaker_run_notebook-0.18.0-Logz-latest.tar.gz
pip install sagemaker_run_notebook-0.18.0-Logz-latest.tar.gz jupyter lab build
source /home/ec2-user/anaconda3/bin/deactivate
EOF # sudo -u ec2-user -i <<'EOF'
# PARAMETERS
for PACKAGE in pandas dataplate awswrangler==2.0.0 ipynb==0.5.1 prison==0.1.3 PyMySQL==0.10.1 requests==2.25.0 scipy==1.5.4 dtaidistance joblib sagemaker_run_notebook-0.18.0-Logz-latest.tar.gz fuzzywuzzy==0.18.0; do echo $PACKAGE # Note that "base" is special environment name, include it there as well. for env in base /home/ec2-user/anaconda3/envs/*; do source /home/ec2-user/anaconda3/bin/activate $(basename "$env") if [ $env = 'JupyterSystemEnv' ]; then continue fi pip install --upgrade "$PACKAGE" source /home/ec2-user/anaconda3/bin/deactivate done
done
jupyter lab build # Tell Jupyter to use the user-settings and workspaces directory on the EBS
# volume.
echo "export JUPYTERLAB_SETTINGS_DIR=/home/ec2-user/SageMaker/.jupyter-user/user-settings" >> /etc/profile.d/jupyter-env.sh
echo "export JUPYTERLAB_WORKSPACES_DIR=/home/ec2-user/SageMaker/.jupyter-user/workspaces" >> /etc/profile.d/jupyter-env.sh # The Jupyter server needs to be restarted to pick up the server part of the
# extension. This needs to be done as root.
initctl restart jupyter-server --no-wait # OVERVIEW
# This script stops a SageMaker notebook once it's idle for more than 2 hour (default time)
# You can change the idle time for stop using the environment variable below.
# If you want the notebook the stop only if no browsers are open, remove the --ignore-connections flag
#
# Note that this script will fail if either condition is not met
# 1. Ensure the Notebook Instance has internet connectivity to fetch the example config
# 2. Ensure the Notebook Instance execution role permissions to SageMaker:StopNotebookInstance to stop the notebook
# and SageMaker:DescribeNotebookInstance to describe the notebook.
# PARAMETERS
IDLE_TIME=3600 echo "Fetching the autostop script"
wget https://raw.githubusercontent.com/aws-samples/amazon-sagemaker-notebook-instance-lifecycle-config-samples/master/scripts/auto-stop-idle/autostop.py echo "Starting the SageMaker autostop script in cron" (crontab -l 2>/dev/null; echo "*/5 * * * * /usr/bin/python $PWD/autostop.py --time $IDLE_TIME --ignore-connections") | crontab -

Мы клонируем sagemaker-run-ноутбук GitHub и добавьте в контейнер следующее:

  • Наши требования к пунктам
  • Возможность запускать записные книжки из записной книжки, что позволяет нам использовать многопроцессорное поведение для использования всех ядер экземпляра ml.m5.12xlarge.

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

Поскольку мы можем добавлять параметры в записную книжку, мы можем масштабировать нашу обработку, запуская ее одновременно в разные часы, дни или месяцы для извлечения и обработки данных.

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

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

С помощью бумажной фабрики, которая используется в контейнере, мы можем просматривать выходные данные каждого запуска, что помогает нам отлаживать производство.

Наш обзор выходных данных ноутбука представлен в виде стандартного блокнота только для чтения.

Использование нескольких процессоров помогает нам масштабировать процессор каждого ноутбука и использовать все его ядра. Мы создали функции в других блокнотах, которые могут выполнять тяжелую обработку, например следующие:

  • Взорвать JSON
  • Найдите соответствующие строки в DataFrame, в то время как основной блокнот разбивает DataFrame на #cpu-cores элементы
  • Одновременный запуск кластеризации по типам оповещений

Затем мы добавляем эти функциональные блокноты в контейнер, который запускает блокнот в качестве задания обработки. См. следующий файл Docker (обратите внимание на команды COPY):

ARG BASE_IMAGE=need_an_image
FROM $BASE_IMAGE ENV JUPYTER_ENABLE_LAB yes
ENV PYTHONUNBUFFERED TRUE COPY requirements.txt /tmp/requirements.txt
RUN pip install papermill jupyter nteract-scrapbook boto3 requests==2.20.1
RUN pip install -r /tmp/requirements.txt ENV PYTHONUNBUFFERED=TRUE
ENV PATH="/opt/program:${PATH}" # Set up the program in the image
COPY multiprocessDownloadNormalizeFunctions.ipynb /tmp/multiprocessDownloadNormalizeFunctions.ipynb
COPY multiprocessFunctions.ipynb /tmp/multiprocessFunctions.ipynb
COPY run_notebook execute.py /opt/program/
ENTRYPOINT ["/bin/bash"] # because there is a bug where you have to be root to access the directories
USER root

Итоги

На этапе исследования мы оценили возможность запуска наших блокнотов как таковых, чтобы поэкспериментировать и оценить, как наш код работает со всеми нашими соответствующими данными, а не только с выборкой данных. Мы обнаружили, что инкапсуляция наших записных книжек с помощью заданий обработки может нам очень подойти, потому что нам не нужно переписывать код, и мы можем использовать мощь инстансов AWS, оптимизированных для вычислений и памяти, и легко отслеживать состояние процесса.

Во время оценки выводов мы оценили различные решения для конечных точек SageMaker. Мы обнаружили, что использование конечной точки с несколькими моделями может помочь нам обслуживать примерно 50 клиентов, каждый из которых имеет несколько (примерно 10) моделей в одном экземпляре, что соответствует нашим ограничениям по низкой задержке и, следовательно, позволяет нам сэкономить до 80 % затрат. .

Благодаря этой архитектуре решения мы смогли сократить среднее время восстановления (MTTR) наших клиентов, которое является основным показателем успеха при использовании нашей платформы. Это сокращает общее время с момента ответа на нашу ссылку оповещения, которая описывает проблему в ваших системах, до момента, когда вы закончите исследование проблемы с помощью нашей платформы. На этапе расследования мы измеряем действия пользователей с нашим рекомендательным решением для машинного обучения и без него. Это помогает нам давать рекомендации о наилучших действиях для более быстрого решения конкретной проблемы и выявлять аномалии, чтобы определить фактическую причину проблемы.

Заключение и следующие шаги

В этом посте мы рассказали, как Logz.io использовала SageMaker для улучшения MTTD и MTTR.

В качестве следующего шага мы рассматриваем возможность расширения решения следующими функциями:

Мы рекомендуем вам попробовать Блокноты SageMaker. Дополнительные примеры см. Примеры SageMaker в репозитории GitHub.


Об авторах

Амит Гросс возглавляет исследовательский отдел Logz.io, который отвечает за ИИ-решения для всех продуктов Logz.io, от этапа исследования до этапа интеграции. До Logz.io Амит руководил группами по науке о данных и исследованиям в области безопасности в компании Here inc. и Cellebrite Inc. Амит имеет степень магистра компьютерных наук Тель-Авивского университета.

Янив Вакнин является специалистом по машинному обучению в Amazon Web Services. До прихода в AWS Янив занимал руководящие должности в стартапах ИИ и Enterprise, в том числе был соучредителем и генеральным директором Dipsee.ai. Yaniv работает с клиентами AWS, чтобы использовать возможности машинного обучения для решения реальных задач и получения прибыли. В свободное время Янив любит играть в футбол со своими мальчиками.

Эйтан Села является специалистом по машинному обучению, архитектором решений в Amazon Web Services. Он работает с клиентами AWS, предоставляя рекомендации и техническую помощь, помогая им создавать и использовать решения для машинного обучения на AWS. В свободное время Эйтан любит бегать и читать последние статьи по машинному обучению.

Источник: https://aws.amazon.com/blogs/machine-learning/how-logz-io-accelerates-ml-recommendations-and-anomaly-detection-solutions-with-amazon-sagemaker/

Отметка времени:

Больше от Блог машинного обучения AWS