Logz.ioがAmazonSageMakerを使用してMLの推奨事項と異常検出ソリューションをどのように加速するか

ソースノード: 1594837

Logz.io AWS Partner Network (APN) Advanced Technology Partner です。 DevOps、セキュリティ、データと分析における AWS コンピテンシー. 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 とデータ エンジニアリングのスキルは ML チームの一部ではないため、チーム間の依存度が高くなりました。

もう 5 つの課題は、最適なコストとパフォーマンスの比率を達成しながら、ML 推論サービスを製品に提供することでした。 私たちの最適なシナリオは、コンピューティング ユニットで可能な限り多くのモデルをサポートすると同時に、多くのモデルを持つ顧客から高い同時実行性を提供することです。 推論サービスのデータ ストリームの最初のウィンドウはログの XNUMX 分のバケットであるため、推論時間には柔軟性がありました。

研究フェーズ

データ サイエンスは、研究用のインタラクティブな開発環境を必要とする反復プロセスであり、反復とデータ処理のたびにデータ出力を検証します。 したがって、ML 研究者にはノートブックを使用することをお勧めします。

反復サイクルを加速するために、ノートブックのコードを実際の本番データでテストしながら、大規模に実行したいと考えていました。 さらに、本番環境での初期テスト中に DevOps とデータ エンジニアリングのボトルネックを回避したいと考えていましたが、出力を表示してコードの実行時間を見積もることができました。

これを実装するために、データ サイエンス チームに完全な制御と、研究から本番環境での初期テストまでのエンド ツー エンドの責任を提供したいと考えました。 データアクセス管理を維持し、このアクセスを監視しながら、データを簡単にプルできるようにする必要がありました。 また、実行時間と予想されるコストを監視しながら、スケーラブルな方法でカスタム POC ノートブックを本番環境に簡単にデプロイする必要もありました。

評価段階

このフェーズでは、トレーニングとサービス提供の両方の要件をサポートするために、いくつかの ML プラットフォームを評価しました。 SageMaker はトレーニングと推論の両方をサポートしているため、ユースケースに最も適していることがわかりました。 さらに、カスタマイズ可能なので、好みの調査プロセスに合わせて調整できます。

最初は、ローカルのノートブックから始めて、さまざまなライブラリをテストしました。 本番環境から大量のデータを引き出す際に問題が発生しました。 その後、ローカル マシンで何時間もかかるモデリング フェーズで行き詰まりました。

多くのソリューションを評価し、最終的に次のアーキテクチャを選択しました。

  • データプレート – のオープンソース版 データプレート Spark を利用することで、データを簡単に引き出して結合することができました アマゾンEMR データ アクセスを監視しながら、単純な SQL を使用してクラスターを構築する
  • SageMaker ノートブック インスタンスと処理ジョブ – これにより、Git 接続を介してコードを共同作業しながら、ランタイムのスケーラビリティとマシンタイプと ML フレームワークの柔軟性が向上しました

研究段階のソリューション アーキテクチャ

次の図は、調査フェーズのソリューション アーキテクチャを示しており、次のコンポーネントで構成されています。

  • SageMaker ノートブック – データサイエンティストはこれらを使用します ノートPC 彼らの研究を行うために。
  • AWS Lambda関数AWSラムダ オンデマンドで処理ジョブを実行するサーバーレス ソリューションです。 このジョブでは、実験中に実行するノートブックと、ノートブックをサポートするために必要なすべての共通ファイルを含む Docker コンテナーを使用します (requirements.txt マルチプロセッシング関数のコードは別のノートブックにあります)。
  • アマゾンECRAmazon エラスティック コンテナ レジストリ (Amazon ECR) は、Docker コンテナを保存します。
  • SageMaker処理ジョブ – これを実行できます データ処理ジョブ 任意の ML マシンで、パラメーターを使用してノートブックを実行します。
  • データプレート – このサービスは、SQL を使用して複数のデータ ソースを簡単に結合するのに役立ちます。 それを Spark コードに変換して最適化し、データ アクセスを監視してデータ侵害を減らします。 Xtra バージョンでは、さらに多くの機能が提供されました。
  • アマゾンEMR – このサービスは、データ抽出を Spark 上のワークロードとして実行し、すべてのデータ リソースに接続します。

SageMaker ノートブック インスタンスのライフサイクルでは、ノートブック インスタンスの最大ランタイムを制御できます。 autostop.py template スクリプト。

ML フレームワークをテストした後、クラスタリングとランキングのフェーズに SageMaker MXNet カーネルを選択しました。

本番データでノートブック コードをテストするために、Amazon ECS の Docker を介してノートブックをカプセル化して実行し、さまざまなタイプのマシンで最大ランタイムを検証する処理ジョブとして実行しました。

Docker コンテナーは、ノートブックのテスト間でリソースを共有するのにも役立ちます。 場合によっては、ノートブックが他のノートブックを呼び出して、大きなデータ フレームを小さなデータ フレームに分割し、大きなマシンタイプの各 vCPU で同時に実行できるマルチプロセスを利用します。

