Această postare de blog este co-scrisă de Jonathan Lee, Nelson Leung, Paul Min și Troy Squillaci de la Intel.
In Partea 1 din această postare, am discutat despre modul în care Intel®3DAT a colaborat Servicii profesionale AWS Machine Learning (MLPS) pentru a construi o aplicație AI SaaS scalabilă. 3DAT folosește viziunea computerizată și AI pentru a recunoaște, urmări și analiza peste 1,000 de puncte de date biomecanice din video standard. Le permite clienților să creeze produse bogate și puternice bazate pe biomecanică, cum ar fi aplicații web și mobile, cu date detaliate de performanță și vizualizări tridimensionale.
În partea 2 a acestei postări, ne aprofundăm în fiecare etapă a arhitecturii. Explorăm serviciile AWS utilizate pentru a îndeplini cerințele de proiectare 3DAT, inclusiv Fluxuri de date Amazon Kinesis și Serviciul Amazon Elastic Kubernetes (Amazon EKS), pentru a implementa scalabil modelele necesare de estimare a poziției pentru această aplicație software ca serviciu (SaaS).
Privire de ansamblu asupra arhitecturii
Scopul principal al echipei MLPS a fost să producă conductele modelului de estimare a pozelor 2D și 3D și să creeze o aplicație funcțională și scalabilă. Următoarea diagramă ilustrează arhitectura soluției.
Arhitectura completă este împărțită în cinci componente majore:
- Straturi de interfață cu aplicația utilizator
- Baza de date
- Orchestrarea fluxului de lucru
- Generarea de inferențe de estimare a poziției scalabile
- Monitorizare operațională
Să intrăm în detaliu cu privire la fiecare componentă, interacțiunile lor și rațiunea din spatele alegerilor de design.
Straturi de interfață cu aplicația utilizator
Următoarea diagramă prezintă straturile de interfață a aplicației care asigură accesul utilizatorului și controlul aplicației și al resurselor acesteia.
Aceste puncte de acces acceptă diferite cazuri de utilizare bazate pe diferite persoane ale clienților. De exemplu, un utilizator al unei aplicații poate trimite o lucrare prin intermediul CLI, în timp ce un dezvoltator poate construi o aplicație folosind SDK-ul Python și poate încorpora inteligența de estimare a pozițiilor în aplicațiile lor. CLI și SDK sunt construite ca componente modulare - ambele straturi sunt pachete ale stratului API, care este construit folosind Gateway API Amazon pentru a rezolva apelurile API și asociat AWS Lambda funcții, care au grijă de logica backend asociată cu fiecare apel API. Aceste straturi au fost o componentă crucială pentru echipa Intel OTG, deoarece deschide o bază largă de clienți care pot folosi eficient această aplicație SaaS.
Stratul API
Soluția are un set de bază de nouă API-uri, care corespund tipurilor de obiecte care operează pe această platformă. Fiecare API are un fișier Python care definește acțiunile API care pot fi executate. Crearea de noi obiecte i se atribuie automat un ID de obiect secvenţial. Atributele acestor obiecte sunt stocate și urmărite în Amazon Aurora Serverless baza de date folosind acest ID. Prin urmare, acțiunile API se leagă de funcții care sunt definite într-un fișier central care conține logica backend pentru interogarea bazei de date Aurora. Această logică backend folosește Boto3 Client Amazon RDS DataService pentru a accesa clusterul de baze de date.
Singura excepție este /job
API, care are un create_job
metodă care gestionează trimiterea video pentru a crea o nouă lucrare de procesare. Această metodă pornește Funcții pas AWS logica fluxului de lucru pentru rularea jobului. Prin trecerea într-un job_id
, această metodă folosește Boto3 Client Step Functions pentru a apela start_execution
metodă pentru o anumită stateMachineARN
(Numele resursei Amazon).
Cele opt API-uri obiect au metodele și modelul de acces similar, așa cum sunt rezumate în tabelul următor.
Tipul metodei | Numele funcției | Descriere |
GET | list_[object_name]s |
Selectează toate obiectele de acest tip din baza de date și afișează. |
POST | create_[object] |
Inserează o înregistrare nouă de obiect cu intrările necesare în baza de date. |
GET | get_[object] |
Selectează atributele obiectului pe baza ID-ului obiectului din baza de date și afișează. |
PUT | update_[object] |
Actualizează o înregistrare de obiect existentă cu intrările necesare. |
DELETE | delete_[object] |
Șterge o înregistrare de obiect existentă din baza de date pe baza ID-ului obiectului. |
Detaliile celor nouă API-uri sunt următoarele:
- /utilizator – Un utilizator este identitatea cuiva autorizat să trimită joburi la această aplicație. Crearea unui utilizator necesită un nume de utilizator, un e-mail de utilizator și un ID de grup căruia îi aparține utilizatorul.
- /grup de utilizatori – Un grup de utilizatori este o colecție de utilizatori. Fiecare grup de utilizatori este mapat la un proiect și un set de parametri de conductă. Pentru a avea niveluri diferite (în ceea ce privește resursele infrastructurale și parametrii conductei), utilizatorii sunt împărțiți în grupuri de utilizatori. Fiecare utilizator poate aparține unui singur grup de utilizatori. Crearea unui grup de utilizatori necesită un ID de proiect, un ID de set de parametri de conductă, numele grupului de utilizatori și descrierea grupului de utilizatori. Rețineți că grupurile de utilizatori sunt diferite de rolurile de utilizator definite în contul AWS. Acesta din urmă este folosit pentru a oferi un nivel diferit de acces în funcție de rolurile lor de acces (de exemplu, administrator).
- /proiect – Un proiect este utilizat pentru a grupa diferite seturi de resurse infrastructurale. Un proiect este asociat cu un singur
project_cluster_url
(cluster Aurora) pentru înregistrarea utilizatorilor, locurilor de muncă și a altor metadate, aproject_queue_arn
(Kinesis Data Streams ARN) și un mediu de execuție de calcul (controlat în prezent prin Cortex) utilizat pentru rularea inferențelor asupra loturilor de cadre sau postprocesarea videoclipurilor. Fiecare grup de utilizatori este asociat unui proiect, iar acest mecanism este modul în care diferitele niveluri sunt activate în ceea ce privește latența și puterea de calcul pentru diferite grupuri de utilizatori. Crearea unui proiect necesită un nume de proiect, un URL al clusterului de proiect și un ARN de coadă de proiecte. - /conducta – O conductă este asociată cu o singură configurație pentru o secvență de containere de procesare care efectuează procesare video în clusterul de generare a inferențelor Amazon EKS coordonat de Cortex (consultați secțiunea despre generarea de inferențe de procesare video pentru mai multe detalii). De obicei, acesta constă din trei containere: preprocesare și decodare, detectarea obiectelor și estimarea poziției. De exemplu, pasul de decodare și de detectare a obiectelor sunt aceleași pentru conductele 2D și 3D, dar schimbarea ultimului container folosind fie HRNet, fie 3DMPPE are ca rezultat setul de parametri pentru conductele de procesare 2D vs. 3D. Puteți crea noi configurații pentru a defini posibile conducte care pot fi utilizate pentru procesare și necesită ca intrare un nou fișier Python în depozitul Cortex care detaliază secvența apelurilor punctelor finale ale modelului care definesc acea conductă (consultați secțiunea privind generarea de inferențe pentru procesarea video). ). Punctul final al conductei este punctul final Cortex care este apelat pentru a procesa un singur cadru. Crearea unei conducte necesită un nume de conductă, o descriere a conductei și un punct final al conductei.
- /pipeline_parameter_set – Un set de parametri de conductă este o colecție JSON flexibilă de parametri multipli (un timp de execuție de configurare a conductei) pentru o anumită conductă și este adăugat pentru a oferi flexibilitate pentru personalizarea viitoare atunci când sunt necesare mai multe durate de configurare a conductei. Grupurile de utilizatori pot fi asociate cu un anumit set de parametri de conductă, iar scopul acestuia este de a avea diferite grupuri de parametri per grup de utilizatori și per conductă. Aceasta a fost o completare importantă de perspectivă pentru Intel OTG pentru a construi personalizarea care acceptă portabilitatea pe măsură ce diferiți clienți, în special ISV, încep să folosească aplicația.
- /pipeline_parameters – O singură colecție de parametri de conductă este o instanțiere a unui set de parametri de conductă. Aceasta o face o mapare 1:mulți a unui parametru de conductă setat la parametrii de conductă. Acest API necesită un ID de conductă pentru a se asocia cu setul de parametri de conductă care permite crearea unei conducte pentru o mapare 1:1 a parametrilor conductei la conductă. Celelalte intrări cerute de acest API sunt un ID de set de parametri ai conductei, valoarea parametrilor conductei și numele parametrilor conductei.
- /video – Un obiect video este utilizat pentru a defini videoclipuri individuale care alcătuiesc un pachet .zip trimis în timpul unui job. Acest fișier este împărțit în mai multe videoclipuri după trimitere. Un videoclip este legat de
job_id
pentru jobul în care este trimis pachetul .zip și Serviciul Amazon de stocare simplă (Amazon S3) căi pentru locația videoclipurilor separate brute și rezultatele postprocesării fiecărui videoclip. Obiectul video conține, de asemenea, un procentaj de progres al videoclipului, care este actualizat constant în timpul procesării loturilor individuale de cadre ale videoclipului respectiv, precum și un semnalizare de stare video pentru finalizare sau nefinalizată. Crearea unui videoclip necesită un ID de job, calea videoclipului, calea rezultatelor video, procentul de progres al videoclipului și starea videoclipului. - /frame_batch - A
frame_batch
obiectul este un mini-lot de cadre create prin eșantionarea unui singur videoclip. Separarea unui videoclip în loturi de cadre de dimensiuni obișnuite oferă o pârghie pentru reglarea latenței și crește paralelizarea și debitul. Aceasta este unitatea granulară care este rulată prin Kinesis Data Streams pentru inferență. Crearea unui lot de cadre necesită un ID video, numărul de început al lotului de cadre, numărul de final al lotului de cadre, calea de introducere a lotului de cadre, calea rezultatelor lotului de cadre și starea lotului de cadre. - /loc de munca – Acest API de interacțiune este utilizat pentru trimiterea fișierelor pentru a începe o lucrare de procesare. Acest API are o funcție diferită față de alte API-uri de obiect, deoarece este calea directă pentru a interacționa cu coordonarea fluxului de lucru Funcții de pas de backend de procesare video și clusterul Amazon EKS. Acest API necesită un ID de utilizator, un ID de proiect, un ID de conductă, un ID de set de parametri ai canalului, parametrii jobului și starea jobului. În parametrii jobului, este specificată o cale pentru fișierul de intrare, care este locația din Amazon S3 în care se află pachetul .zip de videoclipuri care urmează să fie procesate. Încărcarea fișierului este gestionată cu
upload_handler
metoda, care generează o adresă URL S3 presemnată pentru ca utilizatorul să plaseze un fișier. O WORKFLOW_STATEMACHINE_ARN este o variabilă de mediu care este transmisă cătrecreate_job
API pentru a specifica unde este trimis un pachet video .zip cu o cale pentru fișierul de intrare pentru a începe o lucrare.
Următorul tabel rezumă funcțiile API-ului.
Tipul metodei | Funcţie | Descriere |
GET | list_jobs |
Selectează toate lucrările din baza de date și afișează. |
POST | create_ job |
Inserează o nouă înregistrare de job cu ID utilizator, ID proiect, ID conductă, ID set de parametri canal, calea rezultatelor job, parametri job și starea jobului. |
GET | get_ job |
Selectează atributele jobului pe baza ID-ului jobului din baza de date și afișează. |
GET | upload_handler |
Generează o adresă URL S3 semnată ca locație pentru încărcarea fișierului .zip. Necesită un nume de compartiment S3 și se așteaptă la un tip de fișier aplicație/zip. |
Stratul Python SDK
Pe baza API-urilor, echipa a creat o bibliotecă client Python SDK ca un wrapper pentru a facilita accesul dezvoltatorilor la metodele API. Au folosit open-source Poezie, care se ocupă de ambalarea Python și de managementul dependențelor. Au creat o client.py
fișier care conține funcții care împachetează fiecare dintre API-urile folosind Python requests
bibliotecă pentru a gestiona solicitările și excepțiile API.
Pentru ca dezvoltatorii să lanseze SDK-ul Intel 3DAT, trebuie să instaleze și să construiască pachetul Poetry. Apoi, pot adăuga un simplu import Python de intel_3dat_sdk
la orice cod Python.
Pentru a utiliza clientul, puteți crea o instanță a clientului, specificând punctul final API:
Puteți utiliza apoi clientul pentru a apela metodele individuale, cum ar fi create_pipeline
metoda (a se vedea codul următor), luând în considerare argumentele adecvate, cum ar fi numele conductei și descrierea conductei.
Stratul CLI
În mod similar, echipa a construit pe API-uri pentru a crea o interfață de linie de comandă pentru utilizatorii care doresc să acceseze metodele API cu o interfață simplă, fără a fi nevoie să scrie cod Python. Au folosit pachetul open-source Python Clic (Kit de creare a interfeței liniei de comandă). Beneficiile acestui cadru sunt imbricarea arbitrară a comenzilor, generarea automată a paginii de ajutor și suportul pentru încărcarea leneșă a subcomenzilor în timpul execuției. În același client.py
Fișier ca și în SDK, fiecare metodă client SDK a fost împachetată folosind Click și argumentele metodei necesare au fost convertite în steaguri de linie de comandă. Intrările de steag sunt apoi folosite la apelarea comenzii SDK.
Pentru a lansa CLI, puteți utiliza CLI configure
comanda. Vi se solicită adresa URL a punctului final:
Acum puteți folosi CLI pentru a apela diferite comenzi legate de metodele API, de exemplu:
Baza de date
Ca bază de date, această aplicație folosește Aurora Serverless pentru a stoca metadatele asociate cu fiecare dintre API-urile cu MYSQL ca motor de bază de date. Alegerea serviciului de bază de date Aurora Serverless respectă principiul de proiectare pentru a minimiza supraîncărcarea infrastructurală prin utilizarea serviciilor AWS fără server atunci când este posibil. Următoarea diagramă ilustrează această arhitectură.
modul motor fără server îndeplinește tiparul de utilizare intermitentă, deoarece această aplicație se extinde la noi clienți, iar sarcinile de lucru sunt încă incerte. La lansarea unui punct final al bazei de date, nu este necesară o anumită dimensiune a instanței DB, ci doar un interval minim și maxim pentru capacitatea clusterului. Aurora Serverless se ocupă de furnizarea adecvată a unei flote de routere și distribuie volumul de lucru între resurse. Aurora Serverless realizează automat reținerea copiilor de rezervă pentru minim 1 zi până la 35 de zile. Echipa a optimizat pentru siguranță setând valoarea implicită la valoarea maximă de 35.
În plus, echipa a folosit API de date pentru a gestiona accesul la clusterul Aurora Serverless, care nu necesită o conexiune persistentă și, în schimb, oferă un punct final HTTP securizat și integrare cu SDK-urile AWS. Această caracteristică folosește Manager de secrete AWS pentru a stoca acreditările bazei de date, astfel încât să nu fie nevoie să transmiteți în mod explicit acreditările. Scripturile CREATE TABLE au fost scrise în fișiere .sql pentru fiecare dintre cele nouă tabele care corespund celor nouă API-uri. Deoarece această bază de date conținea toate metadatele și starea obiectelor din sistem, metodele API au fost executate folosind comenzile SQL adecvate (de exemplu select * from Job
pentru list_jobs
API) și a trecut la execute_statement
metoda de la clientul Amazon RDS din API-ul de date.
Orchestrarea fluxului de lucru
Coloana vertebrală funcțională a aplicației a fost gestionată folosind Funcții de pas pentru a coordona fluxul de lucru, așa cum se arată în diagrama următoare.
Mașina de stări a constat dintr-o secvență de patru funcții Lambda, care pornește atunci când un job este trimis folosind create_job
metoda din job
API. ID-ul utilizatorului, ID-ul proiectului, ID-ul conductei, ID-ul setului de parametri al conductei, calea rezultatelor jobului, parametrii jobului și starea jobului sunt necesare pentru crearea jobului. Puteți încărca mai întâi un pachet .zip de fișiere video folosind upload_handler
metoda din API-ul jobului pentru a genera o adresă URL S3 presemnată. În timpul trimiterii jobului, calea fișierului de intrare este transmisă prin parametrii jobului, pentru a specifica locația fișierului. Aceasta pornește rularea mașinii de stare a fluxului de lucru, declanșând patru pași principali:
- Funcția Lambda de inițializare
- Funcția Lambda de trimitere
- Finalizare Verificare funcție Lambda
- Funcția colector Lambda
Funcția Lambda de inițializare
Funcția principală a inițializatorului este de a separa pachetul .zip în fișiere video individuale și de a le pregăti pentru expeditor. Mai întâi, fișierul .zip este descărcat, apoi fiecare fișier individual, inclusiv fișierele video, este dezarhivat și extras. Videoclipurile, de preferință în format .mp4, sunt încărcate înapoi într-o găleată S3. Folosind create_video
metoda din video
API, un obiect video este creat cu calea video ca intrare. Aceasta inserează date pentru fiecare videoclip în baza de date Aurora. Orice alte tipuri de fișiere, cum ar fi fișierele JSON, sunt considerate metadate și încărcate în mod similar, dar nu este creat niciun obiect video. O listă cu numele fișierelor și fișierelor video extrase este trecută la pasul următor.
Funcția Lambda de trimitere
Funcția Submitter preia fișierele video care au fost extrase de Initializator și creează mini-loturi de cadre video ca imagini. Cele mai multe modele actuale de viziune computerizată în producție au fost instruite pe imagini, astfel încât chiar și atunci când videoclipul este procesat, acestea sunt mai întâi separate în cadre de imagine înainte de inferența modelului. Această soluție actuală care utilizează un model de estimare a poziției de ultimă generație nu este diferită - loturile de cadre de la Submitter sunt transmise la Kinesis Data Streams pentru a iniția pasul de generare a inferenței.
Mai întâi, fișierul video este descărcat de funcția Lambda. Rata de cadre și numărul de cadre sunt calculate folosind FileVideoStream
modul din imutils.video
biblioteca de procesare. Cadrele sunt extrase și grupate în funcție de o dimensiune specificată a mini-lot, care este unul dintre parametrii cheie reglabili ai acestei conducte. Folosind biblioteca Python Picle, datele sunt serializate și încărcate pe Amazon S3. Ulterior, este creat un obiect de lot cadru și intrarea de metadate este creată în baza de date Aurora. Această funcție Lambda a fost creată folosind un Dockerfile cu dependențe opencv-python
, numpy
, și imutils
biblioteci.
Finalizare Verificare funcție Lambda
Funcția Verificare finalizare continuă să interogheze baza de date Aurora pentru a vedea, pentru fiecare videoclip din pachetul .zip pentru această lucrare curentă, câte loturi de cadre sunt în starea TERMINATĂ. Când toate loturile de cadre pentru toate videoclipurile sunt finalizate, acest proces de verificare este încheiat.
Funcția colector Lambda
Funcția de colectare preia rezultatele inferențelor care au fost efectuate pe fiecare cadru în timpul etapei Consumer și le combină într-un lot de cadre și într-un videoclip. Datele combinate combinate sunt apoi încărcate într-un compartiment S3. Apoi, funcția invocă API-ul de postprocesare Cortex pentru o anumită conductă ML pentru a efectua orice calcule de postprocesare și adaugă rezultatele agregate prin video la găleata de ieșire. Multe dintre aceste valori sunt calculate pe cadre, cum ar fi viteza, accelerația și unghiul de îmbinare, astfel încât acest calcul trebuie efectuat pe datele agregate. Ieșirile principale includ date privind punctele cheie ale corpului (agregate în format CSV), calculele BMA (cum ar fi accelerația) și suprapunerea vizuală a punctelor cheie adăugate la fiecare cadru dintr-un fișier imagine.
Generarea de inferențe de estimare a poziției scalabile
Motorul de procesare care alimentează scalarea inferenței ML are loc în această etapă. Acesta implică trei piese principale, fiecare având propriile pârghii de concurență care pot fi reglate pentru compromisuri de latență (vezi diagrama următoare).
Această arhitectură permite experimentarea în testarea câștigurilor de latență, precum și flexibilitate pentru viitor, când încărcăturile de lucru se pot schimba cu diferite combinații de segmente de utilizatori finali care accesează aplicația.
Fluxuri de date Kinesis
Echipa a ales Kinesis Data Streams pentru că este folosit în mod obișnuit pentru a gestiona datele în flux și, în acest caz, este potrivit pentru că poate gestiona loturile de cadre într-un mod similar pentru a oferi scalabilitate și paralelizare. În funcția Submitter Lambda se folosește clientul Kinesis Boto3, cu put_record
metoda de transmitere a metadatelor asociate cu un singur lot de cadre, cum ar fi ID-ul lotului de cadre, cadrul de început al lotului de cadre, cadrul de sfârșit al lotului de cadre, forma imaginii, rata de cadre și ID-ul video.
Am definit diverse configurații de cozi de lucru și flux de date Kinesis pentru a seta niveluri de debit care se leagă de nivelul de prioritate al diferitelor grupuri de utilizatori. Accesul la diferite niveluri de putere de procesare este legat prin trecerea unui ARN de coadă de proiecte atunci când se creează un proiect nou folosind project
API. Fiecare grup de utilizatori este apoi legat de un anumit proiect în timpul creării grupului de utilizatori. Trei configurații de flux implicite sunt definite în Model de aplicație fără server AWS Șablon de infrastructură (AWS SAM):
- Standard -
JobStreamShardCount
- Prioritate -
PriorityJobStreamShardCount
- Prioritate ridicată -
HighPriorityJobStreamShardCount
Echipa a folosit câteva pârghii diferite pentru a diferenția puterea de procesare a fiecărui flux sau pentru a regla latența sistemului, așa cum este rezumat în tabelul următor.
Pârghie | Descriere | Valoare implicită |
ciob de sticlă | Un fragment este nativ pentru Kinesis Data Streams; este unitatea de bază de debit pentru ingestie. Valoarea implicită este 1MB/sec, ceea ce echivalează cu 1,000 de înregistrări de date pe secundă. | 2 |
KinesisBatchSize |
Numărul maxim de înregistrări pe care Kinesis Data Streams le preia într-un singur lot înainte de a invoca funcția Lambda de consum. | 1 |
KinesisParallelizationFactor |
Numărul de loturi de procesat de la fiecare fragment simultan. | 1 |
Fan-out îmbunătățit | Consumatorii de date care au activat fan-out îmbunătățit au un debit de asimilare dedicat per consumator (cum ar fi 1 MB/sec implicit) în loc să partajeze debitul între consumatori. | de pe |
Funcția Lambda de consum
Din perspectiva Kinesis Data Streams, un consumator de date este un serviciu AWS care preia date dintr-un fragment de flux de date pe măsură ce datele sunt generate într-un flux. Această aplicație folosește o funcție Consumer Lambda, care este invocată atunci când mesajele sunt transmise din cozile de flux de date. Fiecare funcție Consumer procesează un lot de cadre, parcurgând următorii pași. Mai întâi, se face un apel către API-ul procesorului Cortex în mod sincron, care este punctul final care găzduiește conducta de inferență a modelului (consultați secțiunea următoare despre Amazon EKS cu Cortex pentru mai multe detalii). Rezultatele sunt stocate în Amazon S3 și se realizează o actualizare a bazei de date prin schimbarea stării lotului de cadre procesate în Complete
. Gestionarea erorilor este încorporată pentru a gestiona apelul API Cortex cu o buclă de reîncercare pentru a gestiona orice erori 504 din clusterul Cortex, cu numărul de reîncercări setat la 5.
Amazon EKS cu Cortex pentru inferență ML
Echipa a folosit Amazon EKS, un serviciu Kubernetes gestionat în AWS, ca motor de calcul pentru inferența ML. A fost făcută o alegere de proiectare pentru a utiliza Amazon EKS pentru a găzdui puncte finale ML, oferind flexibilitatea rulării Kubernetes în amonte cu opțiunea de clustere, ambele gestionate complet în AWS prin AWS Fargate, sau hardware local prin Amazon EKS oriunde. Aceasta a fost o piesă critică de funcționalitate dorită de Intel OTG, care a oferit opțiunea de a conecta această aplicație la hardware specializat la nivel local, de exemplu.
Cele trei modele ML care au constituit elementele de bază pentru construirea conductelor de inferență au fost un model personalizat Yolo (pentru detectarea obiectelor), un model personalizat HRNet (pentru estimarea poziției 2D) și un model 3DMPPE (pentru estimarea poziției 3D) (vezi precedentul secțiunea ML pentru mai multe detalii). Au folosit open-source Cortex bibliotecă pentru a gestiona implementarea și gestionarea punctelor finale ale conductei de inferență ML și lansarea și implementarea clusterelor Amazon EKS. Fiecare dintre aceste modele a fost împachetat în containere Docker - fișierele model au fost stocate în Amazon S3 și imaginile model au fost stocate în Registrul Amazon de containere elastice (Amazon ECR) — și implementat ca API-uri Cortex Realtime. Versiunile modelelor de containere care rulează pe CPU și GPU au fost create pentru a oferi flexibilitate pentru tipul de hardware de calcul. În viitor, dacă trebuie adăugate modele suplimentare sau conducte de modele, acestea pot crea pur și simplu API-uri Cortex Realtime suplimentare.
Apoi au construit conducte de inferență compunând împreună API-urile modelului Cortex Realtime în API-urile de conductă Cortex Realtime. Un singur API de canalizare în timp real a constat în apelarea unei secvențe de API-uri model în timp real. Funcțiile Consumer Lambda tratate a pipeline
API ca o cutie neagră, folosind un singur apel API pentru a prelua rezultatul final al inferenței pentru o imagine. Au fost create două conducte: o conductă 2D și o conductă 3D.
Conducta 2D combină o etapă de preprocesare a decodării, detectarea obiectelor folosind un model personalizat Yolo pentru a localiza sportivul și a produce cutii de delimitare și, în sfârșit, un model HRNet personalizat pentru crearea punctelor cheie 2D pentru estimarea poziției.
Conducta 3D combină o etapă de preprocesare a decodării, detectarea obiectelor folosind un model personalizat Yolo pentru a localiza sportivul și a produce cutii de delimitare și, în final, un model 3DMPPE pentru crearea punctelor cheie 3D pentru estimarea poziției.
După generarea de inferențe asupra unui lot de cadre, fiecare conductă include, de asemenea, un punct final separat de postprocesare Realtime Cortex care generează trei rezultate principale:
- Datele agregate ale punctelor cheie ale corpului într-un singur fișier CSV
- calcule BMA (cum ar fi accelerația)
- Suprapunerea vizuală a punctelor cheie adăugate fiecărui cadru dintr-un fișier imagine
Funcția Collector Lambda trimite metadatele corespunzătoare asociate cu un anumit videoclip, cum ar fi ID-urile cadrelor și locațiile S3 ale ieșirilor de inferență de estimare a poziției, la punctul final pentru a genera aceste ieșiri de postprocesare.
Cortex este conceput pentru a fi integrat cu Amazon EKS și necesită doar un fișier de configurare a clusterului și o comandă simplă pentru a lansa un cluster Kubernetes:
O altă pârghie pentru reglarea performanței a fost configurația instanței pentru clusterele de calcul. Au fost create trei niveluri cu diferite combinații de instanțe M5 și G4dn, codificate ca fișiere .yaml cu specificații precum numele clusterului, Regiunea și configurația și combinarea instanței. Instanțele M5 sunt bazate pe CPU cu costuri mai mici, iar G4dn sunt bazate pe GPU cu costuri mai mari pentru a oferi unele compromisuri cost/performanță.
Monitorizare operațională
Pentru a menține standardele operaționale de înregistrare, toate funcțiile Lambda includ cod prin care să înregistreze și să ingereze jurnalele Firehose Amazon Kinesis Data. De exemplu, fiecare lot de cadre procesat din funcția Submitter Lambda este înregistrat cu marca temporală, numele acțiunii și răspunsul funcției Lambda JSON și salvat în Amazon S3. Următoarea diagramă ilustrează acest pas în arhitectură.
Implementare
Implementarea este gestionată folosind AWS SAM, un cadru open-source pentru construirea de aplicații fără server în AWS. AWS SAM permite proiectarea infrastructurii, inclusiv funcții, API-uri, baze de date și mapări ale surselor de evenimente să fie codificate și implementate cu ușurință în noi medii AWS. În timpul implementării, sintaxa AWS SAM este tradusă în Formarea AWS Cloud pentru a se ocupa de furnizarea infrastructurii.
A template.yaml
fișierul conține specificațiile infrastructurii împreună cu parametrii reglabili, cum ar fi pârghiile de latență Kinesis Data Streams detaliate în secțiunile precedente. A samconfig.toml
fișierul conține parametri de implementare, cum ar fi numele stivei, numele compartimentului S3 în care sunt stocate fișierele aplicației precum codul funcției Lambda și etichete de resurse pentru costul de urmărire. Un script shell deploy.sh cu comenzi simple este tot ceea ce este necesar pentru a construi și a implementa întregul șablon:
Fluxul de lucru al utilizatorului
Pentru a rezuma, după ce infrastructura a fost implementată, puteți urma acest flux de lucru pentru a începe:
- Creați un client Intel 3DAT utilizând biblioteca client.
- Utilizați API-ul pentru a crea o nouă instanță a unei conducte corespunzătoare tipului de procesare care este necesară, cum ar fi una pentru estimarea poziției 3D.
- Creați o nouă instanță a unui proiect, trecând ARN-ul de cluster și ARN-ul de coadă Kinesis.
- Creați o nouă instanță a unui set de parametri de conductă.
- Creați o nouă instanță a parametrilor conductei care se mapează la setul de parametri a conductei.
- Creați un nou grup de utilizatori care este asociat cu un ID de proiect și un ID de set de parametri de conductă.
- Creați un utilizator nou care este asociat cu grupul de utilizatori.
- Încărcați un fișier .zip cu videoclipuri pe Amazon S3 utilizând o adresă URL S3 presemnată generată de funcția de încărcare din API-ul jobului.
- Trimite o
create_job
Apel API, cu parametri de job care specifică locația fișierelor video. Aceasta începe lucrarea de procesare.
Concluzie
Aplicația este acum live și gata pentru a fi testată atât cu sportivi, cât și cu antrenori. Intel OTG este încântat să facă accesibilă tehnologia inovatoare de estimare a pozițiilor folosind viziunea computerizată pentru o varietate de utilizatori, de la dezvoltatori la sportivi până la partenerii furnizorilor de software.
Echipa AWS este pasionată de a ajuta clienți precum Intel OTG să-și accelereze călătoria ML, de la etapa de ideare și descoperire cu ML Solutions Lab până la etapa de consolidare și implementare cu AWS ML ProServe. Cu toții vom urmări îndeaproape Jocurile Olimpice de la Tokyo din 2021 în această vară pentru a ne gândi la progresul pe care ML le poate debloca în sport.
Incepe astazi! Explorați cazul dvs. de utilizare cu serviciile menționate în această postare și multe altele pe Consola de administrare AWS.
Despre Autori
Omul Han este Senior Manager - Machine Learning & AI la AWS cu sediul în San Diego, CA. El are un doctorat în inginerie la Universitatea Northwestern și are câțiva ani de experiență ca consultant în management, consiliând clienții în producție, servicii financiare și energie. Astăzi, lucrează cu pasiune cu clienți dintr-o varietate de industrii pentru a dezvolta și implementa soluții de învățare automată și AI pe AWS. Îi place să urmărească NBA și să joace baschet în timpul liber.
Iman Kamyabi este inginer ML cu AWS Professional Services. El a lucrat cu o gamă largă de clienți AWS pentru a susține cele mai bune practici în crearea conductelor ML repetabile și fiabile.
Jonathan lee este directorul tehnologiei performanței sportive, Olympic Technology Group la Intel. El a studiat aplicarea învățării automate în sănătate ca student la UCLA și în timpul activității sale de absolvire la Universitatea din Oxford. Cariera sa s-a concentrat pe dezvoltarea de algoritmi și senzori pentru sănătate și performanța umană. Acum conduce proiectul 3D Athlete Tracking la Intel.
Nelson Leung este arhitectul platformei în Sports Performance CoE la Intel, unde definește arhitectura end-to-end pentru produse de ultimă generație care îmbunătățesc performanța sportivilor. De asemenea, conduce implementarea, implementarea și producția acestor soluții de învățare automată la scară la diferiți parteneri Intel.
Troy Squillaci este inginer DecSecOps la Intel, unde oferă clienților soluții software profesionale prin cele mai bune practici DevOps. Îi place să integreze soluții AI în platforme scalabile într-o varietate de domenii.
Paul Min este un stagiar asociat arhitect de soluții la Amazon Web Services (AWS), unde ajută clienții din diferite verticale din industrie să-și avanseze misiunea și să accelereze adoptarea lor în cloud. Anterior la Intel, a lucrat ca stagiar în inginerie software pentru a ajuta la dezvoltarea SDK-ului 3D Athlete Tracking Cloud. În afara serviciului, lui Paul îi place să joace golf și poate fi auzit cântând.
- Coinsmart. Cel mai bun schimb de Bitcoin și Crypto din Europa.
- Platoblockchain. Web3 Metaverse Intelligence. Cunoștințe amplificate. ACCES LIBER.
- CryptoHawk. Radar Altcoin. Încercare gratuită.
- Sursa: https://aws.amazon.com/blogs/machine-learning/the-intel3d-athlete-tracking-3dat-scalable-architecture-deploys-pose-estimation-models-using-amazon-kinesis-data-streams- și-amazon-eks/
- "
- &
- 000
- 100
- 2021
- 3d
- Despre Noi
- accelera
- acces
- accesibil
- Conform
- Cont
- peste
- Acțiune
- acțiuni
- plus
- Suplimentar
- admin
- Adoptare
- AI
- Algoritmul
- TOATE
- Amazon
- Amazon Web Services
- între
- api
- API-uri
- aplicație
- aplicatii
- adecvat
- arhitectură
- argumente
- alocate
- Avocat Colaborator
- sportivi
- atribute
- Automat
- AWS
- Backup
- Baschet
- înainte
- Beneficiile
- CEL MAI BUN
- Cele mai bune practici
- Negru
- Blog
- corp
- Cutie
- construi
- Clădire
- apel
- Capacitate
- pasă
- Carieră
- cazuri
- central
- campion
- Schimbare
- alegeri
- clientii
- Cloud
- cod
- colectare
- colector
- combinate
- component
- Calcula
- calculator
- Configuraţie
- conexiune
- consultant
- consumator
- Consumatorii
- Recipient
- Containere
- conține
- continuă
- Control
- coordona
- Nucleu
- Corespunzător
- crea
- a creat
- creează
- Crearea
- creaţie
- scrisori de acreditare
- critic
- crucial
- Curent
- În prezent
- personalizat
- client
- clienţii care
- ultima generație
- de date
- Baza de date
- baze de date
- zi
- dedicat
- Mai adânc
- Oferă
- implementa
- dislocate
- desfășurarea
- implementează
- Amenajări
- proiectat
- detaliu
- detaliat
- detalii
- Detectare
- dezvolta
- Dezvoltator
- Dezvoltatorii
- Dezvoltare
- diferit
- distinge
- direcționa
- Director
- descoperire
- afișează
- Docher
- Nu
- domenii
- jos
- în timpul
- cu ușurință
- Punct final
- energie
- Motor
- inginer
- Inginerie
- Mediu inconjurator
- eveniment
- exemplu
- excitat
- existent
- se așteaptă
- experienţă
- explora
- Caracteristică
- În cele din urmă
- financiar
- Servicii financiare
- First
- potrivi
- FLOTA
- Flexibilitate
- flexibil
- concentrat
- urma
- următor
- urmează
- format
- de perspectivă
- FRAME
- Cadru
- funcţie
- funcțional
- funcționalitate
- funcții
- viitor
- genera
- generator
- generaţie
- Oferirea
- scop
- bine
- GPU
- absolvent
- grup
- Grupului
- manipula
- Manipularea
- Piese metalice
- Sănătate
- auzit
- ajutor
- ajutor
- ajută
- aici
- superior
- Cum
- HTTPS
- uman
- Identitate
- imagine
- punerea în aplicare a
- implementarea
- important
- include
- include
- Inclusiv
- individ
- industrii
- industrie
- Infrastructură
- inovatoare
- intrare
- inserții
- instala
- integrate
- integrare
- Intel
- Inteligență
- interacţiune
- interfaţă
- IT
- Loc de munca
- Locuri de munca
- călătorie
- Cheie
- de laborator
- lansa
- lansare
- Conduce
- învăţare
- Nivel
- Bibliotecă
- Linie
- Listă
- încărcare
- locaţie
- Locații
- maşină
- masina de învățare
- făcut
- menține
- major
- FACE
- om
- administra
- gestionate
- administrare
- de fabricaţie
- Hartă
- cartografiere
- menționat
- Metode
- Metrici
- minim
- Misiune
- ML
- Mobil
- Aplicatii mobile
- model
- Modele
- modular
- mai mult
- cele mai multe
- multiplu
- nume
- NBA
- necesar
- nevoilor
- număr
- olympics
- deschide
- funcionar
- optimizate
- Opțiune
- comandă
- Altele
- propriu
- Oxford
- pachet
- parte
- special
- în special
- parteneri
- Care trece
- pasionat
- Model
- procent
- performanță
- efectuarea
- perspectivă
- bucată
- platformă
- Platforme
- joc
- Poezie
- puncte
- posibil
- putere
- puternic
- Pregăti
- precedent
- primar
- principiu
- prioritate
- proces
- procese
- prelucrare
- procesor
- produce
- producere
- Produse
- profesional
- proiect
- furniza
- furnizează
- scop
- gamă
- Crud
- în timp real
- recunoaște
- record
- înregistrări
- cu privire la
- de încredere
- cereri de
- necesita
- necesar
- Cerinţe
- Necesită
- resursă
- Resurse
- răspuns
- REZULTATE
- Alerga
- funcţionare
- Siguranţă
- San
- scalabilitate
- scalabil
- Scară
- scalare
- sdk
- sigur
- segmente
- serverless
- serviciu
- Servicii
- set
- instalare
- Modela
- partajarea
- Coajă
- indicat
- asemănător
- asemănător
- simplu
- Mărimea
- So
- Software
- sistem de operare ca serviciu
- Inginerie software
- soluţie
- soluţii
- unele
- Cineva
- de specialitate
- Specificaţii
- viteză
- Sportul
- stivui
- Etapă
- standard
- standarde
- Începe
- început
- începe
- Stat
- de ultimă oră
- Stare
- depozitare
- stoca
- curent
- de streaming
- prezentat
- Ulterior
- de vară
- a sustine
- Sprijină
- sistem
- luare
- echipă
- Tehnologia
- Testarea
- prin urmare
- Prin
- TIE
- timp
- astăzi
- împreună
- Tokyo
- urmări
- Urmărire
- Tipuri
- tipic
- UCLAs
- universitate
- Universitatea din Oxford
- deschide
- Actualizează
- utilizare
- utilizatorii
- Utilizand
- valoare
- varietate
- diverse
- verticalele
- Video
- Video
- viziune
- web
- servicii web
- OMS
- fără
- Apartamente
- a lucrat
- de lucru
- ani