Suorita tietokonenäköpäätelmä suurissa videoissa Amazon SageMakerin asynkronisten päätepisteiden avulla

Lähdesolmu: 1139696

AWS-asiakkaat käyttävät yhä useammin tietokonenäkömalleja (CV) suurilla syöttöhyötykuormilla, jotka voivat viedä muutaman minuutin käsittelyaikaa. Esimerkiksi avaruusteknologiayritykset työskentelevät korkearesoluutioisten satelliittikuvien avulla havaitakseen tiettyjä kiinnostavia kohteita. Vastaavasti terveydenhuoltoyritykset käsittelevät korkearesoluutioisia biolääketieteellisiä kuvia tai videoita, kuten kaikukardiogrammia, poikkeamien havaitsemiseksi. Lisäksi mediayritykset skannaavat asiakkaidensa lataamia kuvia ja videoita varmistaakseen, että ne ovat vaatimusten mukaisia ​​ja ilman tekijänoikeusrikkomuksia. Nämä sovellukset vastaanottavat saapuvan liikenteen purskeita eri aikoina vuorokaudessa ja vaativat lähes reaaliaikaisen käsittelyn sekä valmistumisilmoitukset alhaisella hinnalla.

Voit rakentaa CV-malleja useilla syväoppimiskehyksillä, kuten TensorFlow, PyTorch ja Apache MXNet. Näissä malleissa on yleensä suuri hyötykuorma, kuten kuvia tai videoita. Kehittyneet syväoppimismallit käyttötapauksiin, kuten objektien havaitsemiseen, palauttavat suuret vastaushyötykuormat, joiden koko vaihtelee kymmenistä megatavuista satoihin megatavuihin. Lisäksi korkearesoluutioiset videot vaativat laskentaintensiivistä esikäsittelyä ennen mallin päättelyä. Käsittelyajat voivat vaihdella minuuttien luokkaa, mikä poistaa mahdollisuuden suorittaa reaaliaikaisia ​​päätelmiä välittämällä hyötykuormat HTTP API:n kautta. Sen sijaan on tarpeen käsitellä syötetyt hyötykuormat asynkronisesti objektivarastosta, kuten Amazonin yksinkertainen tallennuspalvelu (Amazon S3), jossa on automaattinen jonotus ja ennalta määritetty samanaikaisuuskynnys. Järjestelmän pitäisi pystyä vastaanottamaan tilailmoituksia ja eliminoimaan tarpeettomia kustannuksia puhdistamalla resursseja tehtävien valmistuttua.

Amazon Sage Maker auttaa datatieteilijöitä ja kehittäjiä valmistelemaan, rakentamaan, kouluttamaan ja ottamaan käyttöön korkealaatuisia koneoppimismalleja (ML) nopeasti yhdistämällä laajan joukon ML:tä varten suunniteltuja ominaisuuksia. SageMaker tarjoaa huippuluokan avoimen lähdekoodin mallin palvelevia säiliöitä XGBoostille (astia, SDK), Scikit-Learn (astia, SDK), PyTorch (astia, SDK), TensorFlow (astia, SDK) ja Apache MXNet (astia, SDK). SageMaker tarjoaa kolme vaihtoehtoa koulutettujen ML-mallien käyttöönottamiseksi johtopäätösten luomiseksi uusista tiedoista:

  • Reaaliaikainen päätelmä päätepisteet sopivat työkuormille, jotka on käsiteltävä pienillä latenssivaatimuksilla.
  • Erämuunnos sopii erinomaisesti offline-ennusteisiin suurista tietoeristä, joita kerätään tietyn ajanjakson aikana.
  • Asynkroninen päättely päätepisteet jonottavat saapuvia pyyntöjä ja ovat ihanteellisia työkuormille, joissa pyyntöjen koot ovat suuria (jopa 1 Gt) ja päätelmien käsittelyajat ovat minuuttien luokkaa (jopa 15 minuuttia). Asynkronisen päättelyn avulla voit säästää kustannuksissa skaalaamalla ilmentymien lukumäärän automaattisesti nollaan, kun käsiteltäviä pyyntöjä ei ole.

