Logz.io, Amazon SageMaker ile makine öğrenimi önerilerini ve anormallik algılama çözümlerini nasıl hızlandırır?

Kaynak Düğüm: 1594837

Logz.io AWS İş Ortağı Ağı (APN) Gelişmiş Teknoloji İş Ortağıdır. DevOps, Güvenlik ve Veri ve Analitik Alanında AWS Yetkinlikleri. Logz.io, log, metrik ve izleme analitiği için sınıfının en iyisi açık kaynaklı yazılım çözümlerini temel alan bir hizmet olarak yazılım (SaaS) gözlemlenebilirlik platformu sunar. Müşteriler, uygulamalarının ve hizmetlerinin durumunu ve performansını yönetmek için Logz.io'ya çeşitli veri kaynaklarından giderek artan miktarda veri gönderiyor. Zaman içinde oluşturulan çeşitli kontrol panelleri arasında gezinmek, farklı uyarı bildirimlerini işlemek ve üretim sorunlarını giderirken noktaları birleştirmek isteyen yeni kullanıcılar için bu çok zor olabilir.

Ortalama tespit süresi (MTTD) ve ortalama çözüm süresi (MTTR), müşterilerimiz için temel ölçümlerdir. Platformumuzdaki bir kullanıcının bir sorunu (üretim hizmetinin devre dışı kalması gibi) araştırmaya başladığı ve platformda belirli bir incelemeyle ilgili eylemleri yapmayı bıraktığı noktaya kadar geçen süre ölçülerek hesaplanır.

Müşterilerin MTTD ve MTTR'yi azaltmalarına yardımcı olmak amacıyla Logz.io, ilgili kontrol panelleri ve sorgular için öneriler sağlamak ve kendi kendine öğrenme yoluyla anormallik tespiti gerçekleştirmek amacıyla makine öğrenimine (ML) yöneliyor. Sonuç olarak, ortalama bir kullanıcı, şirketlerinin tamamının toplu deneyimiyle donatılır ve birçok kişinin bilgeliğinden yararlanır. Çözümümüzün MTTR'yi %20'ye kadar azaltabileceğini gördük.

MTTD azaldıkça kullanıcılar sorunu tanımlayıp daha hızlı çözebilir. Veri semantik katmanımız, bir araştırmayı başlatmak ve durdurmak için semantiği ve kullanıcının belirli bir uyarıya göre yaptığı her eylemin popülerliğini içerir.

Bu yazıda Logz.io'nun nasıl kullanıldığını paylaşıyoruz Amazon Adaçayı Yapıcı kavram kanıtımıza (POC), araştırmadan üretim değerlendirmesine kadar olan deneylere ve üretim çıkarım maliyetimizi nasıl düşürdüğümüze yönelik zaman ve çabayı azaltmak.

Meydan okuma

Logz.io, SageMaker'ı kullanana kadar araştırmadan POC testine ve üretim deneylerine kadar geçen süre oldukça uzundu. Bunun nedeni, verileri toplamak, temizlemek ve normalleştirmek için Spark işleri oluşturmamız gerekmesiydi. DevOps, her veri kaynağını okumak için bu çalışmayı gerektiriyordu. DevOps ve veri mühendisliği becerileri makine öğrenimi ekibimizin bir parçası değil ve bu durum ekipler arasında yüksek düzeyde bağımlılığa neden oldu.

Diğer bir zorluk da optimum maliyet-performans oranına ulaşırken ürünlerimize makine öğrenimi çıkarım hizmeti sağlamaktı. Optimum senaryomuz, bir bilgi işlem birimi için mümkün olduğunca çok sayıda modeli desteklerken aynı zamanda birçok modelle müşterilerden yüksek eşzamanlılık sağlamaktır. Çıkarım hizmeti için veri akışına ilişkin ilk penceremiz 5 dakikalık günlük kümesi olduğundan, çıkarım süremiz konusunda esnekliğe sahiptik.

Araştırma aşaması

