Miten Logz.io nopeuttaa ML-suosituksia ja poikkeamien havaitsemisratkaisuja Amazon SageMakerin avulla

Lähdesolmu: 1594837

Logz.io on AWS Partner Network (APN) Advanced Technology Partner AWS-osaaminen DevOps-, Security- ja Data & Analytics -aloilla. Logz.io tarjoaa ohjelmistona palveluna (SaaS) havainnointialustan, joka perustuu luokkansa parhaisiin avoimen lähdekoodin ohjelmistoratkaisuihin loki-, mittaus- ja jäljitysanalytiikkaan. Asiakkaat lähettävät Logz.iolle yhä enemmän tietoa eri tietolähteistä hallitakseen sovellusten ja palveluidensa kuntoa ja suorituskykyä. Se voi olla ylivoimaista uusille käyttäjille, jotka haluavat navigoida ajan mittaan rakennetuissa erilaisissa kojelaudoissa, käsitellä erilaisia ​​hälytysilmoituksia ja yhdistää pisteitä tuotantoongelmien vianmäärityksessä.

Keskimääräinen havaitsemisaika (MTTD) ja keskimääräinen havaitsemisaika (MTTR) ovat keskeisiä mittareita asiakkaillemme. Ne lasketaan mittaamalla aikaa, jonka alustamme käyttäjä alkaa tutkia ongelmaa (kuten tuotantopalvelun alasajoa) siihen pisteeseen, kun hän lopettaa tiettyyn tutkimukseen liittyvien toimien suorittamisen alustalla.

Auttaakseen asiakkaita vähentämään MTTD:tä ja MTTR:ää Logz.io siirtyy koneoppimiseen (ML) tarjotakseen suosituksia asiaankuuluvista kojelaudoista ja kyselyistä sekä suorittaakseen poikkeamien havaitsemisen itseoppimisen avulla. Tämän seurauksena keskivertokäyttäjä saa koko yrityksensä kootun kokemuksen hyödyntäen monien viisautta. Huomasimme, että ratkaisumme voi vähentää MTTR:ää jopa 20 %.

MTTD:n pienentyessä käyttäjät voivat tunnistaa ongelman ja ratkaista sen nopeammin. Tietojen semanttinen kerros sisältää semantiikan tutkimuksen aloittamista ja lopettamista varten sekä jokaisen käyttäjän tietyn hälytyksen suhteen tekemän toiminnon suosion.

Tässä viestissä jaamme kuinka Logz.io käytti Amazon Sage Maker vähentääksemme aikaa ja vaivaa proof of concept (POC), kokeilujen tekemiseen tutkimuksesta tuotannon arviointiin ja miten pienensimme tuotantopäätelmäkustannuksiamme.

Haaste

Ennen kuin Logz.io käytti SageMakeria, aika tutkimuksen ja POC-testauksen ja tuotantokokeiden välillä oli melko pitkä. Tämä johtui siitä, että meidän piti luoda Spark-työpaikkoja tietojen keräämiseksi, puhdistamiseksi ja normalisoimiseksi. DevOps vaati tämän työn lukeakseen jokaisen tietolähteen. DevOps ja tietotekniikan taidot eivät kuulu ML-tiimiimme, ja tämä aiheutti suurta riippuvuutta tiimien välillä.

Toinen haaste oli tarjota tuotteillemme ML-johtopäätöspalvelua ja samalla saavuttaa optimaalinen kustannus-suorituskykysuhde. Optimaalinen skenaariomme on tukea mahdollisimman monia malleja laskentayksikölle ja samalla tarjota asiakkaille korkea samanaikaisuus useiden mallien kanssa. Meillä oli joustavuutta päättelyajassamme, koska johtopäätöspalvelun tietovirran ensimmäinen ikkunamme on 5 minuutin lokiämpäri.

Tutkimusvaihe

Datatiede on iteratiivinen prosessi, joka vaatii tutkimukselle interaktiivisen kehitysympäristön, joka validoi datan jokaisessa iteraatiossa ja tietojenkäsittelyssä. Siksi kannustamme ML-tutkijoitamme käyttämään muistikirjoja.

Kiihdyttääksemme iterointisykliä halusimme testata kannettavien tietokoneidemme koodia todellisilla tuotantotiedoilla samalla, kun käytämme sitä mittakaavassa. Lisäksi halusimme välttää DevOpsin ja tietotekniikan pullonkaulan tuotannon alkutestin aikana, samalla kun meillä oli mahdollisuus tarkastella ulostuloja ja yrittää arvioida koodin ajoaikaa.

