Logz.io가 Amazon SageMaker로 ML 권장 사항 및 이상 탐지 솔루션을 가속화하는 방법

소스 노드 : 1594837

Logz.io AWS 파트너 네트워크(APN) 고급 기술 파트너입니다. DevOps, 보안, 데이터 및 분석 분야의 AWS 역량. Logz.io는 로그, 메트릭 및 추적 분석을 위한 동급 최고의 오픈 소스 소프트웨어 솔루션을 기반으로 하는 SaaS(Software as a Service) 관찰 플랫폼을 제공합니다. 고객은 애플리케이션과 서비스의 상태와 성능을 관리하기 위해 다양한 데이터 소스에서 점점 더 많은 양의 데이터를 Logz.io로 보내고 있습니다. 시간이 지남에 따라 구축된 다양한 대시보드를 탐색하고, 다양한 경고 알림을 처리하고, 생산 문제를 해결할 때 점을 연결하려는 신규 사용자에게는 부담스러울 수 있습니다.

MTTD(평균 감지 시간)와 MTTR(평균 해결 시간)은 고객의 주요 지표입니다. 이는 플랫폼의 사용자가 문제(예: 프로덕션 서비스 다운) 조사를 시작하여 플랫폼에서 특정 조사와 관련된 작업을 중단하는 시점까지의 시간을 측정하여 계산됩니다.

고객이 MTTD 및 MTTR을 줄일 수 있도록 Logz.io는 기계 학습(ML)을 사용하여 관련 대시보드 및 쿼리에 대한 권장 사항을 제공하고 자체 학습을 통해 이상 탐지를 수행하고 있습니다. 결과적으로 일반 사용자는 많은 사람들의 지혜를 활용하여 회사 전체의 통합된 경험을 갖게 됩니다. 우리는 우리 솔루션이 MTTR을 최대 20%까지 줄일 수 있다는 것을 발견했습니다.

MTTD가 감소함에 따라 사용자는 문제를 더 빠르게 식별하고 해결할 수 있습니다. 우리의 데이터 의미 계층에는 조사 시작 및 중지에 대한 의미와 특정 경고와 관련하여 사용자가 수행하는 각 작업의 인기도가 포함되어 있습니다.

이번 포스팅에서는 Logz.io가 어떻게 사용되었는지 공유합니다. 아마존 세이지 메이커 개념 증명(POC), 연구부터 생산 평가까지의 실험, 그리고 생산 추론 비용을 어떻게 절감했는지에 대한 시간과 노력을 줄입니다.

난제

Logz.io가 SageMaker를 사용하기 전까지는 연구부터 POC 테스트, 생산 실험까지의 시간이 꽤 길었습니다. 데이터를 수집, 정리, 정규화하려면 Spark 작업을 만들어야 했기 때문입니다. DevOps에서는 각 데이터 소스를 읽으려면 이 작업이 필요했습니다. DevOps 및 데이터 엔지니어링 기술은 ML 팀의 일부가 아니며 이로 인해 팀 간의 의존도가 높아졌습니다.

또 다른 과제는 최적의 비용 대비 성능 비율을 달성하면서 제품에 ML 추론 서비스를 제공하는 것이었습니다. 최적의 시나리오는 컴퓨팅 장치에 대해 가능한 한 많은 모델을 지원하는 동시에 많은 모델을 사용하는 고객에게 높은 동시성을 제공하는 것입니다. 추론 서비스에 대한 데이터 스트림의 초기 기간은 5분 로그 버킷이기 때문에 추론 시간에 유연성이 있었습니다.

연구 단계

데이터 과학은 연구를 위한 대화형 개발 환경이 필요한 반복 프로세스이며, 모든 반복 및 데이터 처리에서 데이터 출력을 검증합니다. 따라서 우리는 ML 연구원들이 노트북을 사용하도록 권장합니다.

반복 주기를 가속화하기 위해 우리는 노트북의 코드를 대규모로 실행하면서 실제 생산 데이터에서 테스트하고 싶었습니다. 또한 우리는 프로덕션 초기 테스트 중에 DevOps 및 데이터 엔지니어링의 병목 현상을 피하는 동시에 출력을 보고 코드 런타임을 추정할 수 있는 기능을 원했습니다.

이를 구현하기 위해 우리는 데이터 과학 팀에 연구부터 생산에 대한 초기 테스트까지 모든 권한과 엔드투엔드 책임을 제공하고 싶었습니다. 데이터 액세스 관리를 유지하고 이 액세스를 모니터링하는 동시에 데이터를 쉽게 가져올 수 있는 기능이 필요했습니다. 또한 런타임과 예상 비용을 모니터링하면서 확장 가능한 방식으로 맞춤형 POC 노트북을 프로덕션에 쉽게 배포해야 했습니다.

평가 단계