Veri bilimi, araştırma için etkileşimli bir geliştirme ortamı gerektiren, her yinelemede ve veri işlemede veri çıktısını doğrulayan yinelemeli bir süreçtir. Bu nedenle makine öğrenimi araştırmacılarımızı not defterlerini kullanmaya teşvik ediyoruz.

Yineleme döngüsünü hızlandırmak için dizüstü bilgisayarlarımızın kodunu gerçek üretim verileri üzerinde geniş ölçekte çalıştırırken test etmek istedik. Ayrıca, üretimdeki ilk test sırasında DevOps ve veri mühendisliğinin darboğazından kaçınmak, aynı zamanda çıktıları görüntüleme ve kod çalışma süresini tahmin etme olanağına sahip olmak istedik.

Bunu uygulamak için veri bilimi ekibimize araştırmadan üretimdeki ilk teste kadar tam kontrol ve uçtan uca sorumluluk sağlamak istedik. Veri erişim yönetimini korurken ve bu erişimi izlerken verileri kolayca çekmelerine ihtiyacımız vardı. Ayrıca çalışma süresini ve beklenen maliyetleri izlerken özel POC dizüstü bilgisayarlarını ölçeklenebilir bir şekilde üretime kolayca dağıtmaları gerekiyordu.

Değerlendirme aşaması

Bu aşamada hem eğitim hem de hizmet gereksinimlerini desteklemek için birkaç makine öğrenimi platformunu değerlendirdik. Hem eğitimi hem de çıkarımı desteklediği için SageMaker'ın kullanım durumlarımız için en uygun çözüm olduğunu gördük. Üstelik özelleştirilebilir olduğundan tercih ettiğimiz araştırma sürecine göre özelleştirebiliriz.

Başlangıçta çeşitli kütüphaneleri test ederek yerel not defterlerinden başladık. Üretimden büyük miktarda veri çekerken sorunlarla karşılaştık. Daha sonra modelleme aşamasının yerel bir makinede saatler süren bir noktasında sıkışıp kaldık.

Birçok çözümü değerlendirdik ve sonunda aşağıdaki mimariyi seçtik:

  • Veri levhası – Açık kaynak sürümü Veri levhası Spark'ımızı kullanarak verilerimizi kolayca alıp birleştirmemize yardımcı oldu Amazon EMR'si veri erişimini izlerken basit bir SQL ile kümeler
  • SageMaker not defteri örneği ve işleme işleri – Bu, bir Git bağlantısı aracılığıyla kodumuzla işbirliği yaparken çalışma zamanının ölçeklenebilirliği ve makine türleri ile ML çerçevelerinin esnekliği konusunda bize yardımcı oldu

Araştırma aşaması çözüm mimarisi

Aşağıdaki diyagram araştırma aşamasının çözüm mimarisini göstermektedir ve aşağıdaki bileşenlerden oluşmaktadır:

  • SageMaker not defterleri – Veri bilimcileri bunları kullanıyor dizüstü bilgisayarlar araştırmalarını yürütmek.
  • AWS Lambda işlevi - AWS Lambda talep üzerine bir işleme işini yürüten sunucusuz bir çözümdür. İş, denememiz sırasında çalıştırmak istediğimiz not defterini ve not defterini desteklemesi gereken tüm ortak dosyalarımızı içeren bir Docker kapsayıcısı kullanıyor (requirements.txt ve çoklu işlem fonksiyonlarının kodunu ayrı bir not defterinde bulabilirsiniz).
  • Amazon ECR'si - Amazon Elastik Konteyner Kayıt Defteri (Amazon ECR) Docker konteynerimizi saklar.
  • SageMaker İşleme işi – Bunu çalıştırabiliriz veri işleme işi herhangi bir ML makinesinde ve not defterimizi parametrelerle çalıştırır.
  • Veri levhası – Bu hizmet SQL kullanmamıza ve çeşitli veri kaynaklarını kolayca birleştirmemize yardımcı olur. Veri erişimini izlerken ve veri ihlallerinin azaltılmasına yardımcı olurken bunu Spark koduna çevirir ve optimize eder. Xtra sürümü daha da fazla yetenek sağlıyordu.
  • Amazon EMR'si – Bu hizmet, tüm veri kaynaklarımızla iletişim kurarak veri çıkarma işlemlerimizi Spark üzerinden iş yükü olarak çalıştırır.