Tämän toteuttamiseksi halusimme antaa datatieteen tiimillemme täyden hallinnan ja päästä päähän -vastuun tutkimuksesta tuotannon ensimmäiseen testaukseen. Tarvitsimme niitä hakemaan tietoja helposti säilyttäen samalla tietojen käyttöoikeuksien hallinnan ja valvomalla tätä pääsyä. Heidän täytyi myös ottaa mukautetut POC-kannettavat helposti käyttöön tuotantoon skaalautuvalla tavalla ja samalla valvoa ajonaikaa ja odotettuja kustannuksia.

Arviointivaihe

Tämän vaiheen aikana arvioimme muutamia ML-alustoja tukeaksemme sekä koulutus- että palveluvaatimuksia. Huomasimme, että SageMaker on sopivin käyttötapauksillemme, koska se tukee sekä koulutusta että päätelmiä. Lisäksi se on muokattavissa, joten voimme räätälöidä sen haluamamme tutkimusprosessin mukaan.

Aluksi aloitimme paikallisista muistikirjoista ja testasimme erilaisia ​​kirjastoja. Törmäsimme ongelmiin massiivisten tietojen nostamisessa tuotannosta. Myöhemmin olimme jumissa mallinnusvaiheessa, joka kesti useita tunteja paikallisella koneella.

Arvioimme monia ratkaisuja ja valitsimme lopulta seuraavan arkkitehtuurin:

  • DataPlate – Avoimen lähdekoodin versio DataPlate auttoi meitä keräämään ja yhdistämään tietojamme helposti Sparkimme avulla Amazonin EMR klustereita yksinkertaisella SQL:llä ja valvoa tietojen käyttöä
  • SageMaker-muistikirjan ilmentymä ja käsittelytyöt – Tämä auttoi meitä ajon skaalautuvuuden sekä konetyyppien ja ML-kehysten joustavuuden kanssa samalla kun teimme yhteistyötä koodimme kanssa Git-yhteyden kautta

Tutkimusvaiheen ratkaisuarkkitehtuuri

Seuraava kaavio havainnollistaa tutkimusvaiheen ratkaisuarkkitehtuuria ja koostuu seuraavista osista:

  • SageMaker muistikirjat – Datatieteilijät käyttävät näitä kannettavat tietokoneet suorittamaan tutkimustaan.
  • AWS Lambda -toiminto - AWS Lambda on palvelimeton ratkaisu, joka suorittaa käsittelytyön pyynnöstä. Työ käyttää Docker-säilöä kannettavan tietokoneen kanssa, jonka haluamme suorittaa kokeilumme aikana, sekä kaikkien yleisten tiedostojemme kanssa, joiden on tuettava muistikirjaa (requirements.txt ja monikäsittelytoimintojen koodi erillisessä muistikirjassa).
  • Amazon ECR - Amazonin elastisten säiliörekisteri (Amazon ECR) varastoi Docker-konttiamme.
  • SageMaker-työ – Voimme ajaa tämän tietojenkäsittelyn työ missä tahansa ML-koneessa, ja se käyttää muistikirjaamme parametrien kanssa.
  • DataPlate – Tämä palvelu auttaa meitä käyttämään SQL:ää ja liittymään useisiin tietolähteisiin helposti. Se kääntää sen Spark-koodiksi ja optimoi sen samalla, kun se valvoo tietojen käyttöä ja auttaa vähentämään tietomurtoja. Xtra-versio tarjosi vielä enemmän ominaisuuksia.
  • Amazonin EMR – Tämä palvelu suorittaa datapoimimme työkuormina Sparkissa ja ottaa yhteyttä kaikkiin tietoresursseihimme.

SageMaker-kannettavan ilmentymän elinkaaren avulla voimme hallita kannettavan tietokoneen enimmäisajoaikaa käyttämällä autostop.py sapluuna skriptejä.

ML-kehysten testaamisen jälkeen valitsimme SageMaker MXNet -ytimen klusterointi- ja luokitusvaiheihimme.

Testaaksemme kannettavan tietokoneen koodia tuotantotiedoissamme suoritimme kannettavan kapseloimalla sen Dockerin kautta Amazon ECS:ssä ja suoritimme sen prosessointityönä varmistaaksemme maksimikäyttöajan erityyppisissä koneissa.

Docker-säilö auttaa myös meitä jakamaan resursseja kannettavien testien kesken. Joissakin tapauksissa muistikirja kutsuu muita kannettavia käyttämään moniprosessia jakamalla suuret datakehykset pienempiin tietokehyksiin, jotka voivat toimia samanaikaisesti jokaisella vCPU:lla suuressa konetyypissä.

Reaaliaikainen tuotantopäätösratkaisu

Tutkimusvaiheessa käytimme Parkettia Amazonin yksinkertainen tallennuspalvelu (Amazon S3) -tiedostot suositusten säilyttämiseksi. Nämä kulutetaan kerran päivässä suunnitteluputkistamme, jotta suositukset voidaan liittää hälytysmekanismiimme.

