Bagaimana Logz.io mempercepat rekomendasi ML dan solusi deteksi anomali dengan Amazon SageMaker

Node Sumber: 1594837

Logz.io adalah Partner Teknologi Lanjutan AWS Partner Network (APN) dengan Kompetensi AWS dalam DevOps, Keamanan, dan Data & Analitik. Logz.io menawarkan platform observabilitas perangkat lunak sebagai layanan (SaaS) berdasarkan solusi perangkat lunak sumber terbuka terbaik di kelasnya untuk analitik log, metrik, dan pelacakan. Pelanggan mengirim semakin banyak data ke Logz.io dari berbagai sumber data untuk mengelola kesehatan dan kinerja aplikasi dan layanan mereka. Ini bisa membuat kewalahan bagi pengguna baru yang ingin bernavigasi di berbagai dasbor yang dibangun dari waktu ke waktu, memproses pemberitahuan peringatan yang berbeda, dan menghubungkan titik-titik saat memecahkan masalah produksi.

Waktu rata-rata untuk mendeteksi (MTTD) dan waktu rata-rata untuk resolusi (MTTR) adalah metrik utama bagi pelanggan kami. Mereka dihitung dengan mengukur waktu saat pengguna di platform kami mulai menyelidiki masalah (seperti layanan produksi berhenti) hingga mereka berhenti melakukan tindakan di platform yang terkait dengan penyelidikan tertentu.

Untuk membantu pelanggan mengurangi MTTD dan MTTR, Logz.io beralih ke pembelajaran mesin (ML) untuk memberikan rekomendasi untuk dasbor dan kueri yang relevan serta melakukan deteksi anomali melalui pembelajaran mandiri. Akibatnya, rata-rata pengguna dilengkapi dengan pengalaman gabungan dari seluruh perusahaan mereka, memanfaatkan kebijaksanaan banyak orang. Kami menemukan bahwa solusi kami dapat mengurangi MTTR hingga 20%.

Saat MTTD menurun, pengguna dapat mengidentifikasi masalah dan menyelesaikannya lebih cepat. Lapisan semantik data kami berisi semantik untuk memulai dan menghentikan penyelidikan, dan popularitas setiap tindakan yang dilakukan pengguna sehubungan dengan lansiran tertentu.

Dalam posting ini, kami membagikan bagaimana Logz.io digunakan Amazon SageMaker untuk mengurangi waktu dan upaya untuk bukti konsep (POC) kami, eksperimen dari penelitian hingga evaluasi produksi, dan cara kami mengurangi biaya inferensi produksi.

Tantangan

Hingga Logz.io menggunakan SageMaker, waktu antara riset hingga pengujian POC dan eksperimen produksi cukup lama. Ini karena kami perlu membuat tugas Spark untuk mengumpulkan, membersihkan, dan menormalkan data. DevOps membutuhkan pekerjaan ini untuk membaca setiap sumber data. Keterampilan DevOps dan rekayasa data bukan bagian dari tim ML kami, dan ini menyebabkan ketergantungan yang tinggi di antara tim.

Tantangan lainnya adalah menyediakan layanan inferensi ML untuk produk kami sambil mencapai rasio biaya vs. kinerja yang optimal. Skenario optimal kami adalah mendukung sebanyak mungkin model untuk unit komputasi, sambil memberikan konkurensi tinggi dari pelanggan dengan banyak model. Kami memiliki fleksibilitas pada waktu inferensi kami, karena jendela awal aliran data kami untuk layanan inferensi adalah kumpulan log 5 menit.

Fase penelitian

Ilmu data adalah proses berulang yang membutuhkan lingkungan pengembangan interaktif untuk penelitian, memvalidasi keluaran data pada setiap iterasi dan pemrosesan data. Oleh karena itu, kami mendorong peneliti ML kami untuk menggunakan notebook.

Untuk mempercepat siklus iterasi, kami ingin menguji kode notebook kami pada data produksi nyata, sambil menjalankannya dalam skala besar. Selain itu, kami ingin menghindari kemacetan DevOps dan rekayasa data selama pengujian awal dalam produksi, sekaligus memiliki kemampuan untuk melihat keluaran dan mencoba memperkirakan runtime kode.