SageMaker dizüstü bilgisayar örneği yaşam döngüsüyle, maksimum dizüstü bilgisayar örneği çalışma süresini aşağıdakileri kullanarak kontrol edebiliriz: autostop.py şablon komut.

ML çerçevelerini test ettikten sonra kümeleme ve sıralama aşamalarımız için SageMaker MXNet çekirdeğini seçtik.

Dizüstü bilgisayar kodunu üretim verilerimizde test etmek için, dizüstü bilgisayarı Amazon ECS'de Docker aracılığıyla kapsülleyerek çalıştırdık ve farklı türdeki makinelerde maksimum çalışma süresini doğrulamak için bir işlem işi olarak çalıştırdık.

Docker kapsayıcısı aynı zamanda dizüstü bilgisayarların testleri arasında kaynakları paylaşmamıza da yardımcı olur. Bazı durumlarda bir dizüstü bilgisayar, büyük veri çerçevelerini, büyük bir makine türündeki her vCPU üzerinde aynı anda çalışabilen daha küçük veri çerçevelerine bölerek çoklu işlemden yararlanmak için diğer dizüstü bilgisayarları çağırır.

Gerçek zamanlı üretim çıkarımı çözümü

Araştırma aşamasında Parke kullandık Amazon Basit Depolama Hizmeti (Amazon S3) dosyalarını kullanarak önerilerimizi koruyabilirsiniz. Bunlar, önerilerin uyarı mekanizmamıza eklenmesi için mühendislik hattımızdan günde bir kez tüketilir.

Ancak yol haritamız daha yüksek yenileme hızına sahip bir çözüm gerektiriyor ve günde bir kez çekmek uzun vadede yeterli olmuyor çünkü inceleme sırasında bile önerilerde bulunmak istiyoruz.

Bu çözümü geniş ölçekte uygulamak için anormallik tespit araştırmamızda SageMaker uç nokta çözümlerinin çoğunu test ettik. Çeşitli türlerdeki tek bir uç nokta makinesiyle önceden oluşturulmuş 500 modeli test ettik ve uç noktaya istekleri gerçekleştirmek için eş zamanlı çok iş parçacıklı istemciler kullandık. Yanıt süresini, CPU'yu, belleği ve diğer ölçümleri ölçtük (daha fazla bilgi için bkz. Amazon CloudWatch ile Amazon SageMaker'ı izleyin). Çoklu model uç noktasının kullanım durumlarımıza mükemmel uyum sağladığını gördük.

Çok modelli bir uç nokta, tek bir uç noktaya ve hatta Flask (veya diğer Python) web hizmetlerini kullanan Kubernetes'e kıyasla maliyetlerimizi önemli ölçüde azaltabilir. İlk varsayımımız, her müşteri için 4 vCPU'lu küçük bir makine kullanarak tek bir uç nokta sağlamamız gerektiği ve her vCPU bir modele hizmet ettiğinden ortalama olarak dört özel modeli sorgulamamız gerektiğiydi. Çok modelli uç nokta sayesinde, daha fazla müşteriyi tek bir çok uç noktalı makinede toplayabiliriz.

Müşteri başına bir model ve kodlama dosyamız vardı ve yük testleri yaptıktan sonra her biri 50 model kullanan ve hatta çözümlerimiz için en küçük ml.t10.medium örneğini kullanan 2 müşteriye hizmet verebileceğimize karar verdik.