Tässä viestissä näytämme sinulle, kuinka PyTorch CV -mallia palvellaan SageMakerin asynkronisella päättelyllä Amazon S3:een ladattujen suurten syöttöhyötyvideoiden purskeliikenteen käsittelemiseksi. Esittelemme sisäisen jonon uudet ominaisuudet käyttäjän määrittämillä samanaikaisuus- ja valmistumisilmoituksilla. Määritämme esiintymien automaattisen skaalauksen skaalautumaan nollaan, kun liikenne lakkaa, ja skaalaamme takaisin ylös, kun pyyntöjono täyttyy. Käytämme g0dn-instanssia Nvidia T4 GPU:n ja SageMakerin kanssa valmiiksi rakennettu TorchServe-säiliö mukautetulla päättelyskriptillä videoiden esikäsittelyä varten ennen mallin kutsumista, ja amazonin pilvikello mittareita, joilla seurataan jonon kokoa, kokonaiskäsittelyaikaa, käsiteltyjä kutsuja ja paljon muuta.

Tämän esimerkin koodi on saatavilla osoitteessa GitHub.

Ratkaisun yleiskatsaus

Seuraava kaavio kuvaa ratkaisuarkkitehtuuriamme.

Mallimme isännöi ensin skaalauspäätepisteessä. Seuraavaksi käyttäjä tai jokin muu mekanismi lataa videotiedoston S3-syötteeseen. Käyttäjä kutsuu päätepisteen ja hänelle palautetaan välittömästi Amazon S3 -lähtösijainti, johon päättely kirjoitetaan. Kun päättely on valmis, tulos tallennetaan lähtöön S3 ja an Amazonin yksinkertainen ilmoituspalvelu (Amazon SNS) -ilmoitus lähetetään käyttäjälle, joka ilmoittaa suoritetusta onnistumisesta tai epäonnistumisesta.

Käytä tapausmallia

Tässä esineentunnistusesimerkissä käytämme TorchVisionia Naamio-RCNN malli, joka on esikoulutettu 91 luokassa, ja se osoittaa päättelyn pinotussa 4D-video Tensorissa. Koska havaitsemme esineitä suuresta syöttöhyötykuormasta, joka vaatii esikäsittelyä, kokonaisviive voi olla huomattava. Vaikka tämä ei ole ihanteellinen reaaliaikaiselle päätepisteelle, se on helppo käsitellä asynkronisilla päätepisteillä, jotka käsittelevät jonon ja tallentavat tulokset Amazon S3 -tulostuspaikkaan.

Tämän mallin isännöimiseksi käytämme valmiiksi rakennettua SageMaker-ohjelmaa PyTorch-johtopäätössäilö joka käyttää SoihtuPalvelu mallin tarjoilupino. SageMaker-säilöjen avulla voit tarjota oman päätelmäkoodisi, mikä antaa sinulle joustavuutta esi- ja jälkikäsittelyn käsittelyssä sekä sanelee, kuinka mallisi on vuorovaikutuksessa tietojen kanssa.

Tulo- ja lähtöhyötykuorma

Tässä esimerkissä käytämme sisääntulovideota, jonka koko on 71 Mt tätä. Asynkronisen päätepisteen päättelykäsittelijä odottaa mp4-videota, joka jaetaan 1024x1024x3-tensoreihin jokaista videosekuntia kohden. Tämän käsittelijän määrittelemiseksi tarjoamme päätepisteelle mukautetun inference.py käsikirjoitus. Skripti tarjoaa toimintoja mallin lataamiseen, tietojen serialisointiin ja deserialisointiin, esikäsittelyyn ja ennustamiseen. Käsittelijän sisällä meidän input_fn kutsuu aputoimintoa, joka tunnetaan nimellä video2frames:

video_frames = []
cap = cv2.VideoCapture(tfile.name)
frame_index, frame_count = 0, 0 if cap.isOpened(): success = True else: success = False while success: success, frame = cap.read() if frame_index % interval == 0: print("---> Reading the %d frame:" % frame_index, success) resize_frame = cv2.resize( frame, (frame_width, frame_height), interpolation=cv2.INTER_AREA ) video_frames.append(resize_frame) frame_count += 1 frame_index += 1 cap.release()
return video_frames

Nämä pinotut tensorit käsitellään Mask-RCNN-mallillamme, joka tallentaa tuloksen JSON:n, joka sisältää havaittujen objektien rajaavat laatikot, tunnisteet ja pisteet. Tässä esimerkissä lähtöhyötykuorma on 54 Mt. Esittelemme tulosten nopean visualisoinnin seuraavassa animaatiossa.

Luo asynkroninen päätepiste

Me luomme asynkroninen päätepiste samoin kuin reaaliaikainen isännöity päätepiste. Vaiheisiin kuuluu a SageMaker malli, jota seuraa päätepisteen määritys ja päätepisteen käyttöönotto. Ero näiden kahden tyyppisten päätepisteiden välillä on, että asynkroninen päätepistemääritys sisältää AsyncInferenceConfig-osan. Tässä osiossa määritämme Amazon S3 -tulospolun päätepisteen kutsun tuloksille ja sisällytämme valinnaisesti SNS-aiheita onnistumis- ja epäonnistumisilmoituksiin. Määritämme myös asiakkaan määrittämän samanaikaisten kutsujen enimmäismäärän esiintymää kohden. Katso seuraava koodi:

AsyncInferenceConfig={ "OutputConfig": { "S3OutputPath": f"s3://{bucket}/{bucket_prefix}/output", # Optionally specify Amazon SNS topics for notifications "NotificationConfig": { "SuccessTopic": success_topic, "ErrorTopic": error_topic, } }, "ClientConfig": { "MaxConcurrentInvocationsPerInstance": 2 #increase this value upto throughput peak for best performance } }

Lisätietoja API:sta päätepistemäärityksen luomiseksi asynkronista päättelyä varten: Luo asynkroninen päättelypäätepiste.

Kutsu asynkroninen päätepiste

Seuraavan koodin syöttöhyötykuorma on Amazon S4:een ladattu .mp3-videotiedosto:

sm_session.upload_data( input_location, bucket=sm_session.default_bucket(), key_prefix=prefix, extra_args={"ContentType": "video/mp4"})

Käytämme Amazon S3 URI:tä syötettävään hyötykuormatiedostoon päätepisteen kutsumiseksi. Vastausobjekti sisältää tulossijainnin Amazon S3:ssa tulosten hakemiseksi valmistumisen jälkeen:

response = sm_runtime.invoke_endpoint_async(EndpointName=endpoint_name, InputLocation=input_1_s3_location)
output_location = response['OutputLocation'])

Katso lisätietoja asynkronisen päätepisteen kutsumisesta API:sta Kutsu asynkroninen päätepiste.

Aseta kutsupyynnöt jonoon käyttäjän määrittelemällä samanaikaisuudella

Asynkroninen päätepiste asettaa kutsupyynnöt automaattisesti jonoon. Se käyttää MaxConcurrentInvocationsPerInstance parametri edellisessä päätepisteen kokoonpanossa käsitelläksesi uudet pyynnöt jonosta sen jälkeen, kun aiemmat pyynnöt on suoritettu. Tämä on täysin hallittu jono, jossa on erilaisia ​​seurantamittareita, eikä se vaadi lisämäärityksiä.

Automaattinen skaalaus esiintymissä asynkronisessa päätepisteessä

Asetamme automaattisen skaalauskäytännön vähimmäiskapasiteetiksi 0 ja enimmäiskapasiteetiksi viiteen esiintymään. Toisin kuin reaaliaikaiset isännöidyt päätepisteet, asynkroniset päätepisteet tukevat instanssien määrän skaalaamista nollaan asettamalla vähimmäiskapasiteetiksi 0. Tämän ominaisuuden avulla voimme skaalata tapauksia nollaan, kun liikennettä ei ole, ja maksaa vain, kun hyötykuormat saapuvat.

Käytämme ApproximateBacklogSizePerInstance-metriikkaa skaalauskäytännön määrittämiseen, ja kohdejonon ruuhka on viisi esiintymää kohden skaalaamaan lisää. Asetamme ScaleInCooldownin jäähtymisjaksoksi 120 sekuntia ja ScaleOutCooldownin 120 sekuntiin. Katso seuraava koodi:

client = boto3.client('application-autoscaling') # Common class representing Application Auto Scaling for SageMaker amongst other services resource_id='endpoint/' + endpoint_name + '/variant/' + 'variant1' # This is the format in which application autoscaling references the endpoint response = client.register_scalable_target( ServiceNamespace='sagemaker', # ResourceId=resource_id, ScalableDimension='sagemaker:variant:DesiredInstanceCount', MinCapacity=0, MaxCapacity=5
) response = client.put_scaling_policy( PolicyName='Invocations-ScalingPolicy', ServiceNamespace='sagemaker', # The namespace of the AWS service that provides the resource. ResourceId=resource_id, # Endpoint name ScalableDimension='sagemaker:variant:DesiredInstanceCount', # SageMaker supports only Instance Count PolicyType='TargetTrackingScaling', # 'StepScaling'|'TargetTrackingScaling' TargetTrackingScalingPolicyConfiguration={ 'TargetValue': 5.0, # The target value for the metric. 'CustomizedMetricSpecification': { 'MetricName': 'ApproximateBacklogSizePerInstance', 'Namespace': 'AWS/SageMaker', 'Dimensions': [{'Name': 'EndpointName', 'Value': endpoint_name }], 'Statistic': 'Average', }, 'ScaleInCooldown': 120, # ScaleInCooldown - The amount of time, in seconds, after a scale in activity completes before another scale in activity can start. 'ScaleOutCooldown': 120 # ScaleOutCooldown - The amount of time, in seconds, after a scale out activity completes before another scale out activity can start.
# 'DisableScaleIn': True|False - indicates whether scale in by the target tracking policy is disabled.
# If the value is true, scale in is disabled and the target tracking policy won't remove capacity from the scalable resource.
}
)