Untuk mengimplementasikannya, kami ingin memberikan kontrol penuh dan tanggung jawab menyeluruh kepada tim ilmu data kami mulai dari penelitian hingga pengujian awal pada produksi. Kami membutuhkan mereka untuk menarik data dengan mudah, sambil mempertahankan manajemen akses data dan memantau akses ini. Mereka juga perlu menerapkan notebook POC khusus mereka dengan mudah ke dalam produksi dengan cara yang dapat diskalakan, sambil memantau waktu proses dan biaya yang diharapkan.

Fase evaluasi

Selama fase ini, kami mengevaluasi beberapa platform ML untuk mendukung persyaratan pelatihan dan penayangan. Kami menemukan bahwa SageMaker adalah yang paling sesuai untuk kasus penggunaan kami karena mendukung pelatihan dan inferensi. Selain itu, dapat disesuaikan, sehingga kami dapat menyesuaikannya sesuai dengan proses penelitian pilihan kami.

Awalnya, kami mulai dari notebook lokal, menguji berbagai library. Kami mengalami masalah saat menarik data besar dari produksi. Belakangan, kami terjebak di titik fase pemodelan yang memakan waktu berjam-jam di mesin lokal.

Kami mengevaluasi banyak solusi dan akhirnya memilih arsitektur berikut:

  • Pelat Data – Versi sumber terbuka dari Pelat Data membantu kami menarik dan menggabungkan data kami dengan mudah menggunakan Spark kami Amazon ESDM cluster dengan SQL sederhana, sambil memantau akses data
  • Contoh notebook SageMaker dan tugas pemrosesan – Ini membantu kami dengan skalabilitas waktu proses dan fleksibilitas jenis mesin dan kerangka kerja ML, sambil mengolaborasikan kode kami melalui koneksi Git

Arsitektur solusi fase penelitian

Diagram berikut mengilustrasikan arsitektur solusi dari fase penelitian, dan terdiri dari komponen-komponen berikut:

  • Buku catatan SageMaker – Ilmuwan data menggunakan ini laptop untuk melakukan penelitian mereka.
  • Fungsi AWS Lambda - AWS Lambda adalah solusi tanpa server yang menjalankan tugas pemrosesan sesuai permintaan. Pekerjaan tersebut menggunakan container Docker dengan notebook yang ingin kita jalankan selama percobaan, bersama dengan semua file umum yang diperlukan untuk mendukung notebook (requirements.txt dan kode fungsi multi-pemrosesan di notebook terpisah).
  • ECR Amazon - Registry Kontainer Elastis Amazon (Amazon ECR) menyimpan wadah Docker kami.
  • Pekerjaan SageMaker Processing - Kita bisa menjalankan ini pekerjaan pengolahan data pada mesin ML apa pun, dan menjalankan notebook kami dengan parameter.
  • Pelat Data – Layanan ini membantu kita menggunakan SQL dan menggabungkan beberapa sumber data dengan mudah. Itu menerjemahkannya ke kode Spark dan mengoptimalkannya, sambil memantau akses data dan membantu mengurangi pelanggaran data. Versi Xtra memberikan lebih banyak kemampuan.
  • Amazon ESDM – Layanan ini menjalankan ekstraksi data kami sebagai beban kerja melalui Spark, menghubungi semua sumber daya data kami.

Dengan siklus hidup instans notebook SageMaker, kita dapat mengontrol runtime instans notebook maksimum, menggunakan autostop.py Template Script.

Setelah menguji kerangka kerja ML, kami memilih kernel SageMaker MXNet untuk fase pengelompokan dan peringkat kami.

Untuk menguji kode notebook pada data produksi kami, kami menjalankan notebook dengan mengenkapsulasinya melalui Docker di Amazon ECS dan menjalankannya sebagai tugas pemrosesan untuk memvalidasi waktu proses maksimum pada berbagai jenis mesin.

Kontainer Docker juga membantu kami berbagi sumber daya di antara pengujian notebook. Dalam beberapa kasus, sebuah notebook memanggil notebook lain untuk memanfaatkan multi-proses dengan membagi frame data besar menjadi frame data yang lebih kecil, yang dapat berjalan secara bersamaan pada setiap vCPU dalam jenis mesin besar.

Solusi inferensi produksi real-time

Pada tahap penelitian, kami menggunakan Parket Layanan Penyimpanan Sederhana Amazon (Amazon S3) untuk mempertahankan rekomendasi kami. Ini dikonsumsi sekali sehari dari saluran teknik kami untuk melampirkan rekomendasi ke mekanisme peringatan kami.