Bu aşamada kullanmayı düşündük. çok modelli uç noktalar. Çok modelli uç noktalar, çok sayıda modeli dağıtmak için ölçeklenebilir ve uygun maliyetli bir çözüm sunarak tek bir çıkarım kapsayıcısında birden çok modeli barındırmanıza olanak tanır. Bu, her biri tek bir müşteriye hizmet veren birden fazla küçük tek model uç noktanın kullanılmasıyla karşılaştırıldığında uç nokta kullanımını iyileştirerek barındırma maliyetlerini azaltır. Ayrıca SageMaker, modelleri belleğe yüklemeyi ve bunları trafik modellerine göre ölçeklendirmeyi yönettiği için dağıtım yükünü de azaltır.

Ayrıca, çok modelli uç nokta avantajı, belirli müşterilerden yüksek bir çıkarım oranınız varsa, çerçevesinin daha iyi performans için son hizmet veren modelleri bellekte korumasıdır.

Çok modelli uç noktaları ve standart uç noktaları kullanarak maliyetleri tahmin ettikten sonra, bunun potansiyel olarak yaklaşık %80 oranında maliyet azalmasına yol açabileceğini gördük.

Sonuç

Bu bölümde sürecin adımlarını ve sonucunu inceliyoruz.

Kodu daha hızlı doğrulamak ve otomatik durdurma mekanizmasını kullanmak amacıyla dizüstü bilgisayarı bir Docker kapsayıcısına yerleştirerek dizüstü bilgisayarların işlem işleri olarak çalıştırılmasını sağlamak için yaşam döngüsü dizüstü bilgisayar yapılandırmasını kullanıyoruz:

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

Biz klonlarız sagemaker-run-notebook GitHub projenizi oluşturun ve kapsayıcıya aşağıdakileri ekleyin:

  • Pip gereksinimlerimiz
  • Tüm ml.m5.12xlarge örnek çekirdeklerini kullanmamızı sağlayan çoklu işlem davranışını mümkün kılan, dizüstü bilgisayarları bir dizüstü bilgisayar içinden çalıştırma yeteneği

Bu, üzerinde çalışılacak örnek türünü tanımlarken, bir kod satırında iş işleyen birçok not defterinden oluşan iş akışlarını çalıştırmamıza olanak tanır.

Not defterine parametreler ekleyebildiğimiz için, verileri alıp işlemek için farklı saatlerde, günlerde veya aylarda eşzamanlı olarak çalışarak işlememizi ölçeklendirebiliriz.

Ayrıca not defterlerini çalıştıran (ve hatta çalışma süresini sınırlayan) planlama işleri de oluşturabiliriz.

Ayrıca son çalıştırmaları ve bunların işlem süresi gibi ayrıntılarını da gözlemleyebiliyoruz.

Konteynerde kullanılan kağıt fabrikası ile her çalışmanın çıktısını görebiliyoruz, bu da üretimde hata ayıklamamıza yardımcı oluyor.

Dizüstü bilgisayar çıktısı incelememiz standart salt okunur not defteri biçimindedir.

Çoklu işlem kullanımı, her bir dizüstü bilgisayar işlemini ölçeklendirmemize ve tüm çekirdeklerini kullanmamıza yardımcı olur. Diğer dizüstü bilgisayarlarda aşağıdakiler gibi ağır işlem yapabilen işlevler oluşturduk:

  • JSON'ları patlat
  • Ana not defteri DataFrame'i bölerken DataFrame'de ilgili satırları bulun #cpu-cores elemanları
  • Uyarı türü eylemlerine göre kümelemeyi aynı anda çalıştırın

Daha sonra bu işlevsel not defterlerini, not defterini bir işlem işi olarak çalıştıran konteynere ekliyoruz. Aşağıdaki Docker dosyasına bakın (COPY komutlarına dikkat edin):

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

Sonuçlar

