Deze blogpost is mede geschreven door Jonathan Lee, Nelson Leung, Paul Min en Troy Squillaci van Intel.
In Deel 1 van dit bericht hebben we besproken hoe Intel®3DAT samenwerkte met Professionele services voor AWS Machine Learning (MLPS) om een schaalbare AI SaaS-applicatie te bouwen. 3DAT gebruikt computervisie en AI om meer dan 1,000 biomechanica-gegevenspunten van standaardvideo te herkennen, volgen en analyseren. Het stelt klanten in staat om rijke en krachtige biomechanica-gedreven producten te creëren, zoals web- en mobiele applicaties met gedetailleerde prestatiegegevens en driedimensionale visualisaties.
In deel 2 van dit bericht duiken we dieper in elke fase van de architectuur. We onderzoeken de AWS-services die worden gebruikt om te voldoen aan de 3DAT-ontwerpvereisten, waaronder: Amazon Kinesis-gegevensstromen en Amazon Elastic Kubernetes-service (Amazon EKS), om schaalbaar de benodigde pose-inschattingsmodellen voor deze software-as-a-service (SaaS)-toepassing in te zetten.
Architectuur overzicht
Het primaire doel van het MLPS-team was het productiealiseren van de 2D- en 3D-modelpijplijnen voor pose-inschatting en het creëren van een functionele en schaalbare applicatie. Het volgende diagram illustreert de oplossingsarchitectuur.
De volledige architectuur is onderverdeeld in vijf hoofdcomponenten:
- Lagen van gebruikerstoepassingsinterface
- Database
- Workflow-orkestratie
- Schaalbare pose schatting inferentie generatie
- Operationele bewaking
Laten we ingaan op elk onderdeel, hun interacties en de grondgedachte achter de ontwerpkeuzes.
Lagen van gebruikerstoepassingsinterface
Het volgende diagram toont de applicatie-interfacelagen die gebruikerstoegang en controle over de applicatie en de bijbehorende bronnen bieden.
Deze toegangspunten ondersteunen verschillende gebruiksscenario's op basis van verschillende klantpersonages. Een applicatiegebruiker kan bijvoorbeeld een taak indienen via de CLI, terwijl een ontwikkelaar een applicatie kan bouwen met behulp van de Python SDK en pose-intelligentie in zijn applicaties kan insluiten. De CLI en SDK zijn gebouwd als modulaire componenten - beide lagen zijn wrappers van de API-laag, die is gebouwd met behulp van Amazon API-gateway om de API-aanroepen op te lossen en bijbehorende AWS Lambda functies, die zorgen voor de backend-logica die aan elke API-aanroep is gekoppeld. Deze lagen waren een cruciaal onderdeel voor het Intel OTG-team omdat het een brede klantenkring opent die deze SaaS-applicatie effectief kunnen gebruiken.
API-laag
De oplossing heeft een kernset van negen API's, die overeenkomen met de soorten objecten die op dit platform werken. Elke API heeft een Python-bestand dat de API-acties definieert die kunnen worden uitgevoerd. Het aanmaken van nieuwe objecten wordt automatisch sequentieel toegewezen aan een object-ID. De attributen van deze objecten worden opgeslagen en gevolgd in de Amazon Aurora zonder server database met deze ID. Daarom zijn de API-acties gekoppeld aan functies die zijn gedefinieerd in een centraal bestand dat de backend-logica bevat voor het opvragen van de Aurora-database. Deze backend-logica gebruikt de Boto3 Amazon RDS DataService-client om toegang te krijgen tot het databasecluster.
De enige uitzondering is de /job
API, die een . heeft create_job
methode die video-inzending afhandelt voor het maken van een nieuwe verwerkingstaak. Deze methode start de AWS Stap Functies workflowlogica voor het uitvoeren van de taak. Door een job_id
, deze methode gebruikt de Boto3 Stap Functies client om de start_execution
methode voor een gespecificeerde stateMachineARN
(Amazon-bronnaam).
De acht object-API's hebben de methoden en een vergelijkbaar toegangspatroon zoals samengevat in de volgende tabel.
Methodetype: | Functie Naam | Omschrijving |
GET | list_[object_name]s |
Selecteert alle objecten van dit type uit de database en toont. |
POST | create_[object] |
Voegt een nieuw objectrecord met vereiste invoer in de database in. |
GET | get_[object] |
Selecteert objectattributen op basis van de object-ID uit de database en wordt weergegeven. |
PUT | update_[object] |
Werkt een bestaand objectrecord bij met de vereiste invoer. |
VERWIJDEREN | delete_[object] |
Verwijdert een bestaand objectrecord uit de database op basis van object-ID. |
De details van de negen API's zijn als volgt:
- /gebruiker – Een gebruiker is de identiteit van iemand die geautoriseerd is om taken in te dienen bij deze applicatie. Het aanmaken van een gebruiker vereist een gebruikersnaam, e-mailadres van de gebruiker en groeps-ID waartoe de gebruiker behoort.
- /gebruikersgroep – Een gebruikersgroep is een verzameling gebruikers. Elke gebruikersgroep is toegewezen aan één project en één pijplijnparameterset. Om verschillende niveaus te hebben (in termen van infrastructurele middelen en pijplijnparameters), worden gebruikers onderverdeeld in gebruikersgroepen. Elke gebruiker kan tot slechts één gebruikersgroep behoren. Het maken van een gebruikersgroep vereist een project-ID, pijplijnparameterset-ID, gebruikersgroepnaam en gebruikersgroepbeschrijving. Merk op dat gebruikersgroepen verschillen van gebruikersrollen die zijn gedefinieerd in het AWS-account. De laatste wordt gebruikt om verschillende toegangsniveaus te bieden op basis van hun toegangsrollen (bijvoorbeeld admin).
- /project – Een project wordt gebruikt om verschillende sets van infrastructurele middelen te groeperen. Een project is gekoppeld aan een enkele
project_cluster_url
(Aurora-cluster) voor het vastleggen van gebruikers, taken en andere metadata, aproject_queue_arn
(Kinesis Data Streams ARN), en een compute runtime-omgeving (momenteel bestuurd via Cortex) die wordt gebruikt voor het uitvoeren van inferentie op de framebatches of nabewerking op de video's. Elke gebruikersgroep is gekoppeld aan één project en dit mechanisme is hoe verschillende niveaus worden ingeschakeld in termen van latentie en rekenkracht voor verschillende groepen gebruikers. Het maken van een project vereist een projectnaam, projectcluster-URL en projectwachtrij ARN. - /pijpleiding – Een pijplijn is gekoppeld aan een enkele configuratie voor een reeks verwerkingscontainers die videoverwerking uitvoeren in het Amazon EKS-cluster voor het genereren van inferenties, gecoördineerd door Cortex (zie het gedeelte over het genereren van gevolgtrekkingen voor videoverwerking voor meer informatie). Meestal bestaat dit uit drie containers: voorverwerking en decodering, objectdetectie en pose-schatting. De decoderings- en objectdetectiestap zijn bijvoorbeeld hetzelfde voor de 2D- en 3D-pijplijnen, maar het verwisselen van de laatste container met HRNet of 3DMPPE resulteert in de parameterset voor 2D- versus 3D-verwerkingspijplijnen. U kunt nieuwe configuraties maken om mogelijke pijplijnen te definiëren die voor verwerking kunnen worden gebruikt, en het vereist als invoer een nieuw Python-bestand in de Cortex-repo dat de volgorde van modeleindpuntenoproep beschrijft die die pijplijn definiëren (zie de sectie over het genereren van gevolgtrekkingen voor videoverwerking ). Het pijplijneindpunt is het Cortex-eindpunt dat wordt aangeroepen om een enkel frame te verwerken. Het maken van een pijplijn vereist een pijplijnnaam, pijplijnbeschrijving en pijplijneindpunt.
- /pipeline_parameter_set – Een pijplijnparameterset is een flexibele JSON-verzameling van meerdere parameters (een pijplijnconfiguratieruntime) voor een bepaalde pijplijn en wordt toegevoegd om flexibiliteit te bieden voor toekomstige aanpassingen wanneer meerdere pijplijnconfiguratieruntimes vereist zijn. Gebruikersgroepen kunnen worden gekoppeld aan een bepaalde pijplijnparameterset en het doel is om verschillende groepen parameters per gebruikersgroep en per pijplijn te hebben. Dit was een belangrijke toekomstgerichte toevoeging voor Intel OTG om maatwerk in te bouwen dat draagbaarheid ondersteunt naarmate verschillende klanten, met name ISV's, de applicatie gaan gebruiken.
- /pipeline_parameters – Een enkele verzameling pijplijnparameters is een instantie van een pijplijnparameterset. Dit maakt het een 1:veel-toewijzing van een pijplijnparameter die is ingesteld op pijplijnparameters. Deze API vereist een pijplijn-ID om te koppelen aan de set pijplijnparameters waarmee een pijplijn kan worden gemaakt voor een 1:1-toewijzing van pijplijnparameters aan de pijplijn. De andere invoer die door deze API is vereist, is een pijplijnparameterset-ID, de waarde van de pijplijnparameters en de naam van de pijplijnparameter.
- /video – Een video-object wordt gebruikt om individuele video's te definiëren die deel uitmaken van een .zip-pakket dat tijdens een taak wordt ingediend. Dit bestand wordt na indiening opgedeeld in meerdere video's. Een video is gerelateerd aan de
job_id
voor de taak waar het .zip-pakket wordt ingediend, en Amazon eenvoudige opslagservice (Amazon S3) paden voor de locatie van de onbewerkte gescheiden video's en de nabewerkingsresultaten van elke video. Het video-object bevat ook een videovoortgangspercentage, dat constant wordt bijgewerkt tijdens de verwerking van afzonderlijke framebatches van die video, evenals een videostatusvlag voor voltooid of niet voltooid. Voor het maken van een video zijn een taak-ID, videopad, videoresultatenpad, videovoortgangspercentage en videostatus vereist. - /frame_batch - A
frame_batch
object is een mini-batch frames die zijn gemaakt door een enkele video te samplen. Het scheiden van een video in framebatches van normale grootte biedt een hefboom om de latentie af te stemmen en verhoogt de parallellisatie en doorvoer. Dit is de granulaire eenheid die door Kinesis Data Streams wordt geleid voor gevolgtrekking. Voor het maken van een framebatch zijn een video-ID, het startnummer van de framebatch, het eindnummer van de framebatch, het invoerpad van de framebatch, het pad met de resultaten van de framebatch en de status van de framebatch vereist. - /functie – Deze interactie-API wordt gebruikt voor het indienen van bestanden om een verwerkingstaak te starten. Deze API heeft een andere functie dan andere object-API's, omdat dit het directe pad is voor interactie met de videoverwerkingsbackend Step Functions-workflowcoördinatie en het Amazon EKS-cluster. Deze API vereist een gebruikers-ID, project-ID, pijplijn-ID, pijplijnparameterset-ID, taakparameters en taakstatus. In de taakparameters wordt een invoerbestandspad gespecificeerd, dit is de locatie in Amazon S3 waar het .zip-pakket met te verwerken video's zich bevindt. Het uploaden van bestanden wordt afgehandeld met de
upload_handler
methode, die een vooraf ondertekende S3-URL genereert zodat de gebruiker een bestand kan plaatsen. Een WORKFLOW_STATEMACHINE_ARN is een omgevingsvariabele die wordt doorgegeven aan decreate_job
API om te specificeren waar een video .zip-pakket met een invoerbestandspad wordt verzonden om een taak te starten.
De volgende tabel geeft een overzicht van de functies van de API.
Methodetype: | Functie | Omschrijving |
GET | list_jobs |
Selecteert alle taken uit de database en wordt weergegeven. |
POST | create_ job |
Voegt een nieuw taakrecord in met gebruikers-ID, project-ID, pijplijn-ID, pijplijnparameterset-ID, baanresultatenpad, taakparameters en taakstatus. |
GET | get_ job |
Selecteert taakkenmerken op basis van taak-ID uit de database en wordt weergegeven. |
GET | upload_handler |
Genereert een vooraf ondertekende S3-URL als locatie voor het uploaden van het .zip-bestand. Vereist een S3-bucketnaam en verwacht een toepassings-/zip-bestandstype. |
Python SDK-laag
Voortbouwend op de API's heeft het team een Python SDK-clientbibliotheek gemaakt als wrapper om het voor ontwikkelaars gemakkelijker te maken om toegang te krijgen tot de API-methoden. Ze gebruikten de open source Poëzie, die Python-packaging en afhankelijkheidsbeheer afhandelt. Ze creëerden een client.py
bestand dat functies bevat die elk van de API's verpakken met behulp van de Python requests
bibliotheek om API-verzoeken en uitzonderingen af te handelen.
Voor ontwikkelaars om de Intel 3DAT SDK te starten, moeten ze het Poetry-pakket installeren en bouwen. Vervolgens kunnen ze een eenvoudige Python-import van: intel_3dat_sdk
naar elke Python-code.
Om de client te gebruiken, kunt u een instantie van de client maken, waarbij u het API-eindpunt specificeert:
U kunt dan de client gebruiken om de afzonderlijke methoden aan te roepen, zoals de create_pipeline
methode (zie de volgende code), waarbij de juiste argumenten worden gebruikt, zoals pijplijnnaam en pijplijnbeschrijving.
CLI-laag
Evenzo bouwde het team op de API's om een opdrachtregelinterface te creëren voor gebruikers die toegang willen tot de API-methoden met een eenvoudige interface zonder Python-code te hoeven schrijven. Ze gebruikten het open-source Python-pakket Klik (Command Line Interface Creatie Kit). De voordelen van dit raamwerk zijn het willekeurig nesten van commando's, het automatisch genereren van helppagina's en ondersteuning van het lui laden van subcommando's tijdens runtime. In hetzelfde client.py
bestand zoals in de SDK, werd elke SDK-clientmethode ingepakt met Click en werden de vereiste methodeargumenten geconverteerd naar opdrachtregelvlaggen. De vlaginvoer wordt vervolgens gebruikt bij het aanroepen van de SDK-opdracht.
Om de CLI te starten, kunt u de CLI configure
opdracht. U wordt gevraagd om de eindpunt-URL:
Nu kunt u de CLI gebruiken om verschillende opdrachten aan te roepen die verband houden met de API-methoden, bijvoorbeeld:
Database
Als database gebruikt deze applicatie Aurora Serverless om metadata op te slaan die zijn gekoppeld aan elk van de API's met MYSQL als de database-engine. Het kiezen van de Aurora Serverless-databaseservice houdt zich aan het ontwerpprincipe om infrastructurele overhead te minimaliseren door waar mogelijk serverloze AWS-services te gebruiken. Het volgende diagram illustreert deze architectuur.
De serverloze engine-modus voldoet aan het intermitterende gebruikspatroon omdat deze applicatie opschaalt naar nieuwe klanten en workloads nog onzeker zijn. Bij het starten van een database-eindpunt is geen specifieke DB-instantiegrootte vereist, alleen een minimum- en maximumbereik voor clustercapaciteit. Aurora Serverless zorgt voor de juiste voorziening van een routervloot en verdeelt de werklast over de resources. Aurora Serverless voert automatisch back-upretentie uit voor minimaal 1 dag tot 35 dagen. Het team heeft geoptimaliseerd voor veiligheid door de standaard in te stellen op de maximale waarde van 35.
Daarnaast gebruikte het team de Data API om de toegang tot het Aurora Serverless-cluster af te handelen, waarvoor geen permanente verbinding vereist is, maar in plaats daarvan een veilig HTTP-eindpunt en integratie met AWS SDK's biedt. Deze functie gebruikt AWS-geheimenmanager om de databasereferenties op te slaan, zodat het niet nodig is expliciet referenties door te geven. CREATE TABLE-scripts zijn geschreven in .sql-bestanden voor elk van de negen tabellen die overeenkomen met de negen API's. Omdat deze database alle metadata en status van objecten in het systeem bevatte, werden de API-methoden uitgevoerd met de juiste SQL-commando's (bijvoorbeeld select * from Job
voor de list_jobs
API) en doorgegeven aan de execute_statement
methode van de Amazon RDS-client in de Data API.
Workflow-orkestratie
De functionele ruggengraat van de applicatie werd afgehandeld met behulp van Step Functions om de workflow te coördineren, zoals weergegeven in het volgende diagram.
De statusmachine bestond uit een reeks van vier Lambda-functies, die begint wanneer een taak wordt ingediend met behulp van de create_job
methode uit de job
API. De gebruikers-ID, project-ID, pijplijn-ID, pijplijnparameterset-ID, taakresultatenpad, taakparameters en taakstatus zijn vereist voor het maken van taken. U kunt eerst een .zip-pakket met videobestanden uploaden met de upload_handler
methode van de taak-API om een vooraf ondertekende S3-URL te genereren. Tijdens de opdrachtverzending wordt het invoerbestandspad doorgegeven via de opdrachtparameters om de locatie van het bestand te specificeren. Dit start de uitvoering van de workflow-statusmachine, waarbij vier hoofdstappen worden geactiveerd:
- Initialisatie Lambda-functie
- Indiener Lambda-functie
- Voltooiing Check Lambda-functie
- Collector Lambda-functie
Initialisatie Lambda-functie
De belangrijkste functie van de Initializer is om het .zip-pakket op te splitsen in afzonderlijke videobestanden en deze voor te bereiden voor de indiener. Eerst wordt het .zip-bestand gedownload en vervolgens wordt elk afzonderlijk bestand, inclusief videobestanden, uitgepakt en uitgepakt. De video's, bij voorkeur in .mp4-formaat, worden weer geüpload naar een S3-bucket. De ... gebruiken create_video
methode in de video
API wordt een video-object gemaakt met het videopad als invoer. Dit voegt gegevens over elke video in de Aurora-database in. Alle andere bestandstypen, zoals JSON-bestanden, worden beschouwd als metadata en worden op dezelfde manier geüpload, maar er wordt geen video-object gemaakt. Een lijst met de namen van bestanden en uitgepakte videobestanden wordt doorgegeven aan de volgende stap.
Indiener Lambda-functie
De functie Submitter neemt de videobestanden die zijn uitgepakt door de Initializer en maakt mini-batches van videoframes als afbeeldingen. De meeste huidige computervisiemodellen die in productie zijn, zijn getraind op afbeeldingen, dus zelfs wanneer video wordt verwerkt, worden ze eerst gescheiden in beeldframes voordat het model wordt afgeleid. Deze huidige oplossing die gebruik maakt van een state-of-the-art pose-inschattingsmodel is niet anders: de framebatches van de indiener worden doorgegeven aan Kinesis Data Streams om de stap voor het genereren van inferenties te starten.
Eerst wordt het videobestand gedownload door de Lambda-functie. De framesnelheid en het aantal frames wordt berekend met behulp van de FileVideoStream
module van de imutils.video
bibliotheek verwerken. De frames worden geëxtraheerd en gegroepeerd volgens een gespecificeerde mini-batchgrootte, wat een van de belangrijkste afstembare parameters van deze pijplijn is. Met behulp van de Python augurkbibliotheek worden de gegevens geserialiseerd en geüpload naar Amazon S3. Vervolgens wordt een framebatch-object gemaakt en wordt de metadata-invoer gemaakt in de Aurora-database. Deze Lambda-functie is gebouwd met behulp van een Dockerfile met afhankelijkheden op: opencv-python
, numpy
en imutils
bibliotheken.
Voltooiing Check Lambda-functie
De functie Voltooiingscontrole blijft de Aurora-database doorzoeken om voor elke video in het .zip-pakket voor deze huidige taak te zien hoeveel framebatches de status VOLTOOID hebben. Wanneer alle framebatches voor alle video's zijn voltooid, is dit controleproces voltooid.
Collector Lambda-functie
De Collector-functie neemt de uitvoer van de gevolgtrekkingen die op elk frame zijn uitgevoerd tijdens de Consumer-fase en combineert deze over een framebatch en over een video. De gecombineerde samengevoegde gegevens worden vervolgens geüpload naar een S3-bucket. De functie roept vervolgens de Cortex-nabewerkings-API aan voor een bepaalde ML-pijplijn om eventuele nabewerkingsberekeningen uit te voeren, en voegt de geaggregeerde resultaten per video toe aan de uitvoerbucket. Veel van deze statistieken worden berekend over frames, zoals snelheid, versnelling en gewrichtshoek, dus deze berekening moet worden uitgevoerd op de geaggregeerde gegevens. De belangrijkste outputs zijn body key points data (samengevoegd in CSV-formaat), BMA-berekeningen (zoals versnelling) en visuele overlay van key points toegevoegd aan elk frame in een afbeeldingsbestand.
Schaalbare pose schatting inferentie generatie
De verwerkingsengine die het schalen van ML-inferentie mogelijk maakt, vindt in deze fase plaats. Het omvat drie hoofdonderdelen, elk met hun eigen gelijktijdigheidshefbomen die kunnen worden afgestemd op latency-compromissen (zie het volgende diagram).
Deze architectuur maakt experimenten mogelijk bij het testen van latentiewinsten, evenals flexibiliteit voor de toekomst wanneer workloads kunnen veranderen met verschillende combinaties van eindgebruikerssegmenten die toegang hebben tot de applicatie.
Kinesis-gegevensstromen
Het team koos voor Kinesis Data Streams omdat het doorgaans wordt gebruikt om streaminggegevens te verwerken, en in dit geval een goede keuze is omdat het framebatches op een vergelijkbare manier kan verwerken om schaalbaarheid en parallellisatie te bieden. In de functie Submitter Lambda wordt de Kinesis Boto3-client gebruikt, met de put_record
methode die de metagegevens doorgeeft die zijn gekoppeld aan een enkele framebatch, zoals de framebatch-ID, framebatch-startframe, framebatch-eindframe, beeldvorm, framesnelheid en video-ID.
We hebben verschillende taakwachtrij- en Kinesis-gegevensstroomconfiguraties gedefinieerd om doorvoerniveaus in te stellen die aansluiten bij het prioriteitsniveau van verschillende gebruikersgroepen. Toegang tot verschillende niveaus van verwerkingskracht wordt gekoppeld door een projectwachtrij ARN door te geven bij het maken van een nieuw project met behulp van de project
API. Elke gebruikersgroep wordt dan tijdens het aanmaken van een gebruikersgroep aan een bepaald project gekoppeld. Er zijn drie standaard streamconfiguraties gedefinieerd in de AWS serverloos toepassingsmodel (AWS SAM) infrastructuursjabloon:
- Standaard -
JobStreamShardCount
- Prioriteit -
PriorityJobStreamShardCount
- Hoge prioriteit -
HighPriorityJobStreamShardCount
Het team gebruikte een paar verschillende hefbomen om de verwerkingskracht van elke stream te differentiëren of de latentie van het systeem af te stemmen, zoals samengevat in de volgende tabel.
Hefboom | Omschrijving | Standaardwaarde |
scherf | Een shard is eigen aan Kinesis Data Streams; het is de basiseenheid van doorvoer voor opname. De standaardwaarde is 1 MB/sec, wat overeenkomt met 1,000 gegevensrecords per seconde. | 2 |
KinesisBatchSize |
Het maximum aantal records dat Kinesis Data Streams in één batch ophaalt voordat de Lambda-functie voor consumenten wordt aangeroepen. | 1 |
KinesisParallelizationFactor |
Het aantal batches dat gelijktijdig van elke shard moet worden verwerkt. | 1 |
Verbeterde fan-out | Gegevensconsumenten die verbeterde fan-out hebben geactiveerd, hebben een speciale opname-doorvoer per consument (zoals de standaard 1 MB/sec) in plaats van de doorvoer over consumenten te delen. | af |
Consumenten Lambda-functie
Vanuit het perspectief van Kinesis Data Streams is een dataconsument een AWS-service die data ophaalt uit een datastream-shard wanneer data in een stream wordt gegenereerd. Deze applicatie maakt gebruik van een Consumer Lambda-functie, die wordt aangeroepen wanneer berichten worden doorgegeven vanuit de datastroomwachtrijen. Elke Consumer-functie verwerkt één framebatch door de volgende stappen uit te voeren. Eerst wordt de Cortex-processor-API synchroon aangeroepen, het eindpunt dat als host fungeert voor de modelinferentiepijplijn (zie de volgende sectie over Amazon EKS met Cortex voor meer details). De resultaten worden opgeslagen in Amazon S3 en de database wordt bijgewerkt door de status van de verwerkte framebatch te wijzigen in Complete
. Foutafhandeling is ingebouwd om de Cortex API-aanroep te beheren met een lus voor opnieuw proberen om 504 fouten van het Cortex-cluster af te handelen, waarbij het aantal nieuwe pogingen is ingesteld op 5.
Amazon EKS met Cortex voor ML-inferentie
Het team gebruikte Amazon EKS, een beheerde Kubernetes-service in AWS, als de rekenengine voor ML-inferentie. Er is een ontwerpkeuze gemaakt om Amazon EKS te gebruiken om ML-eindpunten te hosten, wat de flexibiliteit biedt om upstream Kubernetes te draaien met de optie van clusters die beide volledig worden beheerd in AWS via AWS Fargate, of on-premises hardware via Amazon EKS overal. Dit was een essentieel onderdeel van de functionaliteit die Intel OTG wenste, die de mogelijkheid bood om deze applicatie aan te sluiten op bijvoorbeeld gespecialiseerde on-premises hardware.
De drie ML-modellen die de bouwstenen waren voor het construeren van de inferentiepijplijnen waren een aangepast Yolo-model (voor objectdetectie), een aangepast HRNet-model (voor 2D-pose-schatting) en een 3DMPPE-model (voor 3D-pose-schatting) (zie de vorige ML-sectie voor meer details). Ze gebruikten de open source Schors bibliotheek om de implementatie en het beheer van ML-inferentiepijplijneindpunten af te handelen, en de lancering en implementatie van de Amazon EKS-clusters. Elk van deze modellen was verpakt in Docker-containers - modelbestanden werden opgeslagen in Amazon S3 en modelafbeeldingen werden opgeslagen in Amazon Elastic Container-register (Amazon ECR)—en ingezet als Cortex Realtime API's. Versies van de modelcontainers die op CPU en GPU draaien, zijn gemaakt om flexibiliteit te bieden voor het type computerhardware. Als er in de toekomst extra modellen of modelpijplijnen moeten worden toegevoegd, kunnen ze eenvoudig extra Cortex Realtime API's maken.
Vervolgens construeerden ze inferentiepijplijnen door de Cortex Realtime-model-API's samen te stellen in Cortex Realtime-pijplijn-API's. Een enkele Realtime-pijplijn-API bestond uit het aanroepen van een reeks Realtime-model-API's. De Consumer Lambda-functies behandeld als pipeline
API als een zwarte doos, waarbij een enkele API-aanroep wordt gebruikt om de uiteindelijke inferentie-uitvoer voor een afbeelding op te halen. Er zijn twee leidingen gemaakt: een 2D-leiding en een 3D-leiding.
De 2D-pijplijn combineert een voorbewerkingsstap voor het decoderen, objectdetectie met behulp van een aangepast Yolo-model om de atleet te lokaliseren en omsluitende kaders te produceren, en tot slot een aangepast HRNet-model voor het maken van 2D-sleutelpunten voor pose-inschatting.
De 3D-pijplijn combineert een voorbewerkingsstap voor het decoderen, objectdetectie met behulp van een aangepast Yolo-model om de atleet te lokaliseren en omsluitende kaders te produceren, en tot slot een 3DMPPE-model voor het maken van 3D-sleutelpunten voor pose-inschatting.
Na het genereren van gevolgtrekkingen op een batch frames, bevat elke pijplijn ook een afzonderlijk naverwerkings Realtime Cortex-eindpunt dat drie hoofduitvoer genereert:
- Geaggregeerde hoofdpuntengegevens in één CSV-bestand
- BMA-berekeningen (zoals versnelling)
- Visuele overlay van belangrijke punten toegevoegd aan elk frame in een afbeeldingsbestand
De Collector Lambda-functie verzendt de juiste metadata die zijn gekoppeld aan een bepaalde video, zoals de frame-ID's en S3-locaties van de inferentie-outputs van de pose-inferentie, naar het eindpunt om deze outputs voor nabewerking te genereren.
Cortex is ontworpen om te worden geïntegreerd met Amazon EKS en vereist alleen een clusterconfiguratiebestand en een eenvoudige opdracht om een Kubernetes-cluster te starten:
Een andere hefboom voor prestatieafstemming was de instantieconfiguratie voor de rekenclusters. Er zijn drie niveaus gemaakt met verschillende mixen van M5- en G4dn-instanties, gecodeerd als .yaml-bestanden met specificaties zoals clusternaam, regio en instantieconfiguratie en mix. M5-instanties zijn gebaseerd op een goedkopere CPU en G4dn zijn gebaseerd op een duurdere GPU om een aantal compromissen tussen kosten en prestaties te bieden.
Operationele bewaking
Om operationele logstandaarden te behouden, bevatten alle Lambda-functies code om logs op te nemen en op te nemen via Amazon Kinesis-gegevens Firehose. Elke framebatch die wordt verwerkt vanuit de Lambda-functie van de indiener wordt bijvoorbeeld vastgelegd met het tijdstempel, de naam van de actie en de reactie van de Lambda-functie JSON en opgeslagen in Amazon S3. Het volgende diagram illustreert deze stap in de architectuur.
Deployment
De implementatie wordt afgehandeld met behulp van AWS SAM, een open-source framework voor het bouwen van serverloze applicaties in AWS. AWS SAM maakt het mogelijk om infrastructuurontwerp, inclusief functies, API's, databases en gebeurtenisbrontoewijzingen te coderen en eenvoudig te implementeren in nieuwe AWS-omgevingen. Tijdens de implementatie wordt de AWS SAM-syntaxis vertaald in: AWS CloudFormatie om de infrastructuurvoorziening af te handelen.
A template.yaml
bestand bevat de infrastructuurspecificaties samen met afstembare parameters, zoals Kinesis Data Streams-latentiehendels die in de voorgaande secties zijn beschreven. EEN samconfig.toml
bestand bevat implementatieparameters zoals stacknaam, S3-bucketnaam waar toepassingsbestanden zoals Lambda-functiecode worden opgeslagen, en resourcetags voor het bijhouden van kosten. Een deploy.sh-shellscript met de eenvoudige commando's is alles wat nodig is om de volledige sjabloon te bouwen en te implementeren:
Werkstroom gebruiker
Samenvattend, nadat de infrastructuur is geïmplementeerd, kunt u deze workflow volgen om aan de slag te gaan:
- Maak een Intel 3DAT-client met behulp van de clientbibliotheek.
- Gebruik de API om een nieuwe instantie van een pijplijn te maken die overeenkomt met het type verwerking dat vereist is, zoals een voor 3D-pose-schatting.
- Maak een nieuw exemplaar van een project, waarbij u de cluster ARN en Kinesis-wachtrij ARN doorgeeft.
- Maak een nieuw exemplaar van een pijplijnparameterset.
- Maak een nieuw exemplaar van pijplijnparameters die zijn toegewezen aan de pijplijnparameterset.
- Maak een nieuwe gebruikersgroep die is gekoppeld aan een project-ID en een pijplijnparameterset-ID.
- Maak een nieuwe gebruiker die is gekoppeld aan de gebruikersgroep.
- Upload een .zip-bestand met video's naar Amazon S3 met behulp van een vooraf ondertekende S3-URL die is gegenereerd door de uploadfunctie in de taak-API.
- Dien een
create_job
API-aanroep, met taakparameters die de locatie van de videobestanden specificeren. Hiermee wordt de verwerkingstaak gestart.
Conclusie
De applicatie is nu live en klaar om getest te worden met zowel atleten als coaches. Intel OTG is verheugd om innovatieve pose-inschattingstechnologie met behulp van computervisie toegankelijk te maken voor een verscheidenheid aan gebruikers, van ontwikkelaars tot atleten tot softwareleveranciers.
Het AWS-team is gepassioneerd om klanten zoals Intel OTG te helpen hun ML-reis te versnellen, van de fase van idee en ontdekking met ML Solutions Lab tot de fase van verharding en implementatie met AWS ML ProServe. We zullen deze zomer de Olympische Spelen van Tokyo in 2021 allemaal nauwlettend in de gaten houden om ons een voorstelling te maken van alle vooruitgang die ML kan behalen in de sport.
Begin vandaag! Verken uw gebruiksscenario met de services die in dit bericht en vele anderen op de AWS-beheerconsole.
Over de auteurs
Han man is een Senior Manager- Machine Learning & AI bij AWS in San Diego, CA. Hij is gepromoveerd in engineering aan de Northwestern University en heeft meerdere jaren ervaring als managementconsultant met het adviseren van klanten op het gebied van productie, financiële dienstverlening en energie. Tegenwoordig werkt hij gepassioneerd samen met klanten uit verschillende industrieën om machine learning en AI-oplossingen op AWS te ontwikkelen en te implementeren. In zijn vrije tijd volgt hij graag de NBA en speelt hij graag basketbal.
Iman Kamyabi is een ML Engineer bij AWS Professional Services. Hij heeft met een breed scala aan AWS-klanten gewerkt om best practices te ondersteunen bij het opzetten van herhaalbare en betrouwbare ML-pijplijnen.
Jonathan Lee is de directeur van Sports Performance Technology, Olympic Technology Group bij Intel. Hij studeerde de toepassing van machine learning op gezondheid als bachelor aan de UCLA en tijdens zijn afstudeerwerk aan de Universiteit van Oxford. Zijn carrière was gericht op de ontwikkeling van algoritmen en sensoren voor gezondheid en menselijke prestaties. Hij leidt nu het 3D Athlete Tracking-project bij Intel.
Nelson Leung is de platformarchitect in de Sports Performance CoE bij Intel, waar hij end-to-end-architectuur definieert voor geavanceerde producten die de prestaties van atleten verbeteren. Hij leidt ook de implementatie, implementatie en productisering van deze machine learning-oplossingen op schaal voor verschillende Intel-partners.
Troje Squillaci is een DecSecOps-ingenieur bij Intel, waar hij professionele softwareoplossingen aan klanten levert via best practices van DevOps. Hij integreert graag AI-oplossingen in schaalbare platforms in verschillende domeinen.
Paul min is een Associate Solutions Architect Intern bij Amazon Web Services (AWS), waar hij klanten in verschillende verticale sectoren helpt bij het bevorderen van hun missie en het versnellen van hun cloudadoptie. Voorheen bij Intel werkte hij als Software Engineering Intern om de 3D Athlete Tracking Cloud SDK te helpen ontwikkelen. Naast zijn werk speelt Paul graag golf en is hij te horen zingen.
- Coinsmart. Europa's beste Bitcoin- en crypto-uitwisseling.
- Platoblockchain. Web3 Metaverse Intelligentie. Kennis versterkt. GRATIS TOEGANG.
- CryptoHawk. Altcoin-radar. Gratis proefversie.
- Bron: https://aws.amazon.com/blogs/machine-learning/the-intel3d-athlete-tracking-3dat-scalable-architecture-deploys-pose-estimation-models-using-amazon-kinesis-data-streams- en-amazon-eks/
- "
- &
- 000
- 100
- 2021
- 3d
- Over
- versnellen
- toegang
- beschikbaar
- Volgens
- Account
- over
- Actie
- acties
- toevoeging
- Extra
- beheerder
- Adoptie
- AI
- algoritme
- Alles
- Amazone
- Amazon Web Services
- te midden van
- api
- APIs
- Aanvraag
- toepassingen
- passend
- architectuur
- argumenten
- toegewezen
- Associëren
- atleten
- attributen
- Automatisch
- AWS
- backup
- Basketbal
- vaardigheden
- betekent
- BEST
- 'best practices'
- Zwart
- Blog
- lichaam
- Box camera's
- bouw
- Gebouw
- Bellen
- Inhoud
- verzorging
- Carrière
- gevallen
- centraal
- kampioen
- verandering
- keuzes
- klanten
- Cloud
- code
- Collectie
- verzamelaar
- gecombineerde
- bestanddeel
- Berekenen
- computer
- Configuratie
- versterken
- consultant
- consument
- Consumenten
- Containers
- containers
- bevat
- blijft
- onder controle te houden
- coördineren
- Kern
- Overeenkomend
- en je merk te creëren
- aangemaakt
- creëert
- Wij creëren
- het aanmaken
- Geloofsbrieven
- kritisch
- cruciaal
- Actueel
- Op dit moment
- gewoonte
- klant
- Klanten
- op het randje
- gegevens
- Database
- databanken
- dag
- toegewijd aan
- diepere
- levert
- implementeren
- ingezet
- inzet
- ontplooit
- Design
- ontworpen
- detail
- gedetailleerd
- gegevens
- Opsporing
- ontwikkelen
- Ontwikkelaar
- ontwikkelaars
- Ontwikkeling
- anders
- onderscheiden
- directe
- Director
- ontdekking
- displays
- havenarbeider
- Nee
- domeinen
- beneden
- gedurende
- gemakkelijk
- Endpoint
- energie-niveau
- Motor
- ingenieur
- Engineering
- Milieu
- Event
- voorbeeld
- opgewonden
- bestaand
- verwacht
- ervaring
- Verken
- Kenmerk
- Tot slot
- financieel
- financiële diensten
- Voornaam*
- geschikt
- VLOOT
- Flexibiliteit
- flexibel
- gericht
- volgen
- volgend
- volgt
- formaat
- toekomstgericht
- FRAME
- Achtergrond
- functie
- functioneel
- functionaliteit
- functies
- toekomst
- voortbrengen
- het genereren van
- generatie
- Vrijgevigheid
- doel
- goed
- GPU
- afstuderen
- Groep
- Groep
- handvat
- Behandeling
- Hardware
- Gezondheid
- gehoord
- hulp
- het helpen van
- helpt
- hier
- hoger
- Hoe
- HTTPS
- menselijk
- Identiteit
- beeld
- uitvoeren
- uitvoering
- belangrijk
- omvatten
- omvat
- Inclusief
- individueel
- industrieën
- -industrie
- Infrastructuur
- innovatieve
- invoer
- Inzetstukken
- installeren
- geïntegreerde
- integratie
- Intel
- Intelligentie
- wisselwerking
- Interface
- IT
- Jobomschrijving:
- Vacatures
- sleutel
- laboratorium
- lancering
- lancering
- Leads
- leren
- Niveau
- Bibliotheek
- Lijn
- Lijst
- het laden
- plaats
- locaties
- machine
- machine learning
- gemaakt
- onderhouden
- groot
- MERKEN
- man
- beheer
- beheerd
- management
- productie
- kaart
- in kaart brengen
- vermeld
- methoden
- Metriek
- minimum
- Missie
- ML
- Mobile
- Mobiele applicaties
- model
- modellen
- modulaire
- meer
- meest
- meervoudig
- namen
- NBA
- noodzakelijk
- behoeften
- aantal
- Olympische Spelen
- opent
- besturen
- geoptimaliseerde
- Keuze
- bestellen
- Overige
- het te bezitten.
- Oxford
- pakket
- deel
- bijzonder
- vooral
- partners
- Voorbijgaand
- hartstochtelijk
- Patronen
- percentage
- prestatie
- uitvoerend
- perspectief
- stuk
- platform
- platforms
- spelen
- Poëzie
- punten
- mogelijk
- energie
- krachtige
- Voorbereiden
- vorig
- primair
- principe
- prioriteit
- processen
- verwerking
- Gegevensverwerker
- produceren
- productie
- Producten
- professioneel
- project
- zorgen voor
- biedt
- doel
- reeks
- Rauw
- realtime
- herkennen
- record
- archief
- met betrekking tot
- betrouwbaar
- verzoeken
- vereisen
- nodig
- Voorwaarden
- vereist
- hulpbron
- Resources
- antwoord
- Resultaten
- lopen
- lopend
- Veiligheid
- heilige
- Schaalbaarheid
- schaalbare
- Scale
- scaling
- sdk
- beveiligen
- segmenten
- Serverless
- service
- Diensten
- reeks
- het instellen van
- Vorm
- delen
- Shell
- getoond
- gelijk
- evenzo
- Eenvoudig
- Maat
- So
- Software
- software als een service
- software engineering
- oplossing
- Oplossingen
- sommige
- Iemand
- gespecialiseerde
- specificaties
- snelheid
- Sport
- stack
- Stadium
- standaard
- normen
- begin
- gestart
- starts
- Land
- state-of-the-art
- Status
- mediaopslag
- shop
- stream
- streaming
- ingediend
- Hierop volgend
- zomer
- ondersteuning
- steunen
- system
- het nemen
- team
- Technologie
- Testen
- daarom
- Door
- BINDEN
- niet de tijd of
- vandaag
- samen
- tokyo
- spoor
- Tracking
- types
- typisch
- ucla
- universiteit-
- Universiteit van Oxford
- openen
- bijwerken
- .
- gebruikers
- Gebruik makend
- waarde
- variëteit
- divers
- verticals
- Video
- Video's
- visie
- web
- webservices
- WIE
- zonder
- Mijn werk
- werkte
- werkzaam
- jaar