이 단계에서 우리는 교육 및 제공 요구 사항을 모두 지원하기 위해 몇 가지 ML 플랫폼을 평가했습니다. 우리는 SageMaker가 훈련과 추론을 모두 지원하기 때문에 우리 사용 사례에 가장 적합하다는 것을 알았습니다. 또한, 사용자 정의가 가능하므로 선호하는 연구 프로세스에 따라 맞춤화할 수 있습니다.

처음에는 로컬 노트북에서 시작하여 다양한 라이브러리를 테스트했습니다. 프로덕션에서 대규모 데이터를 가져오는 데 문제가 발생했습니다. 나중에 우리는 로컬 컴퓨터에서 많은 시간이 걸리는 모델링 단계에 갇히게 되었습니다.

우리는 많은 솔루션을 평가한 후 최종적으로 다음 아키텍처를 선택했습니다.

  • 데이터플레이트 – 오픈 소스 버전 데이터플레이트 Spark를 활용하여 데이터를 쉽게 가져오고 결합하는 데 도움이 되었습니다. 아마존 EMR 간단한 SQL로 클러스터링하는 동시에 데이터 액세스를 모니터링합니다.
  • SageMaker 노트북 인스턴스 및 처리 작업 – 이는 Git 연결을 통해 코드를 공동 작업하는 동시에 런타임 확장성과 머신 유형 및 ML 프레임워크의 유연성을 높이는 데 도움이 되었습니다.

연구 단계 솔루션 아키텍처

다음 다이어그램은 연구 단계의 솔루션 아키텍처를 보여주며 다음 구성 요소로 구성됩니다.

  • SageMaker 노트북 – 데이터 과학자는 다음을 사용합니다. 노트북 그들의 연구를 수행하기 위해.
  • AWS Lambda 함수 - AWS 람다 요청 시 처리 작업을 실행하는 서버리스 솔루션입니다. 이 작업에서는 실험 중에 실행하려는 노트북과 함께 노트북을 지원하는 데 필요한 모든 공통 파일(requirements.txt 다중 처리 기능 코드는 별도의 노트북에 있습니다).
  • 아마존 ECR - Amazon Elastic Container Registry (Amazon ECR)은 Docker 컨테이너를 저장합니다.
  • SageMaker 처리 작업 – 우리는 이것을 실행할 수 있습니다 데이터 처리 작업 모든 ML 머신에서 매개변수를 사용하여 노트북을 실행합니다.
  • 데이터플레이트 – 이 서비스는 SQL을 사용하고 여러 데이터 소스를 쉽게 결합하는 데 도움이 됩니다. 이를 Spark 코드로 변환하고 최적화하는 동시에 데이터 액세스를 모니터링하고 데이터 위반을 줄이는 데 도움을 줍니다. Xtra 버전은 훨씬 더 많은 기능을 제공했습니다.
  • 아마존 EMR – 이 서비스는 Spark를 통해 데이터 추출을 워크로드로 실행하여 모든 데이터 리소스에 연결합니다.

SageMaker 노트북 인스턴스 수명 주기를 통해 다음을 사용하여 최대 노트북 인스턴스 런타임을 제어할 수 있습니다. autostop.py 이 템플릿 스크립트.

ML 프레임워크를 테스트한 후 클러스터링 및 순위 지정 단계를 위해 SageMaker MXNet 커널을 선택했습니다.

프로덕션 데이터에 대한 노트북 코드를 테스트하기 위해 Amazon ECS의 Docker를 통해 노트북을 캡슐화하여 실행하고 처리 작업으로 실행하여 다양한 유형의 머신에서 최대 런타임을 검증했습니다.

Docker 컨테이너는 노트북 테스트 간에 리소스를 공유하는 데에도 도움이 됩니다. 경우에 따라 노트북은 큰 데이터 프레임을 더 작은 데이터 프레임으로 분할하여 큰 머신 유형의 각 vCPU에서 동시에 실행될 수 있는 다중 프로세스를 활용하기 위해 다른 노트북을 호출합니다.

실시간 생산 추론 솔루션

연구 단계에서는 Parquet를 사용했습니다. 아마존 단순 스토리지 서비스 (Amazon S3) 파일을 사용하여 권장 사항을 유지합니다. 이는 경고 메커니즘에 권장 사항을 첨부하기 위해 엔지니어링 파이프라인에서 하루에 한 번 사용됩니다.

그러나 우리 로드맵에는 더 높은 새로 고침 빈도의 솔루션이 필요하며, 조사 중에도 권장 사항을 제공하고 싶기 때문에 장기적으로 하루에 한 번 가져오는 것만으로는 충분하지 않습니다.

