Questo post sul blog è stato scritto da Jonathan Lee, Nelson Leung, Paul Min e Troy Squillaci di Intel.
In Parte 1 di questo post, abbiamo discusso di come Intel®3DAT ha collaborato con Servizi professionali di apprendimento automatico di AWS (MLPS) per creare un'applicazione SaaS AI scalabile. 3DAT utilizza la visione artificiale e l'intelligenza artificiale per riconoscere, tracciare e analizzare oltre 1,000 punti dati biomeccanici da video standard. Consente ai clienti di creare prodotti ricchi e potenti basati sulla biomeccanica, come applicazioni Web e mobili con dati dettagliati sulle prestazioni e visualizzazioni tridimensionali.
Nella parte 2 di questo post, ci immergiamo più a fondo in ogni fase dell'architettura. Esploriamo i servizi AWS utilizzati per soddisfare i requisiti di progettazione 3DAT, inclusi Flussi di dati di Amazon Kinesis ed Servizio Amazon Elastic Kubernetes (Amazon EKS), al fine di distribuire in modo scalabile i modelli di stima della posa necessari per questa applicazione SaaS (Software as a Service).
Panoramica sull'architettura
L'obiettivo principale del team MLPS era quello di produrre le pipeline del modello di stima della posa 2D e 3D e creare un'applicazione funzionale e scalabile. Il diagramma seguente illustra l'architettura della soluzione.
L'architettura completa è suddivisa in cinque componenti principali:
- Livelli dell'interfaccia dell'applicazione utente
- Banca Dati
- Orchestrazione del flusso di lavoro
- Generazione di inferenza per la stima della posa scalabile
- Monitoraggio operativo
Entriamo nel dettaglio di ogni componente, delle loro interazioni e della logica alla base delle scelte progettuali.
Livelli dell'interfaccia dell'applicazione utente
Il diagramma seguente mostra i livelli dell'interfaccia dell'applicazione che forniscono l'accesso utente e il controllo dell'applicazione e delle relative risorse.
Questi punti di accesso supportano diversi casi d'uso in base alle diverse personalità dei clienti. Ad esempio, un utente dell'applicazione può inviare un lavoro tramite l'interfaccia a riga di comando, mentre uno sviluppatore può creare un'applicazione utilizzando l'SDK Python e incorporare l'intelligenza per la stima delle pose nelle proprie applicazioni. La CLI e l'SDK sono costruiti come componenti modulari: entrambi i livelli sono wrapper del livello API, che viene creato utilizzando Gateway API Amazon per risolvere le chiamate API e AWS Lambda associato funzioni, che si occupano della logica di back-end associata a ciascuna chiamata API. Questi livelli erano un componente cruciale per il team Intel OTG perché aprono un'ampia base di clienti che possono utilizzare efficacemente questa applicazione SaaS.
livello API
La soluzione ha un core set di nove API, che corrispondono ai tipi di oggetti che operano su questa piattaforma. Ogni API ha un file Python che definisce le azioni API che possono essere eseguite. Alla creazione di nuovi oggetti viene assegnato automaticamente un ID oggetto in sequenza. Gli attributi di questi oggetti sono memorizzati e tracciati nel file Amazon Aurora senza server database utilizzando questo ID. Pertanto, le azioni API si collegano alle funzioni definite in un file centrale che contiene la logica di back-end per interrogare il database Aurora. Questa logica di back-end utilizza Boto3 Cliente Amazon RDS DataService per accedere al cluster di database.
L'unica eccezione è il /job
API, che ha a create_job
metodo che gestisce l'invio di video per la creazione di un nuovo processo di elaborazione. Questo metodo avvia il Funzioni AWS Step logica del flusso di lavoro per l'esecuzione del lavoro. Passando in a job_id
, questo metodo utilizza Boto3 Cliente di Step Functions chiamare il start_execution
metodo per un determinato stateMachineARN
(Nome risorsa Amazon).
Le otto API oggetto hanno i metodi e un modello di accesso simile come riepilogato nella tabella seguente.
Tipo di metodo | Nome della funzione | Descrizione |
GET | list_[object_name]s |
Seleziona tutti gli oggetti di questo tipo dal database e li visualizza. |
POST | create_[object] |
Inserisce un nuovo record oggetto con gli input richiesti nel database. |
GET | get_[object] |
Seleziona gli attributi dell'oggetto in base all'ID oggetto dal database e visualizza. |
PUT | update_[object] |
Aggiorna un record oggetto esistente con gli input richiesti. |
DELETE | delete_[object] |
Elimina un record oggetto esistente dal database in base all'ID oggetto. |
I dettagli delle nove API sono i seguenti:
- /utente – Un utente è l'identità di una persona autorizzata a inviare lavori a questa applicazione. La creazione di un utente richiede un nome utente, un'e-mail utente e un ID gruppo a cui appartiene l'utente.
- /gruppo di utenti – Un gruppo di utenti è una raccolta di utenti. Ogni gruppo di utenti è mappato a un progetto e a un set di parametri della pipeline. Per avere livelli diversi (in termini di risorse infrastrutturali e parametri della pipeline), gli utenti sono divisi in gruppi di utenti. Ogni utente può appartenere a un solo gruppo di utenti. La creazione di un gruppo utenti richiede un ID progetto, un ID set di parametri pipeline, il nome del gruppo utenti e la descrizione del gruppo utenti. Tieni presente che i gruppi di utenti sono diversi dai ruoli utente definiti nell'account AWS. Quest'ultimo viene utilizzato per fornire diversi livelli di accesso in base ai ruoli di accesso (ad esempio amministratore).
- /progetto – Un progetto viene utilizzato per raggruppare insieme diversi insiemi di risorse infrastrutturali. Un progetto è associato a un singolo
project_cluster_url
(Aurora cluster) per la registrazione di utenti, lavori e altri metadati, aproject_queue_arn
(Kinesis Data Streams ARN) e un ambiente di runtime di calcolo (attualmente controllato tramite Cortex) utilizzato per eseguire l'inferenza sui batch di frame o la postelaborazione sui video. Ogni gruppo di utenti è associato a un progetto e questo meccanismo è il modo in cui i diversi livelli vengono abilitati in termini di latenza e potenza di calcolo per diversi gruppi di utenti. La creazione di un progetto richiede un nome progetto, l'URL del cluster di progetto e l'ARN della coda del progetto. - /tubatura – Una pipeline è associata a una singola configurazione per una sequenza di container di elaborazione che eseguono l'elaborazione video nel cluster di generazione dell'inferenza Amazon EKS coordinato da Cortex (per ulteriori dettagli, vedere la sezione sulla generazione dell'inferenza dell'elaborazione video). Tipicamente, questo è costituito da tre contenitori: preelaborazione e decodifica, rilevamento di oggetti e stima della posa. Ad esempio, la fase di decodifica e rilevamento degli oggetti è la stessa per le pipeline 2D e 3D, ma lo scambio dell'ultimo container utilizzando HRNet o 3DMPPE determina il set di parametri per le pipeline di elaborazione 2D e 3D. È possibile creare nuove configurazioni per definire possibili pipeline che possono essere utilizzate per l'elaborazione e richiede come input un nuovo file Python nel repository Cortex che dettaglia la sequenza di chiamate agli endpoint del modello che definiscono quella pipeline (vedere la sezione sulla generazione di inferenze di elaborazione video ). L'endpoint della pipeline è l'endpoint Cortex chiamato per elaborare un singolo frame. La creazione di una pipeline richiede un nome della pipeline, una descrizione della pipeline e un endpoint della pipeline.
- /set_parametri_pipeline – Un set di parametri della pipeline è una raccolta JSON flessibile di più parametri (un runtime di configurazione della pipeline) per una pipeline particolare e viene aggiunto per fornire flessibilità per la personalizzazione futura quando sono necessari più runtime di configurazione della pipeline. I gruppi di utenti possono essere associati a un determinato set di parametri della pipeline e il suo scopo è avere diversi gruppi di parametri per gruppo di utenti e per pipeline. Questa è stata un'importante aggiunta lungimirante per Intel OTG per integrare la personalizzazione che supporta la portabilità quando diversi clienti, in particolare ISV, iniziano a utilizzare l'applicazione.
- / parametri_pipeline – Una singola raccolta di parametri della pipeline è un'istanza di un set di parametri della pipeline. Questo lo rende una mappatura 1:molti di un parametro della pipeline impostato su parametri della pipeline. Questa API richiede un ID pipeline da associare al set di parametri della pipeline che consente la creazione di una pipeline per un mapping 1:1 dei parametri della pipeline alla pipeline. Gli altri input richiesti da questa API sono un ID set di parametri della pipeline, il valore dei parametri della pipeline e il nome dei parametri della pipeline.
- /video – Un oggetto video viene utilizzato per definire i singoli video che compongono un pacchetto .zip inviato durante un lavoro. Questo file viene suddiviso in più video dopo l'invio. Un video è correlato al
job_id
per il lavoro in cui viene inviato il pacchetto .zip e Servizio di archiviazione semplice Amazon (Amazon S3) percorsi per la posizione dei video separati grezzi e i risultati della postelaborazione di ciascun video. L'oggetto video contiene anche una percentuale di avanzamento del video, che viene costantemente aggiornata durante l'elaborazione di singoli frame batch di quel video, nonché un flag di stato del video per completo o non completo. La creazione di un video richiede un ID lavoro, il percorso del video, il percorso dei risultati del video, la percentuale di avanzamento del video e lo stato del video. - /frame_batch - A
frame_batch
l'oggetto è un mini-lotto di fotogrammi creato campionando un singolo video. La separazione di un video in batch di fotogrammi di dimensioni normali fornisce una leva per ottimizzare la latenza e aumentare la parallelizzazione e il throughput. Questa è l'unità granulare che viene eseguita tramite Kinesis Data Streams per l'inferenza. La creazione di un frame batch richiede un ID video, il numero di inizio del frame batch, il numero di fine frame batch, il percorso di input del frame batch, il percorso dei risultati del frame batch e lo stato del frame batch. - /lavoro – Questa API di interazione viene utilizzata per l'invio di file per avviare un processo di elaborazione. Questa API ha una funzione diversa dalle altre API di oggetti perché è il percorso diretto per interagire con il coordinamento del flusso di lavoro di Step Functions del back-end di elaborazione video e il cluster Amazon EKS. Questa API richiede un ID utente, ID progetto, ID pipeline, ID set di parametri pipeline, parametri lavoro e stato lavoro. Nei parametri del lavoro viene specificato un percorso del file di input, che è la posizione in Amazon S3 in cui si trova il pacchetto .zip di video da elaborare. Il caricamento dei file viene gestito con il
upload_handler
metodo, che genera un URL S3 preimpostato per consentire all'utente di inserire un file. Un WORKFLOW_STATEMACHINE_ARN è una variabile di ambiente che viene passata acreate_job
API per specificare dove viene inviato un pacchetto .zip video con un percorso del file di input per avviare un processo.
La tabella seguente riassume le funzioni dell'API.
Tipo di metodo | Funzione | Descrizione |
GET | list_jobs |
Seleziona tutti i lavori dal database e li visualizza. |
POST | create_ job |
Inserisce un nuovo record di lavoro con ID utente, ID progetto, ID pipeline, ID set di parametri pipeline, percorso risultati lavoro, parametri lavoro e stato lavoro. |
GET | get_ job |
Seleziona gli attributi del lavoro in base all'ID lavoro dal database e visualizza. |
GET | upload_handler |
Genera un URL S3 preimpostato come posizione per il caricamento del file .zip. Richiede un nome di bucket S3 e prevede un tipo di file zip/applicazione. |
Livello SDK Python
Basandosi sulle API, il team ha creato una libreria client dell'SDK Python come wrapper per facilitare agli sviluppatori l'accesso ai metodi API. Hanno usato l'open source Poesia, che gestisce il pacchetto Python e la gestione delle dipendenze. Hanno creato un client.py
file che contiene funzioni che avvolgono ciascuna delle API usando Python requests
libreria per gestire le richieste e le eccezioni dell'API.
Affinché gli sviluppatori possano avviare Intel 3DAT SDK, devono installare e creare il pacchetto Poetry. Quindi, possono aggiungere una semplice importazione Python di intel_3dat_sdk
a qualsiasi codice Python.
Per utilizzare il client, puoi creare un'istanza del client, specificando l'endpoint API:
È quindi possibile utilizzare il client per chiamare i singoli metodi come il create_pipeline
metodo (vedere il codice seguente), prendendo gli argomenti appropriati come il nome della pipeline e la descrizione della pipeline.
livello CLI
Allo stesso modo, il team si è basato sulle API per creare un'interfaccia a riga di comando per gli utenti che desiderano accedere ai metodi API con un'interfaccia semplice senza dover scrivere codice Python. Hanno usato il pacchetto Python open source Clicchi (Kit di creazione dell'interfaccia della riga di comando). I vantaggi di questo framework sono l'annidamento arbitrario dei comandi, la generazione automatica della pagina della guida e il supporto del caricamento lento dei sottocomandi in fase di esecuzione. Nello stesso client.py
come nell'SDK, ogni metodo client SDK è stato racchiuso utilizzando Click e gli argomenti del metodo richiesti sono stati convertiti in flag della riga di comando. Gli input flag vengono quindi utilizzati quando si chiama il comando SDK.
Per avviare la CLI, puoi utilizzare il CLI configure
comando. Viene richiesto l'URL dell'endpoint:
Ora puoi utilizzare la CLI per chiamare diversi comandi relativi ai metodi API, ad esempio:
Banca Dati
Come database, questa applicazione utilizza Aurora Serverless per archiviare i metadati associati a ciascuna delle API con MYSQL come motore di database. La scelta del servizio di database Aurora Serverless aderisce al principio di progettazione per ridurre al minimo il sovraccarico infrastrutturale utilizzando i servizi AWS serverless quando possibile. Il diagramma seguente illustra questa architettura.
I modalità motore senza server soddisfa il modello di utilizzo intermittente perché questa applicazione è in grado di adattarsi a nuovi clienti e i carichi di lavoro sono ancora incerti. Quando si avvia un endpoint di database, non è richiesta una dimensione specifica dell'istanza database, ma solo un intervallo minimo e massimo per la capacità del cluster. Aurora Serverless gestisce il provisioning appropriato di una flotta di router e distribuisce il carico di lavoro tra le risorse. Aurora Serverless esegue automaticamente la conservazione del backup per un minimo di 1 giorno fino a 35 giorni. Il team ha ottimizzato la sicurezza impostando il valore predefinito sul valore massimo di 35.
Inoltre, la squadra ha utilizzato il API dati per gestire l'accesso al cluster Aurora Serverless, che non richiede una connessione persistente e fornisce invece un endpoint HTTP sicuro e l'integrazione con gli SDK AWS. Questa funzione utilizza AWS Secrets Manager per memorizzare le credenziali del database in modo che non sia necessario passare in modo esplicito le credenziali. Gli script CREATE TABLE sono stati scritti in file .sql per ciascuna delle nove tabelle che corrispondono alle nove API. Poiché questo database conteneva tutti i metadati e lo stato degli oggetti nel sistema, i metodi API sono stati eseguiti utilizzando i comandi SQL appropriati (ad esempio select * from Job
per l' list_jobs
API) e passato al execute_statement
metodo dal client Amazon RDS nell'API dei dati.
Orchestrazione del flusso di lavoro
La spina dorsale funzionale dell'applicazione è stata gestita utilizzando Step Functions per coordinare il flusso di lavoro, come mostrato nel diagramma seguente.
La macchina a stati consisteva in una sequenza di quattro funzioni Lambda, che si avviano quando un lavoro viene inviato utilizzando il create_job
metodo dal job
API. L'ID utente, l'ID progetto, l'ID pipeline, l'ID set di parametri pipeline, il percorso dei risultati del lavoro, i parametri del lavoro e lo stato del lavoro sono obbligatori per la creazione del lavoro. Puoi prima caricare un pacchetto .zip di file video usando il file upload_handler
metodo dall'API del lavoro per generare un URL S3 preimpostato. Durante l'invio del lavoro, il percorso del file di input viene passato tramite i parametri del lavoro, per specificare la posizione del file. Questo avvia l'esecuzione della macchina a stati del flusso di lavoro, attivando quattro passaggi principali:
- Inizializzatore funzione Lambda
- Funzione Lambda del mittente
- Completamento Verifica funzione Lambda
- Funzione Lambda del collettore
Inizializzatore funzione Lambda
La funzione principale dell'inizializzatore è separare il pacchetto .zip in singoli file video e prepararli per il mittente. Innanzitutto, viene scaricato il file .zip, quindi ogni singolo file, inclusi i file video, viene decompresso ed estratto. I video, preferibilmente in formato .mp4, vengono caricati nuovamente in un bucket S3. Usando il create_video
metodo in video
API, viene creato un oggetto video con il percorso video come input. In questo modo vengono inseriti i dati su ciascun video nel database Aurora. Tutti gli altri tipi di file, come i file JSON, sono considerati metadati e caricati in modo simile, ma non viene creato alcun oggetto video. Un elenco dei nomi dei file e dei file video estratti viene passato al passaggio successivo.
Funzione Lambda del mittente
La funzione Submitter prende i file video che sono stati estratti dall'inizializzatore e crea mini-batch di fotogrammi video come immagini. La maggior parte degli attuali modelli di visione artificiale in produzione sono stati addestrati sulle immagini, quindi anche quando il video viene elaborato, vengono prima separati in frame di immagine prima dell'inferenza del modello. Questa soluzione attuale che utilizza un modello di stima della posa all'avanguardia non è diversa: i batch di frame dal mittente vengono passati a Kinesis Data Streams per avviare la fase di generazione dell'inferenza.
Innanzitutto, il file video viene scaricato dalla funzione Lambda. La frequenza dei fotogrammi e il numero di fotogrammi viene calcolata utilizzando il FileVideoStream
modulo dal imutils.video
libreria di elaborazione. I frame vengono estratti e raggruppati in base a una dimensione mini-batch specificata, che è uno dei parametri sintonizzabili chiave di questa pipeline. Utilizzando la libreria Pickle Python, i dati vengono serializzati e caricati su Amazon S3. Successivamente, viene creato un oggetto frame batch e viene creata la voce di metadati nel database Aurora. Questa funzione Lambda è stata creata utilizzando un Dockerfile con dipendenze su opencv-python
, numpy
e imutils
librerie.
Completamento Verifica funzione Lambda
La funzione Verifica completamento continua a interrogare il database Aurora per vedere, per ogni video nel pacchetto .zip per questo lavoro corrente, quanti batch di fotogrammi sono nello stato COMPLETATO. Quando tutti i frame batch per tutti i video sono stati completati, il processo di verifica è completo.
Funzione Lambda del collettore
La funzione Collector prende gli output delle inferenze eseguite su ciascun fotogramma durante la fase Consumatore e li combina in un batch di fotogrammi e in un video. I dati uniti combinati vengono quindi caricati in un bucket S3. La funzione richiama quindi l'API di post-elaborazione Cortex per una particolare pipeline ML al fine di eseguire eventuali calcoli di post-elaborazione e aggiunge i risultati aggregati tramite video al bucket di output. Molte di queste metriche vengono calcolate su frame, come velocità, accelerazione e angolo del giunto, quindi questo calcolo deve essere eseguito sui dati aggregati. Gli output principali includono i dati sui punti chiave del corpo (aggregati in formato CSV), i calcoli BMA (come l'accelerazione) e la sovrapposizione visiva dei punti chiave aggiunti a ciascun fotogramma in un file immagine.
Generazione di inferenza per la stima della posa scalabile
Il motore di elaborazione che alimenta il ridimensionamento dell'inferenza ML avviene in questa fase. Comprende tre pezzi principali, ognuno con le proprie leve di concorrenza che possono essere regolate per i compromessi di latenza (vedere il diagramma seguente).
Questa architettura consente la sperimentazione per testare i guadagni di latenza, nonché la flessibilità per il futuro quando i carichi di lavoro potrebbero cambiare con diverse combinazioni di segmenti di utenti finali che accedono all'applicazione.
Flussi di dati Kinesis
Il team ha scelto Kinesis Data Streams perché in genere viene utilizzato per gestire i dati in streaming e in questo caso è adatto perché può gestire i frame batch in modo simile per fornire scalabilità e parallelizzazione. Nella funzione Submitter Lambda, viene utilizzato il client Kinesis Boto3, con il put_record
metodo che trasferisce i metadati associati a un singolo frame batch, come l'ID frame batch, il frame iniziale del frame batch, il frame finale del frame batch, la forma dell'immagine, la frequenza dei frame e l'ID video.
Abbiamo definito varie configurazioni di code di lavoro e flussi di dati Kinesis per impostare livelli di throughput che si collegano al livello di priorità dei diversi gruppi di utenti. L'accesso a diversi livelli di potenza di elaborazione è collegato passando un ARN della coda di progetto durante la creazione di un nuovo progetto utilizzando il project
API. Ogni gruppo di utenti viene quindi collegato a un particolare progetto durante la creazione del gruppo di utenti. Tre configurazioni di flusso predefinite sono definite in Modello di applicazione serverless AWS (AWS SAM) modello di infrastruttura:
- Standard -
JobStreamShardCount
- Priorità -
PriorityJobStreamShardCount
- Priorità alta -
HighPriorityJobStreamShardCount
Il team ha utilizzato alcune leve diverse per differenziare la potenza di elaborazione di ciascun flusso o ottimizzare la latenza del sistema, come riepilogato nella tabella seguente.
Leva | Descrizione | Valore di default |
Coccio | Uno shard è nativo di Kinesis Data Streams; è l'unità di base del throughput per l'importazione. Il valore predefinito è 1 MB/sec, che equivale a 1,000 record di dati al secondo. | 2 |
KinesisBatchSize |
Il numero massimo di record recuperati da Kinesis Data Streams in un singolo batch prima di richiamare la funzione Lambda consumer. | 1 |
KinesisParallelizationFactor |
Il numero di batch da elaborare contemporaneamente da ogni shard. | 1 |
Fan-out migliorato | I consumatori di dati che hanno attivato il fan-out avanzato hanno una velocità effettiva di importazione dedicata per consumatore (ad esempio 1 MB/sec predefinito) invece di condividere la velocità effettiva tra i consumatori. | sconto |
Funzione Lambda del consumatore
Dal punto di vista di Kinesis Data Streams, un consumatore di dati è un servizio AWS che recupera i dati da uno shard di un flusso di dati mentre i dati vengono generati in un flusso. Questa applicazione utilizza una funzione Consumer Lambda, che viene richiamata quando i messaggi vengono passati dalle code del flusso di dati. Ciascuna funzione Consumer elabora un batch di frame eseguendo i passaggi seguenti. Innanzitutto, viene effettuata una chiamata all'API del processore Cortex in modo sincrono, che è l'endpoint che ospita la pipeline di inferenza del modello (consulta la sezione successiva relativa ad Amazon EKS con Cortex per maggiori dettagli). I risultati vengono archiviati in Amazon S3 e viene effettuato un aggiornamento al database modificando lo stato del batch di frame elaborato in Complete
. La gestione degli errori è integrata per gestire la chiamata API Cortex con un ciclo di tentativi per gestire eventuali errori 504 dal cluster Cortex, con il numero di tentativi impostato su 5.
Amazon EKS con Cortex per l'inferenza ML
Il team ha utilizzato Amazon EKS, un servizio Kubernetes gestito in AWS, come motore di calcolo per l'inferenza ML. È stata fatta una scelta di progettazione per utilizzare Amazon EKS per ospitare endpoint ML, offrendo la flessibilità di eseguire Kubernetes a monte con l'opzione di cluster entrambi completamente gestiti in AWS tramite AWS Fargateo hardware locale tramite Amazon EKS ovunque. Questa era una funzionalità fondamentale voluta da Intel OTG, che offriva la possibilità di collegare questa applicazione a hardware locale specializzato, ad esempio.
I tre modelli ML che sono stati gli elementi costitutivi per la costruzione delle pipeline di inferenza erano un modello Yolo personalizzato (per il rilevamento di oggetti), un modello HRNet personalizzato (per la stima della posa 2D) e un modello 3DMPPE (per la stima della posa 3D) (vedere il precedente sezione ML per maggiori dettagli). Hanno usato l'open source Corteccia libreria per gestire la distribuzione e la gestione degli endpoint della pipeline di inferenza ML e l'avvio e la distribuzione dei cluster Amazon EKS. Ciascuno di questi modelli è stato impacchettato in contenitori Docker: i file del modello sono stati archiviati in Amazon S3 e le immagini del modello sono state archiviate Registro dei contenitori Amazon Elastic (Amazon ECR) e distribuito come API Cortex Realtime. Le versioni dei contenitori del modello che funzionano su CPU e GPU sono state create per fornire flessibilità per il tipo di hardware di calcolo. In futuro, se è necessario aggiungere ulteriori modelli o pipeline di modelli, è possibile creare semplicemente API Cortex Realtime aggiuntive.
Hanno quindi costruito pipeline di inferenza componendo insieme le API del modello Cortex Realtime nelle API della pipeline Cortex Realtime. Una singola API della pipeline Realtime consisteva nel chiamare una sequenza di API del modello Realtime. Le funzioni Consumer Lambda trattate a pipeline
API come una scatola nera, utilizzando una singola chiamata API per recuperare l'output di inferenza finale per un'immagine. Sono state create due pipeline: una pipeline 2D e una pipeline 3D.
La pipeline 2D combina una fase di preelaborazione della decodifica, il rilevamento di oggetti utilizzando un modello Yolo personalizzato per individuare l'atleta e produrre dei riquadri di delimitazione e infine un modello HRNet personalizzato per la creazione di punti chiave 2D per la stima della posa.
La pipeline 3D combina una fase di preelaborazione della decodifica, il rilevamento di oggetti utilizzando un modello Yolo personalizzato per individuare l'atleta e produrre dei riquadri di delimitazione e infine un modello 3DMPPE per la creazione di punti chiave 3D per la stima della posa.
Dopo aver generato inferenze su un batch di frame, ogni pipeline include anche un endpoint Cortex in tempo reale di postelaborazione separato che genera tre output principali:
- Il corpo aggregato indica i dati in un unico file CSV
- Calcoli BMA (come l'accelerazione)
- Sovrapposizione visiva di punti chiave aggiunti a ciascun fotogramma in un file immagine
La funzione Collector Lambda invia i metadati appropriati associati a un particolare video, come gli ID frame e le posizioni S3 degli output dell'inferenza della stima della posa, all'endpoint per generare questi output di postelaborazione.
Cortex è progettato per essere integrato con Amazon EKS e richiede solo un file di configurazione del cluster e un semplice comando per avviare un cluster Kubernetes:
Un'altra leva per l'ottimizzazione delle prestazioni è stata la configurazione dell'istanza per i cluster di calcolo. Sono stati creati tre livelli con diversi mix di istanze M5 e G4dn, codificati come file .yaml con specifiche come nome del cluster, regione e configurazione e mix dell'istanza. Le istanze M5 sono basate su CPU a basso costo e G4dn sono basate su GPU a costi più elevati per fornire alcuni compromessi costi/prestazioni.
Monitoraggio operativo
Per mantenere gli standard di registrazione operativa, tutte le funzioni Lambda includono il codice per registrare e importare i log tramite Firehose dati Amazon Kinesis. Ad esempio, ogni batch di frame elaborato dalla funzione Submitter Lambda viene registrato con il timestamp, il nome dell'azione e la risposta della funzione Lambda JSON e salvato in Amazon S3. Il diagramma seguente illustra questo passaggio nell'architettura.
Distribuzione
La distribuzione viene gestita utilizzando AWS SAM, un framework open source per la creazione di applicazioni serverless in AWS. AWS SAM consente di codificare e distribuire facilmente la progettazione dell'infrastruttura, incluse funzioni, API, database e mappature delle origini di eventi nei nuovi ambienti AWS. Durante la distribuzione, la sintassi di AWS SAM viene tradotta in AWS CloudFormazione per gestire il provisioning dell'infrastruttura.
A template.yaml
contiene le specifiche dell'infrastruttura insieme ai parametri sintonizzabili, come le leve di latenza di Kinesis Data Streams descritte in dettaglio nelle sezioni precedenti. UN samconfig.toml
contiene parametri di distribuzione come il nome dello stack, il nome del bucket S3 in cui sono archiviati i file dell'applicazione come il codice della funzione Lambda e i tag delle risorse per il monitoraggio dei costi. Uno script di shell deploy.sh con i semplici comandi è tutto ciò che serve per costruire e distribuire l'intero template:
Flusso di lavoro dell'utente
Per riassumere, dopo che l'infrastruttura è stata distribuita, puoi seguire questo flusso di lavoro per iniziare:
- Crea un client Intel 3DAT utilizzando la libreria client.
- Utilizzare l'API per creare una nuova istanza di una pipeline corrispondente al tipo di elaborazione richiesta, ad esempio quella per la stima della posa 3D.
- Crea una nuova istanza di un progetto, passando nell'ARN del cluster e nell'ARN della coda Kinesis.
- Crea una nuova istanza di un set di parametri della pipeline.
- Creare una nuova istanza di parametri della pipeline che esegue il mapping al set di parametri della pipeline.
- Creare un nuovo gruppo di utenti associato a un ID progetto e a un ID set di parametri pipeline.
- Creare un nuovo utente associato al gruppo di utenti.
- Carica un file .zip di video su Amazon S3 utilizzando un URL S3 preimpostato generato dalla funzione di caricamento nell'API del lavoro.
- Manda un
create_job
Chiamata API, con parametri di lavoro che specificano la posizione dei file video. Questo avvia il processo di elaborazione.
Conclusione
L'applicazione è ora attiva e pronta per essere testata con atleti e allenatori allo stesso modo. Intel OTG è entusiasta di rendere l'innovativa tecnologia di stima della posa utilizzando la visione artificiale accessibile a una varietà di utenti, dagli sviluppatori agli atleti ai partner dei fornitori di software.
Il team AWS è appassionato di aiutare i clienti come Intel OTG ad accelerare il loro percorso ML, dalla fase di ideazione e scoperta con ML Solutions Lab alla fase di consolidamento e distribuzione con AWS ML ProServe. Osserveremo tutti da vicino le Olimpiadi di Tokyo 2021 quest'estate per immaginare tutti i progressi che il ML può sbloccare negli sport.
Inizia oggi! Esplora il tuo caso d'uso con i servizi menzionati in questo post e molti altri sul Console di gestione AWS.
Informazioni sugli autori
L'uomo Han è un Senior Manager- Machine Learning & AI presso AWS con sede a San Diego, CA. Ha un dottorato di ricerca in ingegneria presso la Northwestern University e ha diversi anni di esperienza come consulente di gestione nella consulenza ai clienti nel settore manifatturiero, dei servizi finanziari e dell'energia. Oggi lavora con passione con clienti di diversi settori per sviluppare e implementare soluzioni di machine learning e intelligenza artificiale su AWS. Gli piace seguire la NBA e giocare a basket nel tempo libero.
Iman Kamyabi è un ingegnere ML con AWS Professional Services. Ha collaborato con un'ampia gamma di clienti AWS per promuovere le best practice nella creazione di pipeline di machine learning ripetibili e affidabili.
Jonathan Lee è il direttore di Sports Performance Technology, Olympic Technology Group presso Intel. Ha studiato l'applicazione dell'apprendimento automatico alla salute come studente universitario presso l'UCLA e durante il suo lavoro di laurea presso l'Università di Oxford. La sua carriera si è concentrata sullo sviluppo di algoritmi e sensori per la salute e le prestazioni umane. Attualmente guida il progetto 3D Athlete Tracking presso Intel.
Nelson Leung è l'architetto della piattaforma nello Sports Performance CoE di Intel, dove definisce l'architettura end-to-end per prodotti all'avanguardia che migliorano le prestazioni degli atleti. Inoltre guida l'implementazione, la distribuzione e la produzione di queste soluzioni di machine learning su larga scala per diversi partner Intel.
Troia Squillaci è un ingegnere DecSecOps presso Intel, dove fornisce soluzioni software professionali ai clienti attraverso le best practice DevOps. Gli piace integrare soluzioni di intelligenza artificiale in piattaforme scalabili in una varietà di domini.
Paolo Min è uno stagista Associate Solutions Architect presso Amazon Web Services (AWS), dove aiuta i clienti di diversi settori verticali a portare avanti la loro missione e accelerare l'adozione del cloud. In precedenza presso Intel, ha lavorato come stagista di ingegneria del software per aiutare a sviluppare l'SDK 3D Athlete Tracking Cloud SDK. Al di fuori del lavoro, a Paul piace giocare a golf e si sente cantare.
- Coinsmart. Il miglior scambio di bitcoin e criptovalute d'Europa.
- Platoblockchain. Web3 Metaverse Intelligence. Conoscenza amplificata. ACCESSO LIBERO.
- Criptofalco. Radar Altcoin. Prova gratuita.
- Fonte: https://aws.amazon.com/blogs/machine-learning/the-intel3d-athlete-tracking-3dat-scalable-architecture-deploys-pose-stimation-models-using-amazon-kinesis-data-streams- e-amazon-eks/
- "
- &
- 000
- 100
- 2021
- 3d
- Chi siamo
- accelerare
- accesso
- accessibile
- Secondo
- Il mio account
- operanti in
- Action
- azioni
- aggiunta
- aggiuntivo
- Admin
- Adozione
- AI
- algoritmo
- Tutti
- Amazon
- Amazon Web Services
- tra
- api
- API
- Applicazioni
- applicazioni
- opportuno
- architettura
- argomenti
- addetto
- Associate
- gli atleti
- gli attributi
- Automatico
- AWS
- di riserva
- Pallacanestro
- prima
- vantaggi
- MIGLIORE
- best practice
- Nero
- Blog
- stile di vita
- Scatola
- costruire
- Costruzione
- chiamata
- Ultra-Grande
- che
- Career
- casi
- centrale
- campione
- il cambiamento
- scelte
- clienti
- Cloud
- codice
- collezione
- collettore
- combinato
- componente
- Calcolare
- computer
- Configurazione
- veloce
- consulente
- Consumer
- Consumatori
- Contenitore
- Tecnologie Container
- contiene
- continua
- di controllo
- coordinare
- Nucleo
- Corrispondente
- creare
- creato
- crea
- Creazione
- creazione
- Credenziali
- critico
- cruciale
- Corrente
- Attualmente
- costume
- cliente
- Clienti
- bordo tagliente
- dati
- Banca Dati
- banche dati
- giorno
- dedicato
- più profondo
- fornisce un monitoraggio
- schierare
- schierato
- deployment
- Distribuisce
- Design
- progettato
- dettaglio
- dettagliati
- dettagli
- rivelazione
- sviluppare
- Costruttori
- sviluppatori
- Mercato
- diverso
- differenziare
- dirette
- Direttore
- scoperta
- display
- docker
- non
- domini
- giù
- durante
- facilmente
- endpoint
- energia
- motore
- ingegnere
- Ingegneria
- Ambiente
- Evento
- esempio
- eccitato
- esistente
- aspetta
- esperienza
- esplora
- caratteristica
- Infine
- finanziario
- servizi finanziari
- Nome
- in forma
- FLOTTA
- Flessibilità
- flessibile
- concentrato
- seguire
- i seguenti
- segue
- formato
- lungimirante
- TELAIO
- Contesto
- function
- funzionale
- funzionalità
- funzioni
- futuro
- generare
- la generazione di
- ELETTRICA
- Dare
- scopo
- buono
- GPU
- laurea
- Gruppo
- Gruppo
- maniglia
- Manovrabilità
- Hardware
- Salute e benessere
- sentito
- Aiuto
- aiutare
- aiuta
- qui
- superiore
- Come
- HTTPS
- umano
- Identità
- Immagine
- realizzare
- implementazione
- importante
- includere
- inclusi
- Compreso
- individuale
- industrie
- industria
- Infrastruttura
- creativi e originali
- ingresso
- Inserti
- install
- integrato
- integrazione
- Intel
- Intelligence
- interazione
- Interfaccia
- IT
- Lavoro
- Offerte di lavoro
- viaggio
- Le
- laboratorio
- lanciare
- lancio
- Leads
- apprendimento
- Livello
- Biblioteca
- linea
- Lista
- Caricamento in corso
- località
- posizioni
- macchina
- machine learning
- fatto
- mantenere
- maggiore
- FA
- uomo
- gestire
- gestito
- gestione
- consigliato per la
- carta geografica
- mappatura
- menzionato
- metodi
- Metrica
- ordine
- Missione
- ML
- Mobile
- Applicazioni mobili
- modello
- modelli
- componibile
- Scopri di più
- maggior parte
- multiplo
- nomi
- NBA
- necessaria
- esigenze
- numero
- Olimpiadi
- apre
- operare
- ottimizzati
- Opzione
- minimo
- Altro
- proprio
- Oxford
- pacchetto
- parte
- particolare
- particolarmente
- partner
- Di passaggio
- appassionato
- Cartamodello
- percentuale
- performance
- esecuzione
- prospettiva
- pezzo
- piattaforma
- Piattaforme
- gioco
- Poesia
- punti
- possibile
- energia
- potente
- Preparare
- precedente
- primario
- principio
- priorità
- processi
- i processi
- lavorazione
- Processore
- produrre
- Produzione
- Prodotti
- professionale
- progetto
- fornire
- fornisce
- scopo
- gamma
- Crudo
- in tempo reale
- riconoscere
- record
- record
- per quanto riguarda
- affidabile
- richieste
- richiedere
- necessario
- Requisiti
- richiede
- risorsa
- Risorse
- risposta
- Risultati
- Correre
- running
- Sicurezza
- San
- Scalabilità
- scalabile
- Scala
- scala
- sdk
- sicuro
- segmenti
- serverless
- servizio
- Servizi
- set
- regolazione
- Forma
- compartecipazione
- Conchiglia
- mostrato
- simile
- Allo stesso modo
- Un'espansione
- Taglia
- So
- Software
- software come un servizio
- Ingegneria del software
- soluzione
- Soluzioni
- alcuni
- Qualcuno
- specializzata
- Specifiche tecniche
- velocità
- Sports
- pila
- Stage
- Standard
- standard
- inizia a
- iniziato
- inizio
- Regione / Stato
- state-of-the-art
- Stato dei servizi
- conservazione
- Tornare al suo account
- ruscello
- Streaming
- presentata
- Successivamente
- estate
- supporto
- supporti
- sistema
- presa
- team
- Tecnologia
- Testing
- perciò
- Attraverso
- TIE
- tempo
- oggi
- insieme
- Tokyo
- pista
- Tracking
- Tipi di
- tipicamente
- ucla
- Università
- Università di Oxford
- sbloccare
- Aggiornanento
- uso
- utenti
- Utilizzando
- APPREZZIAMO
- varietà
- vario
- verticali
- Video
- Video
- visione
- sito web
- servizi web
- OMS
- senza
- Lavora
- lavorato
- lavoro
- anni