Tämän blogiviestin ovat kirjoittaneet Jonathan Lee, Nelson Leung, Paul Min ja Troy Squillaci Inteliltä.
In Osa 1 Tässä viestissä keskustelimme siitä, kuinka Intel®3DAT teki yhteistyötä AWS-koneoppimisen asiantuntijapalvelut (MLPS) rakentaa skaalautuva AI SaaS -sovellus. 3DAT käyttää tietokonenäköä ja tekoälyä tunnistamaan, seuraamaan ja analysoimaan yli 1,000 biomekaniikan datapistettä tavallisesta videosta. Sen avulla asiakkaat voivat luoda monipuolisia ja tehokkaita biomekaniikkaan perustuvia tuotteita, kuten verkko- ja mobiilisovelluksia yksityiskohtaisilla suorituskykytiedoilla ja kolmiulotteisilla visualisoinneilla.
Tämän postauksen osassa 2 sukeltaamme syvemmälle arkkitehtuurin jokaiseen vaiheeseen. Tutkimme AWS-palveluita, joita käytetään täyttämään 3DAT-suunnitteluvaatimukset, mukaan lukien Amazon Kinesis -tietovirrat ja Amazonin elastisten kuberneettien palvelu (Amazon EKS), jotta tämän ohjelmiston tarvittavat asennonarviointimallit voidaan skaalautuvasti ottaa käyttöön palvelusovelluksena (SaaS).
Arkkitehtuurin yleiskatsaus
MLPS-tiimin ensisijaisena tavoitteena oli tuottaa 2D- ja 3D-asennonarviointimallien putkilinjat ja luoda toimiva ja skaalautuva sovellus. Seuraava kaavio havainnollistaa ratkaisun arkkitehtuuria.
Koko arkkitehtuuri on jaettu viiteen pääkomponenttiin:
- Käyttöliittymän kerrokset
- tietokanta
- Työnkulun orkestrointi
- Skaalautuva asennon arvioinnin päätelmien luonti
- Toiminnan seuranta
Mennään yksityiskohtaisesti jokaiseen komponenttiin, niiden vuorovaikutukseen ja suunnitteluvalintojen perusteluihin.
Käyttöliittymän kerrokset
Seuraava kaavio näyttää sovellusliittymätasot, jotka tarjoavat käyttäjälle pääsyn ja sovelluksen ja sen resurssien hallinnan.
Nämä tukiasemat tukevat erilaisia käyttötapauksia eri asiakaspersoonien perusteella. Esimerkiksi sovelluksen käyttäjä voi lähettää työn CLI:n kautta, kun taas kehittäjä voi rakentaa sovelluksen Python SDK:lla ja upottaa asennonarviointitietoja sovelluksiinsa. CLI ja SDK on rakennettu modulaarisina komponentteina – molemmat kerrokset ovat API-kerroksen kääreitä, jotka on rakennettu käyttämällä Amazon API -yhdyskäytävä ratkaistaksesi API-kutsut ja liittyvä AWS Lambda toimintoja, jotka huolehtivat jokaiseen API-kutsuun liittyvästä taustalogiikasta. Nämä kerrokset olivat ratkaiseva osa Intelin OTG-tiimiä, koska se avaa laajan asiakaskunnan, joka voi käyttää tätä SaaS-sovellusta tehokkaasti.
API-taso
Ratkaisussa on yhdeksän API:n ydinjoukko, jotka vastaavat tällä alustalla toimivien objektien tyyppejä. Jokaisella API:lla on Python-tiedosto, joka määrittelee API-toiminnot, jotka voidaan suorittaa. Uusien objektien luomiseen määritetään automaattisesti objektitunnus peräkkäin. Näiden objektien attribuutit tallennetaan ja niitä seurataan Amazon Aurora -palvelimeton tietokanta tämän tunnuksen avulla. Siksi API-toiminnot liittyvät toimintoihin, jotka on määritelty keskustiedostossa, joka sisältää taustalogiikan Aurora-tietokannan kyselyä varten. Tämä taustalogiikka käyttää Boto3:a Amazon RDS DataService -asiakas päästäksesi tietokantaklusteriin.
Ainoa poikkeus on /job
API, jolla on a create_job
menetelmä, joka käsittelee videon lähettämisen uuden käsittelytyön luomiseksi. Tämä menetelmä käynnistää AWS-vaihetoiminnot työnkulun logiikka työn suorittamiseen. Ohitamalla sisään a job_id
, tämä menetelmä käyttää Boto3:a Step Functions -asiakas soittaa start_execution
menetelmä tietylle stateMachineARN
(Amazon-resurssin nimi).
Kahdeksalla objekti-API:llä on seuraavassa taulukossa esitetyt menetelmät ja samankaltainen käyttöoikeusmalli.
Menetelmän tyyppi | Toiminnon nimi | Kuvaus |
SAA | list_[object_name]s |
Valitsee kaikki tämän tyyppiset objektit tietokannasta ja näyttää. |
POST | create_[object] |
Lisää tietokantaan uuden objektitietueen vaadituilla syötteillä. |
SAA | get_[object] |
Valitsee objektin attribuutit tietokannan objektitunnuksen perusteella ja näyttää. |
PUT | update_[object] |
Päivittää olemassa olevan objektitietueen vaadituilla syötteillä. |
POISTA | delete_[object] |
Poistaa olemassa olevan objektitietueen tietokannasta objektitunnuksen perusteella. |
Yhdeksän API:n tiedot ovat seuraavat:
- /käyttäjä – Käyttäjä on henkilön henkilöllisyys, joka on valtuutettu lähettämään töitä tähän sovellukseen. Käyttäjän luominen vaatii käyttäjänimen, käyttäjän sähköpostiosoitteen ja ryhmätunnuksen, johon käyttäjä kuuluu.
- /käyttäjäryhmä – Käyttäjäryhmä on joukko käyttäjiä. Jokainen käyttäjäryhmä on kartoitettu yhteen projektiin ja yhteen liukuhihnan parametrijoukkoon. Eri tasojen (infrastruktuuriresurssien ja putkien parametrien osalta) käyttäjät jaetaan käyttäjäryhmiin. Jokainen käyttäjä voi kuulua vain yhteen käyttäjäryhmään. Käyttäjäryhmän luominen vaatii projektitunnuksen, liukuhihnan parametrijoukon tunnuksen, käyttäjäryhmän nimen ja käyttäjäryhmän kuvauksen. Huomaa, että käyttäjäryhmät eroavat AWS-tilissä määritellyistä käyttäjärooleista. Jälkimmäistä käytetään tarjoamaan eri käyttöoikeustasot heidän käyttöoikeusrooliensa (esimerkiksi admin) perusteella.
- /projekti – Hankkeen avulla ryhmitellään yhteen erilaisia infrastruktuuriresursseja. Projekti liittyy yksittäiseen
project_cluster_url
(Aurora-klusteri) käyttäjien, töiden ja muiden metatietojen tallentamiseen, aproject_queue_arn
(Kinesis Data Streams ARN) ja laskenta-ajonaikainen ympäristö (tällä hetkellä Cortexin kautta ohjattu), jota käytetään kehyserien päättelyn suorittamiseen tai videoiden jälkikäsittelyyn. Jokainen käyttäjäryhmä on liitetty yhteen projektiin, ja tämä mekanismi on se, kuinka eri tasot otetaan käyttöön latenssin ja laskentatehon suhteen eri käyttäjäryhmille. Projektin luominen vaatii projektin nimen, projektiklusterin URL-osoitteen ja projektijonon ARN. - /putki – Liukulinja on liitetty yhteen konfiguraatioon prosessointisäiliöiden sarjalle, joka suorittaa videonkäsittelyn Cortexin koordinoimassa Amazon EKS -päätelmien luontiklusterissa (katso lisätietoja videonkäsittelyn päätelmien luomista koskevasta osiosta). Tyypillisesti tämä koostuu kolmesta säilöstä: esikäsittelystä ja dekoodauksesta, kohteen havaitsemisesta ja asennon arvioinnista. Esimerkiksi dekoodaus- ja objektintunnistusvaihe ovat samat 2D- ja 3D-liukuputkille, mutta viimeisen säilön vaihtaminen joko HRNetillä tai 3DMPPE:llä johtaa parametrijoukkoon 2D- ja 3D-prosessointiliukuputkille. Voit luoda uusia kokoonpanoja määrittääksesi mahdollisia käsittelyyn käytettäviä liukuputkia, ja se vaatii syötteenä uuden Python-tiedoston Cortex-varastossa, joka kertoo mallin päätepistekutsujen sarjan, jotka määrittävät kyseisen liukuhihnan (katso osio videonkäsittelyn päätelmien luomisesta ). Liukuhihnan päätepiste on Cortex-päätepiste, jota kutsutaan käsittelemään yhtä kehystä. Liukuhihnan luominen vaatii liukuhihnan nimen, putkilinjan kuvauksen ja liukuhihnan päätepisteen.
- /pipeline_parameter_set – Liukuhihnan parametrijoukko on joustava JSON-kokoelma useita parametreja (liukuhihnan kokoonpanon ajoaika) tietylle liukuhihnalle, ja se lisätään joustavuuden tarjoamiseksi tulevaa mukauttamista varten, kun tarvitaan useita liukuhihnan määritysajoaikoja. Käyttäjäryhmät voidaan liittää tiettyyn liukuhihnan parametrijoukkoon, ja sen tarkoituksena on, että käyttäjäryhmää ja liukuhihnaa kohden on erilaisia parametriryhmiä. Tämä oli tärkeä tulevaisuuteen katsova lisäys Intel OTG:lle, jotta se pystyi rakentamaan räätälöinnin, joka tukee siirrettävyyttä, kun eri asiakkaat, erityisesti ISV:t, alkavat käyttää sovellusta.
- /pipeline_parameters – Yksittäinen liukuhihnaparametrien kokoelma on liukuhihnan parametrijoukon ilmentymä. Tämä tekee siitä liukuhihnaparametreille asetettujen liukuhihnaparametrien 1:monet-kuvauksen. Tämä API vaatii liukuhihnan tunnuksen liitettäväksi liukuhihnaparametrien joukkoon, mikä mahdollistaa liukuhihnan luomisen liukuhihnan parametrien 1:1-kartoittamista varten. Muut tämän API:n edellyttämät syötteet ovat liukuhihnan parametrijoukon tunnus, liukuhihnaparametrien arvo ja liukuhihnaparametrien nimi.
- /video – Videoobjektia käytetään määrittämään yksittäisiä videoita, jotka muodostavat työn aikana lähetetyn .zip-paketin. Tämä tiedosto jaetaan useiksi videoiksi lähettämisen jälkeen. Video liittyy asiaan
job_id
työlle, johon .zip-paketti lähetetään, ja Amazonin yksinkertainen tallennuspalvelu (Amazon S3) polut eroteltujen raakavideoiden sijainnille ja kunkin videon jälkikäsittelytuloksille. Videoobjekti sisältää myös videon edistymisprosentin, jota päivitetään jatkuvasti videon yksittäisten kehyserien käsittelyn aikana, sekä videon tilamerkinnän valmiiksi vai keskeneräisiksi. Videon luominen vaatii työtunnuksen, videopolun, videon tulospolun, videon edistymisprosentin ja videon tilan. - /frame_batch -
frame_batch
Objekti on pieni joukko kehyksiä, jotka on luotu ottamalla näytteitä yhdestä videosta. Videon jakaminen normaalikokoisiin kehyseriin tarjoaa vivun säätämään latenssia ja lisää rinnakkaisuutta ja suorituskykyä. Tämä on rakeinen yksikkö, joka ajetaan Kinesis-tietovirtojen kautta päätelmien tekemiseksi. Kehyserän luominen vaatii videotunnuksen, kehyserän aloitusnumeron, kehyserän loppunumeron, kehyserän syöttöpolun, kehyserän tulospolun ja kehyserän tilan. - /Job – Tätä vuorovaikutussovellusliittymää käytetään tiedostojen lähettämiseen käsittelytyön aloittamiseksi. Tällä API:lla on erilainen toiminto kuin muilla objektisovellusliittymillä, koska se on suora polku vuorovaikutukseen videonkäsittelyn taustaohjelman Step Functions -työnkulun koordinoinnin ja Amazon EKS -klusterin kanssa. Tämä API vaatii käyttäjätunnuksen, projektitunnuksen, liukuhihnan tunnuksen, liukuhihnan parametrijoukon tunnuksen, työn parametrit ja työn tilan. Työparametreissa on määritetty syöttötiedoston polku, joka on Amazon S3:n sijainti, jossa käsiteltävän videon .zip-paketti sijaitsee. Tiedoston lataus hoidetaan
upload_handler
menetelmä, joka luo ennalta määrätyn S3-URL-osoitteen, jonka avulla käyttäjä voi sijoittaa tiedoston. WORKFLOW_STATEMACHINE_ARN on ympäristömuuttuja, joka välitetääncreate_job
API määrittää, mihin .zip-videopaketti, jossa on syöttötiedostopolku, lähetetään työn aloittamiseksi.
Seuraavassa taulukossa on yhteenveto API:n toiminnoista.
Menetelmän tyyppi | Toiminto | Kuvaus |
SAA | list_jobs |
Valitsee kaikki työt tietokannasta ja näyttää. |
POST | create_ job |
Lisää uuden työtietueen, jossa on käyttäjätunnus, projektitunnus, liukuhihnan tunnus, liukuhihnan parametrijoukon tunnus, työn tulospolku, työn parametrit ja työn tila. |
SAA | get_ job |
Valitsee työn attribuutit tietokannasta työn tunnuksen perusteella ja näyttää. |
SAA | upload_handler |
Luo ennalta määritellyn S3-URL-osoitteen .zip-tiedoston latauspaikaksi. Vaatii S3-säilön nimen ja odottaa sovellus-/zip-tiedostotyyppiä. |
Python SDK -taso
Sovellusliittymien pohjalta tiimi loi Python SDK -asiakaskirjaston kääreeksi helpottaakseen kehittäjien pääsyä API-menetelmiin. He käyttivät avointa lähdekoodia Runous, joka hoitaa Python-pakkauksen ja riippuvuuden hallinnan. He loivat a client.py
tiedosto, joka sisältää funktioita, jotka käärivät jokaisen Python-sovellusliittymän requests
kirjasto, joka käsittelee API-pyyntöjä ja poikkeuksia.
Jotta kehittäjät voivat käynnistää Intel 3DAT SDK:n, heidän on asennettava ja rakennettava Poetry-paketti. Sitten he voivat lisätä yksinkertaisen Python-tuonnin intel_3dat_sdk
mihin tahansa Python-koodiin.
Voit käyttää asiakasta luomalla asiakkaan ilmentymän ja määrittämällä API-päätepisteen:
Voit sitten käyttää asiakasta kutsumaan yksittäisiä menetelmiä, kuten create_pipeline
-menetelmällä (katso seuraava koodi) ottamalla oikeat argumentit, kuten liukuhihnan nimi ja putkilinjan kuvaus.
CLI-kerros
Samoin tiimi rakensi sovellusliittymien varaan luodakseen komentoriviliittymän käyttäjille, jotka haluavat käyttää API-menetelmiä yksinkertaisella käyttöliittymällä ilman, että heidän tarvitsee kirjoittaa Python-koodia. He käyttivät avoimen lähdekoodin Python-pakettia Napauta (Command Line Interface Creation Kit). Tämän kehyksen etuja ovat komentojen mielivaltainen sisäkkäisyys, automaattinen ohjesivun luonti ja tuki alikommentojen laiskalle lataukselle suorituksen aikana. Samassa client.py
tiedosto kuten SDK:ssa, jokainen SDK-asiakasmetodi käärittiin Clickillä ja vaaditut menetelmäargumentit muunnettiin komentorivin lipuiksi. Lipputuloja käytetään sitten kutsuttaessa SDK-komentoa.
Voit käynnistää CLI:n käyttämällä CLI configure
komento. Sinua pyydetään antamaan päätepisteen URL-osoite:
Nyt voit käyttää CLI:tä kutsumaan erilaisia API-menetelmiin liittyviä komentoja, esimerkiksi:
tietokanta
Tietokantana tämä sovellus käyttää Aurora Serverless -sovellusta kuhunkin API:hen liittyvien metatietojen tallentamiseen MYSQL:n tietokantamoottorina. Aurora Serverless -tietokantapalvelun valinnassa noudatetaan suunnitteluperiaatetta, joka minimoi infrastruktuurin ylimääräiset kustannukset hyödyntämällä palvelimettomia AWS-palveluita mahdollisuuksien mukaan. Seuraava kaavio havainnollistaa tätä arkkitehtuuria.
- palvelimeton moottoritila täyttää ajoittaisen käyttötavan, koska tämä sovellus skaalautuu uusiin asiakkaisiin ja työmäärät ovat edelleen epävarmoja. Kun käynnistät tietokannan päätepisteen, tiettyä DB-ilmentymän kokoa ei vaadita, vain klusterin kapasiteetin vähimmäis- ja enimmäisalue. Aurora Serverless hoitaa reititinkaluston asianmukaisen provisioinnin ja jakaa työkuorman resurssien kesken. Aurora Serverless säilyttää automaattisesti varmuuskopiot vähintään 1 päivästä 35 päivään asti. Tiimi optimoi turvallisuuden asettamalla oletusarvoksi maksimiarvon 35.
Lisäksi joukkue käytti Data API käsittelemään pääsyä Aurora Serverless -klusteriin, joka ei vaadi jatkuvaa yhteyttä ja tarjoaa sen sijaan suojatun HTTP-päätepisteen ja integroinnin AWS SDK:iden kanssa. Tämä ominaisuus käyttää AWS -salaisuuksien hallinta tallentaa tietokannan tunnistetiedot, jotta valtuustietoja ei tarvitse erikseen välittää. CREATE TABLE -komentosarjat kirjoitettiin .sql-tiedostoihin jokaiselle yhdeksästä taulukosta, jotka vastaavat yhdeksää APIa. Koska tämä tietokanta sisälsi kaikki järjestelmän objektien metatiedot ja tilan, API-menetelmät ajettiin sopivilla SQL-komennoilla (esim. select * from Job
varten list_jobs
API) ja välitetty execute_statement
menetelmä Amazon RDS -asiakassovelluksesta Data API:ssa.
Työnkulun orkestrointi
Sovelluksen toiminnallista runkoa käsiteltiin Step Functions -toiminnolla työnkulun koordinoimiseksi seuraavan kaavion mukaisesti.
Tilakone koostui neljän Lambda-funktion sarjasta, joka alkaa, kun työ lähetetään käyttämällä create_job
menetelmä job
API. Käyttäjätunnus, projektin tunnus, liukuhihnan tunnus, liukuhihnan parametrijoukon tunnus, työn tulospolku, työn parametrit ja työn tila tarvitaan työn luomiseen. Voit ensin ladata videotiedostojen .zip-paketin käyttämällä upload_handler
menetelmä työsovellusliittymästä luodaksesi ennalta määrätyn S3-URL-osoitteen. Työn lähetyksen aikana syöttötiedoston polku välitetään työn parametrien kautta tiedoston sijainnin määrittämiseksi. Tämä käynnistää työnkulun tilakoneen ajon ja käynnistää neljä päävaihetta:
- Alustuslambda-toiminto
- Lähettimen lambda-toiminto
- Valmistus Tarkista lambda-toiminto
- Keräimen lambda-toiminto
Alustuslambda-toiminto
Initializerin päätehtävä on erottaa .zip-paketti yksittäisiksi videotiedostoiksi ja valmistella ne lähettäjää varten. Ensin ladataan .zip-tiedosto, jonka jälkeen jokainen tiedosto, mukaan lukien videotiedostot, puretaan ja puretaan. Videot, mieluiten .mp4-muodossa, ladataan takaisin S3-ämpäriin. Käyttämällä create_video
menetelmä video
API, videoobjekti luodaan videopolun syötteenä. Tämä lisää kunkin videon tiedot Aurora-tietokantaan. Kaikki muut tiedostotyypit, kuten JSON-tiedostot, katsotaan metatiedoksi ja ne ladataan samalla tavalla, mutta videoobjektia ei luoda. Luettelo purettujen tiedostojen ja videotiedostojen nimistä siirretään seuraavaan vaiheeseen.
Lähettimen lambda-toiminto
Lähettäjä-toiminto ottaa Initializerin purkamat videotiedostot ja luo videokehysten minieriä kuvina. Suurin osa nykyisistä tuotannossa olevista tietokonenäkömalleista on koulutettu kuviin, joten vaikka videota käsitellään, ne erotetaan ensin kuvakehyksiin ennen mallin päättelyä. Tämä nykyinen ratkaisu, jossa käytetään huippuluokan asennon estimointimallia, ei eroa toisistaan – lähettäjän kehyserät välitetään Kinesis Data Streamsille päätelmien luontivaiheen aloittamiseksi.
Ensin Lambda-toiminto lataa videotiedoston. Kuvataajuus ja kehysten määrä lasketaan käyttämällä FileVideoStream
moduuli imutils.video
käsittelykirjasto. Kehykset erotetaan ja ryhmitellään tietyn mini-eräkoon mukaan, mikä on yksi tämän putkilinjan tärkeimmistä viritettävästä parametrista. Pythonin suolakurkkukirjaston avulla tiedot sarjoidaan ja ladataan Amazon S3:een. Tämän jälkeen luodaan kehyseräobjekti ja metatietomerkintä luodaan Aurora-tietokantaan. Tämä Lambda-toiminto on rakennettu käyttämällä Docker-tiedostoa riippuvuuksilla opencv-python
, numpy
ja imutils
kirjastoissa.
Valmistus Tarkista lambda-toiminto
Valmistumisen tarkistus -toiminto jatkaa kyselyä Aurora-tietokannasta nähdäkseen kunkin tämän nykyisen työn .zip-paketin videon osalta, kuinka monta kehyserää on VALMIS-tilassa. Kun kaikkien videoiden kaikki kehyserät ovat valmiit, tämä tarkistusprosessi on valmis.
Keräimen lambda-toiminto
Collector-toiminto ottaa kullekin kehykselle kuluttajavaiheen aikana suoritettujen päätelmien lähdöt ja yhdistää ne kehyserässä ja videossa. Yhdistetyt yhdistetyt tiedot ladataan sitten S3-säihöön. Tämän jälkeen toiminto kutsuu Cortex-jälkikäsittelysovellusliittymän tietylle ML-liukuhihnalle suorittaakseen jälkikäsittelylaskelmia ja lisää kootut tulokset videon avulla lähtöalueeseen. Monet näistä mittareista lasketaan eri kehysten välillä, kuten nopeus, kiihtyvyys ja liitoskulma, joten tämä laskenta on suoritettava kootuille tiedoille. Tärkeimmät lähdöt sisältävät pääpisteiden tiedot (koostettu CSV-muotoon), BMA-laskelmat (kuten kiihtyvyys) ja kuvatiedoston jokaiseen kehykseen lisättyjen avainpisteiden visuaalinen peittokuva.
Skaalautuva asennon arvioinnin päätelmien luonti
Tässä vaiheessa tapahtuu prosessointikone, joka käyttää ML-päätelmien skaalausta. Se sisältää kolme pääosaa, joista jokaisella on omat samanaikaisuusvivut, joita voidaan säätää latenssin kompromisseja varten (katso seuraava kaavio).
Tämä arkkitehtuuri mahdollistaa kokeilun testattaessa viivehyötyjä sekä joustavuutta tulevaisuutta varten, kun työmäärät voivat muuttua sovellusta käyttävien erilaisten loppukäyttäjäsegmenttien sekoitusten myötä.
Kinesis-tietovirrat
Tiimi valitsi Kinesis Data Streamsin, koska sitä käytetään tyypillisesti suoratoistodatan käsittelyyn, ja tässä tapauksessa se sopii hyvin, koska se pystyy käsittelemään kehyseriä samalla tavalla skaalautuvuuden ja rinnakkaisuuden tarjoamiseksi. Submitter Lambda -toiminnossa käytetään Kinesis Boto3 -asiakasohjelmaa, jossa on put_record
menetelmä, joka välittää yhteen kehyserään liittyvät metatiedot, kuten kehyserän tunnus, kehyserän aloituskehys, kehyserän loppukehys, kuvan muoto, kuvanopeus ja videotunnus.
Määritimme erilaisia työjono- ja Kinesis-datavirtakonfiguraatioita määrittääksemme suoritustasot, jotka liittyvät eri käyttäjäryhmien prioriteettitasoihin. Pääsy eri tasoisille prosessointitehoille linkitetään ohittamalla projektijono ARN, kun uusi projekti luodaan project
API. Jokainen käyttäjäryhmä linkitetään sitten tiettyyn projektiin käyttäjäryhmän luomisen aikana. Kolme oletusvirran konfiguraatiota on määritetty AWS-palvelimeton sovellusmalli (AWS SAM) infrastruktuurimalli:
- Standardi -
JobStreamShardCount
- prioriteetti -
PriorityJobStreamShardCount
- Korkea prioriteetti -
HighPriorityJobStreamShardCount
Tiimi käytti muutamaa eri vipua erottaakseen kunkin virran prosessointitehon tai säätääkseen järjestelmän latenssia, kuten seuraavassa taulukossa on yhteenveto.
Vipu | Kuvaus | Oletusarvo |
Sirpale | Sirpale on peräisin Kinesis Data Streamsista; se on läpäisykyvyn perusyksikkö. Oletus on 1 Mt/s, mikä vastaa 1,000 XNUMX datatietuetta sekunnissa. | 2 |
KinesisBatchSize |
Tietueiden enimmäismäärä, jonka Kinesis Data Streams hakee yhdessä erässä ennen kuluttajalambda-toiminnon käynnistämistä. | 1 |
KinesisParallelizationFactor |
Jokaisesta sirpaleesta samanaikaisesti käsiteltävien erien määrä. | 1 |
Tehostettu tuuletus | Tiedonkuluttajilla, jotka ovat aktivoineet tehostetun fan-out-toiminnon, on erillinen tiedonottokapasiteetti kuluttajaa kohden (kuten oletusarvo 1 Mt/s) sen sijaan, että he jakavat nopeuden kuluttajien kesken. | pois |
Kuluttajalambda-toiminto
Kinesis Data Streamsin näkökulmasta datakuluttaja on AWS-palvelu, joka hakee dataa tietovirran sirpaleista, kun dataa generoidaan streamissa. Tämä sovellus käyttää Consumer Lambda -toimintoa, joka käynnistyy, kun viestejä välitetään tietovirran jonoista. Jokainen kuluttajatoiminto käsittelee yhden kehyserän suorittamalla seuraavat vaiheet. Ensin kutsutaan synkronisesti Cortex-prosessorin API:lle, joka on mallin päättelyputkea isännöivä päätepiste (lisätietoja on seuraavassa osiossa Amazon EKS with Cortex). Tulokset tallennetaan Amazon S3:een ja tietokantaan tehdään päivitys muuttamalla käsitellyn kehyserän tilaksi Complete
. Virheenkäsittely on sisäänrakennettu hallitsemaan Cortex API -kutsua uudelleenyrityssilmukalla, joka käsittelee kaikki Cortex-klusterin 504-virheet, ja uudelleenyritysten määräksi on asetettu 5.
Amazon EKS Cortexilla ML-päätelmien tekemiseen
Tiimi käytti Amazon EKS:ää, AWS:n hallittua Kubernetes-palvelua, ML-päätelmien laskentamoottorina. Suunnittelussa päätettiin käyttää Amazon EKS:ää ML-päätepisteiden isännöimiseen, mikä mahdollistaa joustavuuden Kubernetesin ylävirran puolella ja klustereita, joita hallitaan täysin AWS:n kautta. AWS-veljeskunta, tai paikallisen laitteiston kautta Amazon EKS Anywhere. Tämä oli Intel OTG:n toivoma kriittinen toiminto, joka tarjosi mahdollisuuden liittää tämä sovellus esimerkiksi erikoistuneisiin paikallisiin laitteistoihin.
Kolme ML-mallia, jotka olivat päättelyputkien rakentamisen rakennuspalikoita, olivat mukautettu Yolo-malli (kohteen havaitsemiseen), mukautettu HRNet-malli (2D-asennon arviointiin) ja 3DMPPE-malli (3D-asennon arviointiin) (katso edellinen ML-osiossa saadaksesi lisätietoja). He käyttivät avointa lähdekoodia Aivokuori kirjasto, joka käsittelee ML-johtopäätösputkien päätepisteiden käyttöönottoa ja hallintaa sekä Amazon EKS -klusterien käynnistämistä ja käyttöönottoa. Jokainen näistä malleista pakattiin Docker-säiliöihin – mallitiedostot tallennettiin Amazon S3:een ja mallikuvat tallennettiin Amazonin elastisten säiliörekisteri (Amazon ECR) – ja otettu käyttöön Cortex Realtime API:ina. Suorittimella ja grafiikkasuorittimella toimivien mallisäiliöiden versiot luotiin tarjoamaan joustavuutta laskentalaitteiston tyypin mukaan. Jatkossa, jos uusia malleja tai malliputkia on lisättävä, ne voivat yksinkertaisesti luoda uusia Cortex Realtime API:ita.
Sitten he rakensivat päättelyputkia kokoamalla Cortex Realtime -mallin API:t Cortex Realtime -putkilinjan API:iksi. Yksi Realtime pipeline API koostui sarjan kutsumisesta Realtime mallisovellusliittymiä. Consumer Lambda -toiminnot käsitellään a pipeline
API mustana laatikkona, joka käyttää yhtä API-kutsua kuvan lopullisen päättelytuloksen hakemiseen. Kaksi liukuhihnaa luotiin: 2D-liukuhihna ja 3D-liukuhihna.
2D-liukuhihna yhdistää dekoodauksen esikäsittelyvaiheen, kohteen havaitsemisen mukautetun Yolo-mallin avulla urheilijan paikallistamiseksi ja rajoitusruutujen tuottamiseksi, ja lopuksi mukautetun HRNet-mallin 2D-avainpisteiden luomiseksi asennon arvioimista varten.
3D-putki yhdistää dekoodauksen esikäsittelyvaiheen, kohteen havaitsemisen mukautetun Yolo-mallin avulla urheilijan paikantamiseksi ja rajoitusruutujen tuottamiseksi, ja lopuksi 3DMPPE-mallin 3D-avainpisteiden luomiseksi asennon arvioimista varten.
Kehyserästä päätelmien luomisen jälkeen jokainen liukuhihna sisältää myös erillisen jälkikäsittelyn Realtime Cortex -päätepisteen, joka tuottaa kolme päätulosta:
- Koottu runko-avain osoittaa tiedot yhdeksi CSV-tiedostoksi
- BMA-laskelmat (kuten kiihtyvyys)
- Kuvatiedoston jokaiseen kehykseen lisättyjen avainpisteiden visuaalinen peittokuva
Collector Lambda -toiminto lähettää tiettyyn videoon liittyvät asianmukaiset metatiedot, kuten kehystunnukset ja asennonarvioinnin päättelylähtöjen S3-paikat, päätepisteeseen näiden jälkikäsittelytulosteiden luomiseksi.
Cortex on suunniteltu integroitavaksi Amazon EKS:n kanssa, ja se vaatii vain klusterin määritystiedoston ja yksinkertaisen komennon Kubernetes-klusterin käynnistämiseksi:
Toinen suorituskyvyn virityksen vipu oli laskentaklustereiden ilmentymien konfigurointi. Kolme tasoa luotiin vaihtelevilla M5- ja G4dn-esiintymien sekoituksilla, jotka on koodattu .yaml-tiedostoiksi ja määritelmillä, kuten klusterin nimi, alue ja ilmentymän kokoonpano ja yhdistelmä. M5-instanssit ovat edullisempia CPU-pohjaisia ja G4dn ovat kalliimpia GPU-pohjaisia, jotta ne tarjoavat kustannus/suorituskyky-korjauksia.
Toiminnan seuranta
Toiminnallisten lokistandardien ylläpitämiseksi kaikki Lambdan toiminnot sisältävät koodin lokien tallentamista ja käsittelyä varten Amazon Kinesis Data Firehose. Esimerkiksi jokainen Lähettäjä Lambda -funktiosta käsitelty kehyserä kirjataan aikaleimalla, toiminnon nimellä ja Lambda-funktion vastauksen JSON:lla ja tallennetaan Amazon S3:een. Seuraava kaavio havainnollistaa tätä arkkitehtuurin vaihetta.
käyttöönoton
Käyttöönotto hoidetaan AWS SAM:lla, avoimen lähdekoodin kehyksellä palvelimettomien sovellusten rakentamiseen AWS:ssä. AWS SAM mahdollistaa infrastruktuurin suunnittelun, mukaan lukien toiminnot, API:t, tietokannat ja tapahtumalähdekartoitukset, jotka voidaan koodata ja ottaa helposti käyttöön uusissa AWS-ympäristöissä. Käyttöönoton aikana AWS SAM -syntaksi käännetään kielelle AWS-pilven muodostuminen hoitaa infrastruktuurin toimittaminen.
A template.yaml
tiedosto sisältää infrastruktuurin tiedot sekä viritettävät parametrit, kuten Kinesis Data Streams -latenssivivut, jotka on kuvattu edellisissä osissa. A samconfig.toml
tiedosto sisältää käyttöönottoparametreja, kuten pinon nimen, S3-säilön nimen, johon sovellustiedostot, kuten Lambda-toimintokoodi, on tallennettu, ja resurssitunnisteita kustannusten seurantaa varten. Deploy.sh-komentosarja yksinkertaisilla komennoilla riittää koko mallin luomiseen ja käyttöönottoon:
Käyttäjän työnkulku
Yhteenvetona voidaan todeta, että infrastruktuurin käyttöönoton jälkeen voit aloittaa noudattamalla tätä työnkulkua:
- Luo Intel 3DAT -asiakas asiakaskirjaston avulla.
- API:n avulla voit luoda uuden liukuhihnan esiintymän, joka vastaa vaadittavaa käsittelyä, esimerkiksi 3D-asennon arviointia varten.
- Luo projektista uusi ilmentymä, joka kulkee klusterin ARN ja Kinesis-jonon ARN sisällä.
- Luo uusi esiintymä liukuhihnaparametrijoukosta.
- Luo uusi liukuhihnaparametrien esiintymä, joka liittyy liukuhihnan parametrijoukkoon.
- Luo uusi käyttäjäryhmä, joka on liitetty projektitunnukseen ja liukuhihnan parametrijoukon tunnukseen.
- Luo uusi käyttäjä, joka on liitetty käyttäjäryhmään.
- Lataa .zip-tiedosto videoista Amazon S3:een käyttämällä ennalta allekirjoitettua S3-URL-osoitetta, joka on luotu työn API:n lataustoiminnolla.
- Lähetä a
create_job
API-kutsu työparametreilla, jotka määrittävät videotiedostojen sijainnin. Tämä aloittaa käsittelytyön.
Yhteenveto
Sovellus on nyt live-tilassa ja valmis testattavaksi sekä urheilijoiden että valmentajien kanssa. Intel OTG on innoissaan voidessaan tehdä tietokonenäköä käyttävästä innovatiivisesta asennonarviointitekniikasta useiden käyttäjien ulottuville, kehittäjistä urheilijoihin ohjelmistotoimittajakumppaneihin.
AWS-tiimi haluaa intohimoisesti auttaa Intel OTG:n kaltaisia asiakkaita nopeuttamaan ML-matkaansa ideointi- ja löytövaiheesta ML Solutions Labin avulla kovettumiseen ja käyttöönottovaiheeseen AWS ML ProServen avulla. Me kaikki seuraamme tarkasti vuoden 2021 Tokion olympialaisia tänä kesänä nähdäksemme kaiken edistyksen, jonka ML voi avata urheilussa.
Aloita tänään! Tutustu käyttötapaukseesi tässä viestissä mainittujen palveluiden ja monien muiden AWS-hallintakonsoli.
Tietoja Tekijät
Han mies on koneoppimisen ja tekoälyn vanhempi johtaja AWS:ssä San Diegossa, Kaliforniassa. Hän on valmistunut tekniikan tohtoriksi Northwestern Universitystä ja hänellä on usean vuoden kokemus liikkeenjohdon konsulttina, joka neuvoo asiakkaita valmistuksessa, rahoituspalveluissa ja energia-alalla. Nykyään hän työskentelee intohimoisesti asiakkaiden kanssa eri toimialoilta kehittääkseen ja toteuttaakseen koneoppimis- ja tekoälyratkaisuja AWS:ssä. Hän seuraa NBA:ta ja pelaa koripalloa vapaa-ajallaan.
Iman Kamyabi on ML-insinööri, jolla on AWS Professional Services. Hän on työskennellyt useiden AWS-asiakkaiden kanssa puolustaakseen parhaita käytäntöjä toistettavien ja luotettavien ML-putkien perustamisessa.
Jonathan Lee on Intelin urheiluteknologian johtaja, Olympic Technology Group. Hän opiskeli koneoppimisen soveltamista terveyteen UCLA: n opiskelijana ja valmistuttuaan Oxfordin yliopistossa. Hänen uransa on keskittynyt algoritmien ja anturien kehittämiseen terveyden ja ihmisen suorituskyvyn hyväksi. Hän johtaa nyt 3D-urheilijoiden seurantaprojektia Intelissä.
Nelson Leung on Intelin Sports Performance CoE: n foorumiarkkitehti, jossa hän määrittelee end-to-end-arkkitehtuurin huipputuotteille, jotka parantavat urheilijan suorituskykyä. Hän johtaa myös näiden koneoppimisratkaisujen toteuttamista, käyttöönottoa ja tuotantoa mittakaavassa eri Intel-kumppaneille.
Troy Squillaci on DecSecOps-insinööri Intelillä, jossa hän toimittaa ammattimaisia ohjelmistoratkaisuja asiakkaille DevOpsin parhaiden käytäntöjen avulla. Hän nauttii tekoälyratkaisujen integroimisesta skaalautuviin alustoihin useilla eri aloilla.
Paul Min on Associate Solutions Architect -harjoittelija Amazon Web Servicesissä (AWS), jossa hän auttaa asiakkaita eri toimialoilla edistämään tehtäväänsä ja nopeuttamaan pilvipalveluiden käyttöönottoa. Aiemmin Intelillä hän työskenteli ohjelmistotekniikan harjoittelijana auttamaan 3D Athlete Tracking Cloud SDK:n kehittämisessä. Työn ulkopuolella Paul nauttii golfin pelaamisesta, ja hänet voidaan kuulla laulavan.
- Coinsmart. Euroopan paras Bitcoin- ja kryptopörssi.
- Platoblockchain. Web3 Metaverse Intelligence. Tietoa laajennettu. VAPAA PÄÄSY.
- CryptoHawk. Altcoinin tutka. Ilmainen kokeilu.
- Lähde: https://aws.amazon.com/blogs/machine-learning/the-intel3d-athlete-tracking-3dat-scalable-architecture-deploys-pose-estimation-models-using-amazon-kinesis-data-streams- ja-amazon-eks/
- "
- &
- 000
- 100
- 2021
- 3d
- Meistä
- kiihdyttää
- pääsy
- saatavilla
- Mukaan
- Tili
- poikki
- Toiminta
- toimet
- Lisäksi
- lisä-
- admin
- Hyväksyminen
- AI
- algoritmi
- Kaikki
- Amazon
- Amazon Web Services
- keskuudessa
- api
- API
- Hakemus
- sovellukset
- sopiva
- arkkitehtuuri
- perustelut
- osoitettu
- Työtoveri
- urheilijat
- attribuutteja
- automaattisesti
- AWS
- Varmuuskopiointi
- Koripallo
- ennen
- Hyödyt
- PARAS
- parhaat käytännöt
- Musta
- Uutiset ja media
- elin
- Laatikko
- rakentaa
- Rakentaminen
- soittaa
- Koko
- joka
- Ura
- tapauksissa
- keskeinen
- mestari
- muuttaa
- valintoja
- asiakkaat
- pilvi
- koodi
- kokoelma
- kerääjä
- yhdistetty
- komponentti
- Laskea
- tietokone
- Konfigurointi
- liitäntä
- konsultti
- kuluttaja
- Kuluttajat
- Kontti
- Kontit
- sisältää
- jatkuu
- ohjaus
- koordinoida
- Ydin
- vastaava
- luoda
- luotu
- luo
- Luominen
- luominen
- Valtakirja
- kriittinen
- ratkaiseva
- Nykyinen
- Tällä hetkellä
- asiakassuhde
- asiakas
- Asiakkaat
- leikkaamisreuna
- tiedot
- tietokanta
- tietokannat
- päivä
- omistautunut
- syvempää
- Antaa
- sijoittaa
- käyttöön
- käyttöönotto
- lauennut
- Malli
- suunniteltu
- yksityiskohta
- yksityiskohtainen
- yksityiskohdat
- Detection
- kehittää
- Kehittäjä
- kehittäjille
- Kehitys
- eri
- eriyttää
- ohjata
- Johtaja
- löytö
- näytöt
- Satamatyöläinen
- ei
- verkkotunnuksia
- alas
- aikana
- helposti
- päätepiste
- energia
- Moottori
- insinööri
- Tekniikka
- ympäristö
- tapahtuma
- esimerkki
- innoissaan
- olemassa
- odottaa
- experience
- tutkia
- Ominaisuus
- Vihdoin
- taloudellinen
- rahoituspalvelut
- Etunimi
- sovittaa
- LAIVASTON
- Joustavuus
- joustava
- keskityttiin
- seurata
- jälkeen
- seuraa
- muoto
- tulevaisuuteen
- FRAME
- Puitteet
- toiminto
- toiminnallinen
- toiminnallisuus
- tehtävät
- tulevaisuutta
- tuottaa
- tuottaa
- sukupolvi
- Antaminen
- tavoite
- hyvä
- GPU
- valmistua
- Ryhmä
- Ryhmän
- kahva
- Käsittely
- Tarvikkeet
- terveys
- kuuli
- auttaa
- auttaa
- auttaa
- tätä
- korkeampi
- Miten
- HTTPS
- ihmisen
- Identiteetti
- kuva
- toteuttaa
- täytäntöönpano
- tärkeä
- sisältää
- sisältää
- Mukaan lukien
- henkilökohtainen
- teollisuuden
- teollisuus
- Infrastruktuuri
- innovatiivinen
- panos
- insertit
- asentaa
- integroitu
- integraatio
- Intel
- Älykkyys
- vuorovaikutus
- liitäntä
- IT
- Job
- Työpaikat
- matka
- avain
- laboratorio
- käynnistää
- käynnistäminen
- Liidit
- oppiminen
- Taso
- Kirjasto
- linja
- Lista
- lastaus
- sijainti
- sijainnit
- kone
- koneoppiminen
- tehty
- ylläpitää
- merkittävä
- TEE
- mies
- hoitaa
- onnistui
- johto
- valmistus
- kartta
- kartoitus
- mainitsi
- menetelmät
- Metrics
- minimi
- Tehtävä
- ML
- Puhelinnumero
- Mobiilisovellukset
- malli
- mallit
- modulaarinen
- lisää
- eniten
- moninkertainen
- nimet
- NBA
- välttämätön
- tarpeet
- numero
- olympialaiset
- avautuu
- käyttää
- optimoitu
- Vaihtoehto
- tilata
- Muut
- oma
- Oxford
- paketti
- osa
- erityinen
- erityisesti
- kumppani
- Ohimenevä
- intohimoinen
- Kuvio
- osuus
- suorituskyky
- esittävä
- näkökulma
- kappale
- foorumi
- Platforms
- pelaa
- Runous
- pistettä
- mahdollinen
- teho
- voimakas
- Valmistella
- edellinen
- ensisijainen
- periaate
- prioriteetti
- prosessi
- Prosessit
- käsittely
- Suoritin
- tuottaa
- tuotanto
- Tuotteemme
- ammatillinen
- projekti
- toimittaa
- tarjoaa
- tarkoitus
- alue
- raaka
- reaaliaika
- tunnistaa
- ennätys
- asiakirjat
- suhteen
- luotettava
- pyynnöt
- edellyttää
- tarvitaan
- vaatimukset
- Vaatii
- resurssi
- Esittelymateriaalit
- vastaus
- tulokset
- ajaa
- juoksu
- Turvallisuus
- San
- skaalautuvuus
- skaalautuva
- Asteikko
- skaalaus
- sdk
- turvallinen
- segmentit
- serverless
- palvelu
- Palvelut
- setti
- asetus
- Shape
- jakaminen
- Kuori
- esitetty
- samankaltainen
- samalla lailla
- Yksinkertainen
- Koko
- So
- Tuotteemme
- ohjelmisto palveluna
- ohjelmistotuotanto
- ratkaisu
- Ratkaisumme
- jonkin verran
- Joku
- erikoistunut
- tekniset tiedot
- nopeus
- Urheilu
- pino
- Vaihe
- standardi
- standardit
- Alkaa
- alkoi
- alkaa
- Osavaltio
- huippu-
- Tila
- Levytila
- verkkokaupasta
- virta
- streaming
- toimitettu
- Myöhemmin
- kesä
- tuki
- Tukee
- järjestelmä
- ottaen
- joukkue-
- Elektroniikka
- Testaus
- siksi
- Kautta
- SOLMIO
- aika
- tänään
- yhdessä
- Tokio
- raita
- Seuranta
- tyypit
- tyypillisesti
- UCLA
- yliopisto
- Oxfordin yliopisto
- avata
- Päivitykset
- käyttää
- Käyttäjät
- Hyödyntämällä
- arvo
- lajike
- eri
- pystysuunnassa
- Video
- Videoita
- visio
- verkko
- verkkopalvelut
- KUKA
- ilman
- Referenssit
- työskenteli
- työskentely
- vuotta