이 솔루션을 대규모로 구현하기 위해 우리는 이상 탐지 연구에서 대부분의 SageMaker 엔드포인트 솔루션을 테스트했습니다. 우리는 다양한 유형의 단일 엔드포인트 시스템을 사용하여 사전 구축된 모델 500개를 테스트했으며 동시 멀티스레드 클라이언트를 사용하여 엔드포인트에 대한 요청을 수행했습니다. 응답 시간, CPU, 메모리 및 기타 지표를 측정했습니다. 자세한 내용은 다음을 참조하세요. Amazon CloudWatch로 Amazon SageMaker 모니터링). 우리는 다중 모델 엔드포인트가 우리 사용 사례에 완벽하게 적합하다는 것을 알았습니다.

다중 모델 엔드포인트는 Flask(또는 기타 Python) 웹 서비스를 사용하는 단일 엔드포인트나 Kubernetes에 비해 비용을 크게 줄일 수 있습니다. 우리의 첫 번째 가정은 각 고객에게 4개의 vCPU 소형 머신을 사용하여 단일 엔드포인트를 제공해야 하고, 각 vCPU가 하나의 모델을 제공하기 때문에 평균적으로 XNUMX개의 전용 모델을 쿼리해야 한다는 것이었습니다. 다중 모델 엔드포인트를 사용하면 단일 다중 엔드포인트 시스템에 더 많은 고객을 모을 수 있습니다.

우리는 고객별로 모델과 인코딩 파일을 갖고 있었고 로드 테스트를 수행한 후 각각 50개의 모델을 사용하고 솔루션에 가장 작은 ml.t10.medium 인스턴스를 사용하는 2명의 고객에게 서비스를 제공할 수 있다고 판단했습니다.

이 단계에서는 다음을 사용하는 것을 고려했습니다. 다중 모델 끝점. 다중 모델 엔드포인트는 다수의 모델을 배포할 수 있는 확장 가능하고 비용 효율적인 솔루션을 제공하므로 단일 추론 컨테이너로 여러 모델을 호스팅할 수 있습니다. 이렇게 하면 각각 단일 고객에게 서비스를 제공하는 여러 개의 소규모 단일 모델 엔드포인트를 사용하는 것에 비해 엔드포인트 활용도가 향상되어 호스팅 비용이 절감됩니다. 또한 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을 줄일 수 있었습니다. 시스템의 문제를 설명하는 경고 링크에 응답하는 시점부터 플랫폼을 사용하여 문제 조사를 완료하는 시점까지의 총 시간이 단축됩니다. 조사 단계에서는 ML 추천 솔루션 유무에 관계없이 사용자의 행동을 측정합니다. 이를 통해 특정 문제를 더 빠르게 해결하고 이상 현상을 찾아 문제의 실제 원인을 식별할 수 있는 최선의 조치에 대한 권장 사항을 제공하는 데 도움이 됩니다.

결론 및 다음 단계

이 게시물에서는 Logz.io가 SageMaker를 사용하여 MTTD 및 MTTR을 개선한 방법을 공유했습니다.

다음 단계로 우리는 다음 기능으로 솔루션을 확장하는 것을 고려하고 있습니다.

시도해 보시기 바랍니다. SageMaker 노트북. 더 많은 예를 보려면 다음을 확인하십시오. SageMaker 예제 GitHub 리포지토리.


저자에 관하여

아미트 그로스 Logz.io의 모든 제품의 AI 솔루션을 연구 단계부터 통합 단계까지 담당하는 Logz.io의 연구 부서를 이끌고 있습니다. Logz.io 이전에 Amit는 Here inc에서 데이터 과학 및 보안 연구 그룹을 모두 관리했습니다. 그리고 Cellebrite Inc. Amit는 Tel-Aviv University에서 컴퓨터 공학 석사 학위를 받았습니다.

야니브 바크닌 Amazon Web Services의 기계 학습 전문가입니다. AWS에 합류하기 전에 Yaniv는 Dipsee.ai의 공동 설립자이자 CEO를 포함하여 AI 스타트업 및 Enterprise에서 리더십 직책을 역임했습니다. Yaniv는 AWS 고객과 협력하여 기계 학습의 힘을 활용하여 실제 작업을 해결하고 가치를 도출합니다. 여가 시간에 Yaniv는 아들들과 축구를 즐깁니다.

에이 탄 셀라 Amazon Web Services의 기계 학습 전문가 솔루션 설계자입니다. 그는 AWS 고객과 협력하여 지침 및 기술 지원을 제공하여 AWS에서 기계 학습 솔루션을 구축하고 운영하도록 돕습니다. 여가 시간에 Eitan은 조깅과 최신 기계 학습 기사 읽기를 즐깁니다.

출처: https://aws.amazon.com/blogs/machine-learning/how-logz-io-accelerates-ml-recommendations-and-anomaly-Detection-solutions-with-amazon-sagemaker/

타임 스탬프 :

더보기 AWS 머신 러닝 블로그