リアルタイム生産推論ソリューション

研究段階では、Parquet を使用しました Amazon シンプル ストレージ サービス (Amazon S3) ファイルを使用して、推奨事項を維持します。 これらは、エンジニアリング パイプラインから XNUMX 日 XNUMX 回消費され、推奨事項がアラートのメカニズムに関連付けられます。

ただし、私たちのロードマップでは、より高いリフレッシュ レートのソリューションが必要であり、調査中でも推奨事項を提供したいため、長期的には XNUMX 日 XNUMX 回プルするだけでは十分ではありません。

このソリューションを大規模に実装するために、異常検出調査でほとんどの SageMaker エンドポイント ソリューションをテストしました。 さまざまなタイプの単一のエンドポイント マシンで 500 のビルド済みモデルをテストし、同時マルチスレッド クライアントを使用してエンドポイントへの要求を実行しました。 応答時間、CPU、メモリ、およびその他のメトリックを測定しました (詳細については、 Amazon CloudWatchでAmazon SageMakerを監視する)。 マルチモデル エンドポイントは、私たちのユース ケースに最適であることがわかりました。

マルチモデル エンドポイントは、単一のエンドポイントや、Flask (または他の Python) Web サービスを使用する Kubernetes と比較して、コストを大幅に削減できます。 最初の仮定は、各顧客に 4 vCPU の小型マシンを使用して単一のエンドポイントを提供し、各 vCPU が XNUMX つのモデルを提供するため、平均して 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 インスタンス コアを利用できます。

これにより、実行するインスタンス タイプを定義しながら、コード行で処理ジョブとして実行される多くのノートブックで構成されるワークフローを実行できます。

ノートブックにパラメーターを追加できるため、異なる時間、日、または月に同時に実行してデータをプルして処理することにより、処理をスケーリングできます。

ノートブックを実行する (実行時間を制限する) スケジューリング ジョブを作成することもできます。

また、最後の実行とその詳細 (処理時間など) を観察することもできます。

コンテナーで使用される papermill を使用すると、すべての実行の出力を表示できるため、本番環境でのデバッグに役立ちます。

ノートブック出力レビューは、標準の読み取り専用ノートブックの形式です。

マルチプロセッシングの利用は、各ノートブックの処理をスケーリングし、そのすべてのコアを利用するのに役立ちます。 次のような重い処理を行うことができる他のノートブックで関数を生成しました。

  • 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) のモデルを持ち、低レイテンシーの制約を満たすことができるため、最大 XNUMX% のコストを節約できることがわかりました。 .

このソリューション アーキテクチャにより、お客様の MTTR を短縮することができました。これは、当社のプラットフォームを使用した成功を測定するための主要な指標です。 これにより、システムの問題を説明するアラート リンクに応答してから、プラットフォームを使用して問題の調査を完了するまでの合計時間が短縮されます。 調査段階では、ML レコメンデーション ソリューションの有無にかかわらず、ユーザーの行動を測定します。 これにより、特定の問題をより迅速に解決し、異常を特定して問題の実際の原因を特定するための最善のアクションを推奨することができます。

結論と次のステップ

この投稿では、Logz.io が SageMaker を使用して MTTD と MTTR を改善した方法を共有しました。

次のステップとして、次の機能を使用してソリューションを拡張することを検討しています。

ぜひお試しください SageMaker ノートブック。 その他の例については、以下を参照してください。 SageMaker の例 GitHub リポジトリ.


著者について

アミット・グロス 研究段階から統合段階まで、すべての Logz.io 製品の AI ソリューションを担当する Logz.io の研究部門を率いています。 Logz.io の前に、Amit は Here inc. でデータ サイエンスとセキュリティ研究グループの両方を管理していました。 とCellebrite inc。 Amit は、テルアビブ大学でコンピューター サイエンスの修士号を取得しています。

ヤニフ・ヴァクニン アマゾン ウェブ サービスの機械学習スペシャリストです。 AWS に入社する前は、Yaniv は Dipsee.ai の共同創設者兼 CEO など、AI スタートアップ企業やエンタープライズ企業で指導的地位を歴任しました。 Yaniv は AWS の顧客と協力して、機械学習の力を活用して現実世界のタスクを解決し、価値を引き出します。 余暇には、ヤニフは息子たちとサッカーを楽しんでいます。

エイタンセラ アマゾンウェブサービスの機械学習スペシャリストソリューションアーキテクトです。 彼はAWSのお客様と協力してガイダンスと技術支援を提供し、AWSでの機械学習ソリューションの構築と運用を支援しています。 余暇には、ジョギングや最新の機械学習記事を読むことを楽しんでいます。

ソース: https://aws.amazon.com/blogs/machine-learning/how-logz-io-accelerates-ml-recommendations-and-anomaly-detection-solutions-with-amazon-sagemaker/

タイムスタンプ:

より多くの AWS機械学習ブログ