Tiekarttamme vaatii kuitenkin korkeamman virkistystaajuuden ratkaisun, eikä kerran päivässä vetäminen riitä pitkällä tähtäimellä, sillä haluamme antaa suosituksia myös tutkimuksen aikana.

Tämän ratkaisun toteuttamiseksi mittakaavassa testasimme useimpia SageMaker-päätepisteratkaisuja poikkeamien havaitsemistutkimuksessamme. Testasimme 500 esivalmistettua mallia yhdellä erityyppisellä päätepistekoneella ja käytimme samanaikaisia ​​monisäikeisiä asiakkaita suorittamaan pyyntöjä päätepisteeseen. Mittasimme vasteajan, suorittimen, muistin ja muita mittareita (lisätietoja on kohdassa Seuraa Amazon SageMakeria Amazon CloudWatch -sovelluksella). Huomasimme, että usean mallin päätepiste sopii täydellisesti käyttötapauksillemme.

Usean mallin päätepiste voi vähentää kustannuksiamme dramaattisesti verrattuna yhteen päätepisteeseen tai jopa Kubernetesiin käyttää Flask- (tai muita Python-verkkopalveluja). Ensimmäinen oletuksemme oli, että meidän on tarjottava jokaiselle asiakkaalle yksi päätepiste, jossa käytetään 4 vCPU:n pientä konetta, ja pyydettävä keskimäärin neljää erillistä mallia, koska jokainen vCPU palvelee yhtä mallia. Monen mallin päätepisteen avulla voisimme yhdistää useampia asiakkaita yhteen usean päätepisteen koneeseen.

Meillä oli malli- ja koodaustiedostot asiakasta kohden, ja kuormitustestien jälkeen päätimme, että voimme palvella 50 asiakasta, joista jokainen käyttää 10 mallia ja jopa pienintä ml.t2.medium-instanssia ratkaisuissamme.

Tässä vaiheessa harkitsimme käyttöä usean mallin päätepisteet. Usean mallin päätepisteet tarjoavat skaalautuvan ja kustannustehokkaan ratkaisun useiden mallien käyttöönottamiseksi, jolloin voit isännöidä useita malleja yhdellä päättelysäilillä. Tämä vähentää isännöintikustannuksia parantamalla päätepisteiden käyttöä verrattuna useiden pienten yhden mallin päätepisteiden käyttöön, joista jokainen palvelee yhtä asiakasta. Se myös vähentää käyttöönoton yleiskustannuksia, koska SageMaker hallitsee mallien lataamista muistiin ja skaalaa niitä niihin suuntautuvien liikennemallien perusteella.

Lisäksi usean mallin päätepisteen etuna on, että jos sinulla on korkea päättelyaste tietyiltä asiakkailta, sen kehys säilyttää viimeiset mallit muistissa suorituskyvyn parantamiseksi.

Kun arvioimme kustannukset käyttämällä usean mallin päätepisteitä verrattuna vakiopäätepisteisiin, huomasimme, että se voisi mahdollisesti johtaa noin 80 prosentin kustannusten alenemiseen.

Lopputulos

Tässä osiossa tarkastellaan prosessin vaiheita ja tuloksia.

Käytämme elinkaarimuistikirjan konfiguraatiota mahdollistaaksemme kannettavien käyttämisen prosessointitöinä kapseloimalla muistikirjan Docker-säilöön, jotta koodi voidaan vahvistaa nopeammin ja käyttää automaattista pysäytysmekanismia:

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

Kloonaamme sagemaker-run-notebook GitHub-projekti ja lisää seuraava säilöön:

  • Pip-vaatimukset
  • Mahdollisuus käyttää muistikirjoja kannettavasta tietokoneesta, mikä mahdollistaa usean käsittelyn, jotta voimme hyödyntää kaikki ml.m5.12xlarge ilmentymäytimet

Tämän ansiosta voimme suorittaa työnkulkuja, jotka koostuvat monista muistikirjoista, jotka toimivat käsittelytöinä koodirivillä, ja samalla määritämme suoritettavan ilmentymän tyypin.

Koska voimme lisätä muistikirjaan parametreja, voimme skaalata prosessointiamme suorittamalla tietoja samanaikaisesti eri kellonaikoina, päivinä tai kuukausina tietojen hakemiseksi ja käsittelemiseksi.

Voimme myös luoda aikataulutöitä, jotka käyttävät muistikirjoja (ja jopa rajoittaa suoritusaikaa).

Voimme myös tarkkailla viimeisiä ajoja ja niiden yksityiskohtia, kuten käsittelyaikaa.

Säiliössä käytettävän paperitehtaan avulla voimme tarkastella jokaisen ajon tuotoksia, mikä auttaa meitä virheenkorjauksessa tuotannossa.