Katso lisätietoja sovellusliittymästä asynkronisen päätepisteen automaattiseen skaalaukseen Asynkroninen päätepiste skaalautuu automaattisesti.

Ilmoitukset asynkronisesta päätepisteestä

Luomme kaksi erillistä SNS-aihetta onnistumis- ja virheilmoituksia varten kullekin päätepisteen kutsun tulokselle:

sns_client = boto3.client('sns')
response = sns_client.create_topic(Name="Async-Demo-ErrorTopic2")
error_topic = response['TopicArn']
response = sns_client.create_topic(Name="Async-Demo-SuccessTopic2")
success_topic = response['TopicArn']

Muita ilmoitusvaihtoehtoja ovat S3-säihön lähdön säännöllinen tarkistaminen tai S3-säihön ilmoitusten käyttö laukaisemaan AWS Lambda toiminto tiedoston latauksessa. SNS-ilmoitukset sisältyvät päätepisteen määritysosaan, kuten aiemmin on kuvattu.

Lisätietoja ilmoitusten määrittämisestä asynkronisesta päätepisteestä on kohdassa Tarkista ennusteiden tulokset.

Tarkkaile asynkronista päätepistettä

Seuraamme asynkronista päätepistettä kanssa sisäänrakennetut CloudWatch-lisämittarit asynkroniselle päättelylle ominaista. Valvomme esimerkiksi jonon pituutta kussakin tapauksessa käyttämällä ApproximateBacklogSizePerInstance ja jonon kokonaispituutta käyttämällä ApproximateBacklogSize. Harkitse SNS-aiheen poistaminen välttääksesi tulvailmoitukset seuraavien kutsujen aikana. Seuraavassa kaaviossa näemme alkuperäisen ruuhkan koon äkillisen 1,000 XNUMX pyynnön liikennepurskeen vuoksi, ja ruuhkan koko ilmentymää kohti pienenee nopeasti päätepisteen skaalautuessa yhdestä viiteen ilmentymään.

Vastaavasti seuraamme onnistuneiden kutsujen kokonaismäärää InvocationsProcessed-toiminnolla ja epäonnistuneiden kutsujen kokonaismäärää InvocationFailures-toiminnolla. Seuraavassa kaaviossa näemme käsiteltyjen videokutsujen keskimääräisen määrän minuutissa automaattisen skaalauksen jälkeen noin 18.

Valvomme myös mallin latenssiaikaa, joka sisältää videon esikäsittelyajan ja mallipäätelmän videokuvaerän nopeudella 1 FPS. Seuraavassa kaaviossa voimme nähdä mallin viiveen kahdelle samanaikaiselle kutsulle on noin 30 sekuntia.

Tarkkailemme myös kokonaiskäsittelyaikaa Amazon S3:n syötöstä Amazon S3:n ulostuloon TotalProcessingTimen avulla ja ruuhkassa käytettyä aikaa TimeInBacklog-mittarilla. Seuraavasta kaaviosta näemme, että keskimääräinen ruuhka-aika ja kokonaiskäsittelyaika kasvavat ajan myötä. Pyynnöt, jotka lisätään liikenteen purskeen aikana jonon etuosassa, ovat ruuhka-aikaa, joka on samanlainen kuin mallin 30 sekunnin viive. Jonon lopussa olevilla pyynnöillä on suurin ruuhka-aika, noin 3,500 XNUMX sekuntia.

Valvomme myös, kuinka päätepiste skaalautuu takaisin nollaan koko jonon käsittelyn jälkeen. Päätepisteen ajonaikaiset asetukset näyttävät nykyisen ilmentymien määrän koon 0.

Seuraavassa taulukossa on yhteenveto videopäätelmäesimerkistä, jossa on 1,000 XNUMX videokutsun purskeliikenne.

Ominaisuus Arvo
Kutsujen määrä (sarjan kokonaiskoko) 1000
Samanaikaisuuden taso 2
Ilmentymän tyyppi ml.g4dn.xlarge
Syötteen hyötykuorman koko (kutsua kohti). 71 MB
Videokuvan näytteenottotaajuus (FPS) 1 FPS
Lähtöhyötykuorman koko (kutsua kohti). 54 MB
Mallin latenssi 30 sekuntia
Automaattisen skaalaustapausten enimmäismäärä 5
Suorituskyky (pyyntöjä minuutissa) 18
Mallin koko 165 MB