Araştırma aşamasında, not defterlerimizi çalıştırma seçeneğini, kodumuzun yalnızca bir veri örneği üzerinde değil, ilgili tüm verilerimizde nasıl performans gösterdiğini denemek ve değerlendirmek için değerlendirdik. Not defterlerimizi işleme işlerini kullanarak kapsüllemenin bizim için çok uygun olabileceğini gördük çünkü kodu yeniden yazmamıza gerek yok ve AWS'nin işlem için optimize edilmiş ve bellek için optimize edilmiş örneklerinin gücünden yararlanabiliyor ve sürecin durumunu kolayca takip edebiliyoruz.

Çıkarım değerlendirmesi sırasında çeşitli SageMaker uç nokta çözümlerini değerlendirdik. Çok modelli bir uç nokta kullanmanın, her biri tek bir örnekte birden fazla (yaklaşık 50) modele sahip olan yaklaşık 10 müşteriye hizmet vermemize yardımcı olabileceğini, bunun da düşük gecikme kısıtlamalarımızı karşılayabileceğini ve dolayısıyla maliyetten %80'e kadar tasarruf etmemize yardımcı olabileceğini gördük. .

Bu çözüm mimarisiyle, platformumuzu kullanarak başarının ölçülmesinde temel bir ölçü olan müşterilerimizin MTTR'sini azaltmayı başardık. Sistemlerinizdeki bir sorunu açıklayan uyarı bağlantımıza yanıt verdiğiniz andan, platformumuzu kullanarak sorunu araştırmayı bitirdiğiniz ana kadar geçen toplam süreyi azaltır. İnceleme aşamasında, ML öneri çözümümüz varken ve yokken kullanıcıların eylemlerini ölçüyoruz. Bu, belirli bir sorunu daha hızlı çözmek için en iyi eyleme yönelik öneriler sunmamıza ve sorunun gerçek nedenini belirlemek için anormallikleri belirlememize yardımcı olur.

Sonuç ve sonraki adımlar

Bu yazıda Logz.io'nun MTTD ve MTTR'yi geliştirmek için SageMaker'ı nasıl kullandığını paylaştık.

Bir sonraki adım olarak çözümü aşağıdaki özelliklerle genişletmeyi düşünüyoruz:

Denemenizi öneririz SageMaker not defterleri. Daha fazla örnek için şuraya göz atın: SageMaker örnekleri GitHub deposu.


Yazarlar Hakkında

Amit Brüt Logz.io'nun tüm Logz.io ürünlerinin yapay zeka çözümlerinden araştırma aşamasından entegrasyon aşamasına kadar sorumlu olan Araştırma departmanına liderlik ediyor. Logz.io'dan önce Amit, Here Inc.'de hem Veri Bilimi hem de Güvenlik Araştırma Gruplarını yönetmişti. ve Cellebrite Inc. Amit, Tel-Aviv Üniversitesi'nden bilgisayar bilimi alanında yüksek lisans derecesine sahiptir.

Yaniv Vaknin Amazon Web Services'te Makine Öğrenimi Uzmanıdır. AWS'den önce Yaniv, Dipsee.ai'nin kurucu ortağı ve CEO'su da dahil olmak üzere AI startup'ları ve Enterprise'da liderlik pozisyonlarında bulundu. Yaniv, gerçek dünyadaki görevleri çözmek ve değer elde etmek amacıyla Makine Öğreniminin gücünden yararlanmak için AWS müşterileriyle birlikte çalışıyor. Yaniv boş zamanlarında çocuklarıyla futbol oynamaktan hoşlanıyor.

Eitan Sela Amazon Web Services ile Makine Öğrenimi Uzmanı Çözümler Mimarıdır. AWS müşterileriyle birlikte çalışarak rehberlik ve teknik yardım sağlayarak onların AWS'de makine öğrenimi çözümleri oluşturmalarına ve çalıştırmalarına yardımcı olur. Eitan boş zamanlarında koşu yapmaktan ve en yeni makine öğrenimi makalelerini okumaktan hoşlanır.

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

Zaman Damgası:

Den fazla AWS Makine Öğrenimi Blogu