Kannettavien tulosteiden arvostelumme on tavallisen vain luku -muistikirjan muodossa.

Monikäsittelyn käyttö auttaa meitä skaalaamaan jokaisen kannettavan tietokoneen käsittelyn ja hyödyntämään sen kaikkia ydintä. Loimme muihin muistikirjoihin toimintoja, jotka voivat tehdä raskaan käsittelyn, kuten seuraavat:

  • Explode JSONit
  • Etsi tärkeitä rivejä DataFramesta, kun päämuistikirja jakaa DataFramen #cpu-cores elementtejä
  • Suorita klusterointitoimintoja hälytystyyppikohtaisesti samanaikaisesti

Lisäämme sitten nämä toiminnalliset muistikirjat säiliöön, joka suorittaa muistikirjaa käsittelytyönä. Katso seuraava Docker-tiedosto (huomaa COPY-komennot):

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

tulokset

Tutkimusvaiheessa arvioimme mahdollisuutta käyttää muistikirjojamme samalla tavalla kuin kokeilla ja arvioida, kuinka koodimme toimii kaikessa oleellisessa datassamme, ei vain näytteessä tiedoista. Huomasimme, että muistikirjojen kapseloiminen prosessointitöiden avulla voi sopia meille hyvin, koska meidän ei tarvitse kirjoittaa koodia uudelleen ja voimme hyödyntää AWS:n laskenta- ja muistioptimoituja instansseja ja seurata prosessin tilaa helposti.

Päätelmäarvioinnin aikana arvioimme erilaisia ​​SageMaker-päätepisteratkaisuja. Huomasimme, että usean mallin päätepisteen käyttö voi auttaa meitä palvelemaan noin 50 asiakasta, joista jokaisella on useita (noin 10) mallia yhdessä esiintymässä, mikä voi täyttää alhaisen viiveen rajoituksemme ja säästää siten jopa 80 % kustannuksista. .

Tämän ratkaisuarkkitehtuurin avulla pystyimme pienentämään asiakkaidemme MTTR-arvoa, joka on tärkein mittari alustamme menestyksen mittaamiseksi. Se lyhentää kokonaisaikaa vastaamisesta hälytyslinkkiimme, joka kuvaa järjestelmissäsi olevaa ongelmaa, siihen, kun olet lopettanut ongelman tutkimisen alustallamme. Tutkimusvaiheessa mittaamme käyttäjien toimintaa ML-suositusratkaisumme kanssa ja ilman. Tämä auttaa meitä antamaan suosituksia parhaista toimista tietyn ongelman ratkaisemiseksi nopeammin ja tunnistamaan poikkeamat ongelman todellisen syyn tunnistamiseksi.

Johtopäätös ja seuraavat vaiheet

Tässä viestissä jaoimme kuinka Logz.io käytti SageMakeria MTTD:n ja MTTR:n parantamiseen.

Seuraavana vaiheena harkitsemme ratkaisun laajentamista seuraavilla ominaisuuksilla:

Kannustamme sinua kokeilemaan SageMaker muistikirjat. Jos haluat lisää esimerkkejä, katso SageMaker esimerkkejä GitHub reposta.


Tietoja Tekijät

Amit Gross johtaa Logz.ion tutkimusosastoa, joka vastaa kaikkien Logz.io-tuotteiden tekoälyratkaisuista tutkimusvaiheesta integraatiovaiheeseen. Ennen Logz.iota Amit on johtanut sekä tietotieteen että tietoturvan tutkimusryhmiä Here inc.:ssä. ja Cellebrite Inc. Amitilla on tietojenkäsittelytieteen maisteri Tel-Avivin yliopistosta.

Yaniv Vaknin on koneoppimisen asiantuntija Amazon Web Servicesissä. Ennen AWS:ää Yaniv toimi johtavissa tehtävissä AI-startupeissa ja Enterprisessa, mukaan lukien Dipsee.ai:n perustaja ja toimitusjohtaja. Yaniv työskentelee AWS-asiakkaiden kanssa hyödyntääkseen koneoppimisen tehoa todellisten tehtävien ratkaisemiseksi ja arvon saamiseksi. Vapaa-ajallaan Yaniv nauttii jalkapallon pelaamisesta poikiensa kanssa.

Eitan Sela on koneoppimisen asiantuntijaratkaisujen arkkitehti Amazon Web Services -palvelussa. Hän työskentelee AWS-asiakkaiden kanssa tarjotakseen ohjausta ja teknistä tukea, mikä auttaa heitä rakentamaan ja käyttämään koneoppimisratkaisuja AWS:ssä. Vapaa-ajallaan Eitan nauttii lenkkeilystä ja uusimpien koneoppimisartikkelien lukemisesta.

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

Aikaleima:

Lisää aiheesta AWS-koneoppimisblogi