Namun, peta jalan kami memerlukan solusi kecepatan penyegaran yang lebih tinggi dan penarikan sekali sehari tidaklah cukup dalam jangka panjang, karena kami ingin memberikan rekomendasi bahkan selama penyelidikan.

Untuk menerapkan solusi ini dalam skala besar, kami menguji sebagian besar solusi titik akhir SageMaker dalam penelitian deteksi anomali kami. Kami menguji 500 model pra-bangun dengan mesin titik akhir tunggal dari berbagai jenis dan menggunakan klien multi-utas secara bersamaan untuk melakukan permintaan ke titik akhir. Kami mengukur waktu respons, CPU, memori, dan metrik lainnya (untuk informasi lebih lanjut, lihat Pantau Amazon SageMaker dengan Amazon CloudWatch). Kami menemukan bahwa titik akhir multi-model sangat cocok untuk kasus penggunaan kami.

Titik akhir multi-model dapat mengurangi biaya kami secara dramatis dibandingkan dengan satu titik akhir atau bahkan Kubernetes untuk menggunakan layanan web Flask (atau Python lainnya). Asumsi pertama kami adalah bahwa kami harus menyediakan satu titik akhir, menggunakan mesin kecil 4-vCPU, untuk setiap pelanggan, dan rata-rata kueri empat model khusus, karena setiap vCPU melayani satu model. Dengan titik akhir multi-model, kami dapat menggabungkan lebih banyak pelanggan pada satu mesin multi-titik akhir.

Kami memiliki file model dan penyandian per pelanggan, dan setelah melakukan uji beban, kami memutuskan bahwa kami dapat melayani 50 pelanggan, masing-masing menggunakan 10 model dan bahkan menggunakan instans ml.t2.medium terkecil untuk solusi kami.

Pada tahap ini, kami mempertimbangkan untuk menggunakan titik akhir multi-model. Titik akhir multi-model memberikan solusi yang dapat diskalakan dan hemat biaya untuk menerapkan sejumlah besar model, memungkinkan Anda menghosting beberapa model dengan satu wadah inferensi. Ini mengurangi biaya hosting dengan meningkatkan pemanfaatan titik akhir dibandingkan dengan menggunakan beberapa titik akhir model tunggal kecil yang masing-masing melayani satu pelanggan. Ini juga mengurangi overhead penerapan karena SageMaker mengelola pemuatan model dalam memori dan menskalakannya berdasarkan pola lalu lintas ke model tersebut.

Selain itu, keuntungan titik akhir multi-model adalah jika Anda memiliki tingkat inferensi yang tinggi dari pelanggan tertentu, kerangka kerja mempertahankan model layanan terakhir dalam memori untuk kinerja yang lebih baik.

Setelah kami memperkirakan biaya menggunakan titik akhir multi-model vs. titik akhir standar, kami menemukan bahwa hal itu berpotensi mengurangi biaya sekitar 80%.

Hasilnya

Pada bagian ini, kami meninjau langkah-langkah dan hasil dari proses tersebut.

Kami menggunakan konfigurasi notebook siklus hidup untuk mengaktifkan menjalankan notebook sebagai pekerjaan pemrosesan, dengan merangkum notebook dalam wadah Docker untuk memvalidasi kode lebih cepat dan menggunakan mekanisme autostop:

#!/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 -

Kami mengkloning buku catatan yang dijalankan oleh pembuat bijak proyek GitHub, dan tambahkan yang berikut ke wadah:

  • Persyaratan pip kami
  • Kemampuan untuk menjalankan notebook dari dalam notebook, yang memungkinkan perilaku multi-pemrosesan untuk memanfaatkan semua inti instance ml.m5.12xlarge

Hal ini memungkinkan kami untuk menjalankan alur kerja yang terdiri dari banyak notebook yang berjalan sebagai tugas pemrosesan dalam satu baris kode, sambil menentukan jenis instans yang akan dijalankan.

Karena kami dapat menambahkan parameter ke notebook, kami dapat menskalakan pemrosesan kami dengan menjalankan secara bersamaan pada jam, hari, atau bulan yang berbeda untuk menarik dan memproses data.

Kami juga dapat membuat pekerjaan penjadwalan yang menjalankan notebook (dan bahkan membatasi waktu proses).

Kami juga dapat mengamati proses terakhir dan detailnya, seperti waktu pemrosesan.

Dengan pabrik kertas yang digunakan dalam penampung, kami dapat melihat keluaran setiap proses, yang membantu kami melakukan debug dalam produksi.