Voimme optimoida päätepisteen kokoonpanon saadaksemme kustannustehokkaimman ilmentymän korkealla suorituskyvyllä. Tässä esimerkissä käytämme g4dn.xlarge-esiintymää, jossa on Nvidia T4 GPU. Voimme nostaa asteittain samanaikaisuustasoa suorituskyvyn huippuun saakka samalla kun säädämme muita mallipalvelin- ja säilöparametreja.

Täydellinen luettelo mittareista, katso Asynkronisten päätepisteiden valvonta.

Puhdistaa

Kun olemme suorittaneet kaikki pyynnöt, voimme poistaa päätepisteen samalla tavalla kuin reaaliaikaisten isännöityjen päätepisteiden poistaminen. Huomaa, että jos asetamme asynkronisten päätepisteiden vähimmäiskapasiteetiksi 0, esiintymismaksuja ei peritä sen jälkeen, kun se skaalautuu nollaan.

Jos olet ottanut käyttöön päätepisteen automaattisen skaalauksen, varmista, että poistat päätepisteen rekisteröinnin skaalautuvaksi kohteeksi ennen päätepisteen poistamista. Tee tämä suorittamalla seuraava:

response = client.deregister_scalable_target( ServiceNamespace='sagemaker', ResourceId='resource_id', ScalableDimension='sagemaker:variant:DesiredInstanceCount' )

Päätepisteet tulee poistaa, kun ne eivät ole enää käytössä, koska (per the SageMakerin hintasivu) ne laskutetaan käyttöönottoajan mukaan. Tee tämä suorittamalla seuraava:

sm_client.delete_endpoint(EndpointName=endpoint_name)

Yhteenveto

Tässä viestissä osoitimme, kuinka käyttää SageMakerin uutta asynkronista päättelykykyä suuren videon syötteen käsittelyyn. Päätelmien tekemiseen käytimme mukautettua päättelykomentosarjaa videoiden esikäsittelyyn ennalta määritetyllä otosnäytteenottotaajuudella ja käynnistimme tunnetun PyTorch CV -mallin luomaan luettelon lähtökohdista jokaiselle videolle. Vastasimme purskeliikenteen, mallien korkeiden käsittelyaikojen ja suurten hyötykuormien haasteisiin hallituilla jonoilla, ennalta määritellyillä samanaikaisuusrajoilla, vastausilmoituksilla ja nollaan skaalauksella. Aloita SageMakerin asynkronisen päättelyn käyttäminen, katso Asynkroninen päättely ja viitata näytekoodi omiin käyttötarkoituksiin.


Tietoja Tekijät

Hasan Poonawala on AWS: n koneoppimisasiantuntijaratkaisujen arkkitehti Lontoossa, Iso-Britanniassa. Hasan auttaa asiakkaita suunnittelemaan ja ottamaan käyttöön koneoppimissovelluksia AWS: n tuotannossa. Hän on intohimoisesti koneoppimisen käytöstä ratkaisemaan liiketoimintaongelmia eri toimialoilla. Vapaa-ajallaan Hasan rakastaa tutustua luontoon ulkona ja viettää aikaa ystävien ja perheen kanssa.

Raghu Ramesha on ohjelmistokehitysinsinööri (AI/ML) Amazon SageMaker Services SA -tiimissä. Hän keskittyy auttamaan asiakkaita siirtämään ML-tuotannon työmäärät mittakaavassa SageMakeriin. Hän on erikoistunut koneoppimiseen, tekoälyyn ja tietokonenäköalueisiin, ja hänellä on tietojenkäsittelytieteen maisterin tutkinto UT Dallasista. Vapaa-ajallaan hän nauttii matkustamisesta ja valokuvaamisesta.

Sean MorganSean Morgan on AI/ML Solutions -arkkitehti AWS:ssä. Hänellä on kokemusta puolijohteiden ja akateemisen tutkimuksen aloilta, ja hän käyttää kokemustaan ​​auttaakseen asiakkaita saavuttamaan tavoitteensa AWS:ssä. Vapaa-ajallaan Sean on aktiivinen avoimen lähdekoodin avustaja ja ylläpitäjä sekä TensorFlow-lisäosien sidosryhmien johtaja.

Lähde: https://aws.amazon.com/blogs/machine-learning/run-computer-vision-inference-on-large-videos-with-amazon-sagemaker-asynchronous-endpoints/

Aikaleima:

Lisää aiheesta AWS-koneoppimisblogi