Review notebook keluaran kami berupa notebook standar read-only.

Pemanfaatan multi-pemrosesan membantu kami menskalakan setiap pemrosesan notebook dan memanfaatkan semua intinya. Kami membuat fungsi di notebook lain yang dapat melakukan pemrosesan berat, seperti berikut ini:

  • Meledakkan JSON
  • Temukan baris yang relevan dalam DataFrame sementara buku catatan utama memisahkan DataFrame #cpu-cores elemen
  • Jalankan pengelompokan per tindakan jenis peringatan secara bersamaan

Kami kemudian menambahkan notebook fungsional ini ke dalam wadah yang menjalankan notebook sebagai pekerjaan pemrosesan. Lihat file Docker berikut (perhatikan perintah 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

Hasil

Selama fase penelitian, kami mengevaluasi opsi untuk menjalankan notebook kami seperti untuk bereksperimen dan mengevaluasi kinerja kode kami pada semua data yang relevan, bukan hanya sampel data. Kami menemukan bahwa mengenkapsulasi notebook kami menggunakan tugas pemrosesan bisa sangat cocok bagi kami, karena kami tidak perlu menulis ulang kode dan kami dapat memanfaatkan kekuatan komputasi AWS yang dioptimalkan dan instans yang dioptimalkan memori serta mengikuti status proses dengan mudah.

Selama penilaian inferensi, kami mengevaluasi berbagai solusi titik akhir SageMaker. Kami menemukan bahwa menggunakan titik akhir multi-model dapat membantu kami melayani sekitar 50 pelanggan, masing-masing memiliki beberapa (sekitar 10) model dalam satu instans, yang dapat memenuhi batasan latensi rendah kami, dan karenanya menghemat biaya hingga 80% .

Dengan arsitektur solusi ini, kami dapat mengurangi MTTR pelanggan kami, yang merupakan metrik utama untuk mengukur kesuksesan menggunakan platform kami. Ini mengurangi total waktu dari titik menanggapi tautan peringatan kami, yang menjelaskan masalah di sistem Anda, hingga saat Anda selesai menyelidiki masalah tersebut menggunakan platform kami. Selama fase investigasi, kami mengukur tindakan pengguna dengan dan tanpa solusi rekomendasi ML kami. Hal ini membantu kami memberikan rekomendasi tindakan terbaik untuk menyelesaikan masalah tertentu dengan lebih cepat dan menemukan anomali untuk mengidentifikasi penyebab sebenarnya dari masalah tersebut.

Kesimpulan dan langkah selanjutnya

Dalam postingan ini, kami membagikan bagaimana Logz.io menggunakan SageMaker untuk meningkatkan MTTD dan MTTR.

Sebagai langkah selanjutnya, kami mempertimbangkan untuk memperluas solusi dengan fitur berikut:

Kami mendorong Anda untuk mencoba Buku catatan SageMaker. Untuk lebih banyak contoh, lihat Contoh SageMaker repo GitHub.


Tentang Penulis

Amit Kotor memimpin departemen Riset Logz.io, yang bertanggung jawab atas solusi AI dari semua produk Logz.io, dari fase penelitian hingga fase integrasi. Sebelum Logz.io Amit telah mengelola Ilmu Data dan Kelompok Riset Keamanan di Here inc. dan Cellebrite inc. Amit memiliki M.Sc dalam ilmu komputer dari Universitas Tel-Aviv.

Yani Vaknin adalah Spesialis Pembelajaran Mesin di Amazon Web Services. Sebelum AWS, Yaniv memegang posisi kepemimpinan dengan startup AI dan Perusahaan termasuk salah satu pendiri dan CEO Dipsee.ai. Yaniv bekerja dengan pelanggan AWS untuk memanfaatkan kekuatan Machine Learning untuk menyelesaikan tugas dunia nyata dan mendapatkan nilai. Di waktu luangnya, Yaniv senang bermain sepak bola dengan anak laki-lakinya.

Eitan Sela adalah Arsitek Solusi Spesialis Pembelajaran Mesin dengan Amazon Web Services. Dia bekerja dengan pelanggan AWS untuk memberikan panduan dan bantuan teknis, membantu mereka membangun dan mengoperasikan solusi pembelajaran mesin di AWS. Di waktu luangnya, Eitan menikmati jogging dan membaca artikel pembelajaran mesin terbaru.

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

Stempel Waktu:

Lebih dari Blog Pembelajaran Mesin AWS