Dieser Blogbeitrag wurde gemeinsam von Jonathan Lee, Nelson Leung, Paul Min und Troy Squillaci von Intel verfasst.
In Teil 1 In diesem Beitrag haben wir besprochen, wie Intel® 3DAT zusammengearbeitet hat Professionelle AWS-Services für maschinelles Lernen (MLPS) zum Erstellen einer skalierbaren KI-SaaS-Anwendung. 3DAT verwendet Computer Vision und KI, um über 1,000 biomechanische Datenpunkte aus Standardvideos zu erkennen, zu verfolgen und zu analysieren. Es ermöglicht Kunden, reichhaltige und leistungsstarke Biomechanik-gesteuerte Produkte zu erstellen, wie z. B. Web- und mobile Anwendungen mit detaillierten Leistungsdaten und dreidimensionalen Visualisierungen.
In Teil 2 dieses Beitrags tauchen wir tiefer in jede Phase der Architektur ein. Wir untersuchen die AWS-Services, die verwendet werden, um die 3DAT-Designanforderungen zu erfüllen, einschließlich Amazon Kinesis-Datenströme und Amazon Elastic Kubernetes-Service (Amazon EKS), um die erforderlichen Modelle zur Posenschätzung für diese Software-as-a-Service-Anwendung (SaaS) skalierbar bereitzustellen.
Architektur Überblick
Das Hauptziel des MLPS-Teams war die Produktionsreife der 2D- und 3D-Pose-Schätzungsmodell-Pipelines und die Erstellung einer funktionalen und skalierbaren Anwendung. Das folgende Diagramm veranschaulicht die Lösungsarchitektur.
Die vollständige Architektur ist in fünf Hauptkomponenten unterteilt:
- Benutzeranwendungsschnittstellenschichten
- Datenbase
- Workflow-Orchestrierung
- Skalierbare Inferenzgenerierung zur Posenschätzung
- Betriebsüberwachung
Lassen Sie uns detailliert auf die einzelnen Komponenten, ihre Interaktionen und die Gründe für die Designentscheidungen eingehen.
Benutzeranwendungsschnittstellenschichten
Das folgende Diagramm zeigt die Ebenen der Anwendungsschnittstelle, die den Benutzerzugriff und die Steuerung der Anwendung und ihrer Ressourcen ermöglichen.
Diese Zugangspunkte unterstützen unterschiedliche Anwendungsfälle basierend auf unterschiedlichen Kundenpersönlichkeiten. Beispielsweise kann ein Anwendungsbenutzer einen Job über die CLI senden, während ein Entwickler eine Anwendung mit dem Python-SDK erstellen und Posenschätzungsintelligenz in seine Anwendungen einbetten kann. Die CLI und das SDK sind als modulare Komponenten aufgebaut – beide Schichten sind Wrapper der API-Schicht, die mithilfe von erstellt wird Amazon API-Gateway um die API-Aufrufe aufzulösen und zugehöriges AWS Lambda Funktionen, die sich um die mit jedem API-Aufruf verbundene Backend-Logik kümmern. Diese Ebenen waren eine entscheidende Komponente für das Intel OTG-Team, da sie eine breite Basis von Kunden erschließen, die diese SaaS-Anwendung effektiv nutzen können.
API-Schicht
Die Lösung verfügt über einen Kernsatz von neun APIs, die den Objekttypen entsprechen, die auf dieser Plattform ausgeführt werden. Jede API verfügt über eine Python-Datei, die die API-Aktionen definiert, die ausgeführt werden können. Beim Anlegen neuer Objekte wird automatisch fortlaufend eine Objekt-ID vergeben. Die Attribute dieser Objekte werden in gespeichert und nachverfolgt Amazon Aurora Serverlos Datenbank mit dieser ID. Daher greifen die API-Aktionen auf Funktionen zurück, die in einer zentralen Datei definiert sind, die die Backend-Logik zum Abfragen der Aurora-Datenbank enthält. Diese Backend-Logik verwendet die Boto3 Amazon RDS DataService-Client um auf den Datenbank-Cluster zuzugreifen.
Einzige Ausnahme ist die /job
API, die eine hat create_job
Methode, die die Videoübermittlung zum Erstellen eines neuen Verarbeitungsauftrags verarbeitet. Diese Methode startet die AWS Step-Funktionen Workflow-Logik zum Ausführen des Jobs. Durch das Eingeben von a job_id
verwendet diese Methode die Boto3 Step Functions-Client anrufen start_execution
Methode für eine bestimmte stateMachineARN
(Name der Amazon-Ressource).
Die acht Objekt-APIs haben die Methoden und ähnliche Zugriffsmuster, wie in der folgenden Tabelle zusammengefasst.
Methodentyp | Funktionsname | Beschreibung |
BESTELLE | list_[object_name]s |
Wählt alle Objekte dieses Typs aus der Datenbank aus und zeigt sie an. |
jetzt lesen | create_[object] |
Fügt einen neuen Objektdatensatz mit erforderlichen Eingaben in die Datenbank ein. |
BESTELLE | get_[object] |
Wählt Objektattribute basierend auf der Objekt-ID aus der Datenbank aus und zeigt sie an. |
SETZEN | update_[object] |
Aktualisiert einen vorhandenen Objektdatensatz mit den erforderlichen Eingaben. |
LÖSCHEN | delete_[object] |
Löscht einen vorhandenen Objektdatensatz basierend auf der Objekt-ID aus der Datenbank. |
Die Details der neun APIs lauten wie folgt:
- / user – Ein Benutzer ist die Identität einer Person, die berechtigt ist, Jobs an diese Anwendung zu senden. Die Erstellung eines Benutzers erfordert einen Benutzernamen, eine Benutzer-E-Mail und eine Gruppen-ID, zu der der Benutzer gehört.
- /Benutzergruppe – Eine Benutzergruppe ist eine Sammlung von Benutzern. Jede Benutzergruppe wird einem Projekt und einem Pipeline-Parametersatz zugeordnet. Um unterschiedliche Ebenen (in Bezug auf Infrastrukturressourcen und Pipeline-Parameter) zu haben, werden Benutzer in Benutzergruppen eingeteilt. Jeder Benutzer kann nur einer Benutzergruppe angehören. Die Erstellung einer Benutzergruppe erfordert eine Projekt-ID, eine Pipeline-Parametersatz-ID, einen Benutzergruppennamen und eine Benutzergruppenbeschreibung. Beachten Sie, dass sich Benutzergruppen von den im AWS-Konto definierten Benutzerrollen unterscheiden. Letzteres wird verwendet, um unterschiedliche Zugriffsebenen basierend auf ihren Zugriffsrollen (z. B. Admin) bereitzustellen.
- /Projekt – Ein Projekt wird verwendet, um verschiedene Sätze von Infrastrukturressourcen zusammenzufassen. Ein Projekt ist mit einer Single verknüpft
project_cluster_url
(Aurora-Cluster) zur Aufzeichnung von Benutzern, Jobs und anderen Metadaten, aproject_queue_arn
(Kinesis Data Streams ARN) und eine Compute-Laufzeitumgebung (derzeit über Cortex gesteuert), die zum Ausführen von Inferenzen auf den Frame-Batches oder zur Nachbearbeitung der Videos verwendet wird. Jede Benutzergruppe ist einem Projekt zugeordnet, und durch diesen Mechanismus werden verschiedene Ebenen in Bezug auf Latenz und Rechenleistung für verschiedene Benutzergruppen aktiviert. Die Erstellung eines Projekts erfordert einen Projektnamen, eine Projektcluster-URL und einen Projektwarteschlangen-ARN. - /Pipeline – Eine Pipeline ist einer einzelnen Konfiguration für eine Sequenz von Verarbeitungscontainern zugeordnet, die eine Videoverarbeitung im von Cortex koordinierten Amazon EKS-Inferenzgenerierungscluster durchführen (weitere Einzelheiten finden Sie im Abschnitt über die Videoverarbeitungs-Inferenzgenerierung). Typischerweise besteht dies aus drei Containern: Vorverarbeitung und Dekodierung, Objekterkennung und Posenschätzung. Beispielsweise sind der Dekodierungs- und der Objekterkennungsschritt für die 2D- und 3D-Pipelines gleich, aber das Austauschen des letzten Containers unter Verwendung von entweder HRNet oder 3DMPPE führt zu einem Parametersatz für 2D- und 3D-Verarbeitungspipelines. Sie können neue Konfigurationen erstellen, um mögliche Pipelines zu definieren, die für die Verarbeitung verwendet werden können, und es erfordert als Eingabe eine neue Python-Datei im Cortex-Repository, die die Sequenz von Modellendpunktaufrufen beschreibt, die diese Pipeline definieren (siehe den Abschnitt über die Erzeugung von Inferenzen bei der Videoverarbeitung ). Der Pipeline-Endpunkt ist der Cortex-Endpunkt, der aufgerufen wird, um einen einzelnen Frame zu verarbeiten. Die Erstellung einer Pipeline erfordert einen Pipelinenamen, eine Pipelinebeschreibung und einen Pipelineendpunkt.
- /pipeline_parameter_set – Ein Pipeline-Parametersatz ist eine flexible JSON-Sammlung mehrerer Parameter (eine Pipeline-Konfigurationslaufzeit) für eine bestimmte Pipeline und wird hinzugefügt, um Flexibilität für zukünftige Anpassungen zu bieten, wenn mehrere Pipeline-Konfigurationslaufzeiten erforderlich sind. Benutzergruppen können einem bestimmten Pipeline-Parametersatz zugeordnet werden, und sein Zweck besteht darin, unterschiedliche Gruppen von Parametern pro Benutzergruppe und pro Pipeline zu haben. Dies war eine wichtige zukunftsweisende Ergänzung für Intel OTG, um Anpassungen einzubauen, die die Portabilität unterstützen, wenn verschiedene Kunden, insbesondere ISVs, mit der Verwendung der Anwendung beginnen.
- /pipeline_parameters – Eine einzelne Sammlung von Pipelineparametern ist eine Instanziierung eines Pipelineparametersatzes. Dies macht es zu einer 1:n-Zuordnung eines Pipeline-Parametersatzes zu Pipeline-Parametern. Diese API erfordert eine Pipeline-ID, die dem Satz von Pipeline-Parametern zugeordnet werden muss, der die Erstellung einer Pipeline für eine 1:1-Zuordnung von Pipeline-Parametern zur Pipeline ermöglicht. Die anderen Eingaben, die von dieser API benötigt werden, sind eine Pipeline-Parametersatz-ID, ein Pipeline-Parameterwert und ein Pipeline-Parametername.
- /Video – Ein Videoobjekt wird verwendet, um einzelne Videos zu definieren, aus denen ein .zip-Paket besteht, das während eines Auftrags übermittelt wird. Diese Datei wird nach der Übermittlung in mehrere Videos aufgeteilt. Dazu gehört ein Video
job_id
für den Job, bei dem das .zip-Paket übermittelt wird, und Amazon Simple Storage-Service (Amazon S3) Pfade für den Speicherort der getrennten Rohvideos und die Nachbearbeitungsergebnisse jedes Videos. Das Videoobjekt enthält auch einen Videofortschrittsprozentsatz, der während der Verarbeitung einzelner Frame-Batches dieses Videos ständig aktualisiert wird, sowie ein Videostatus-Flag für abgeschlossen oder nicht abgeschlossen. Die Erstellung eines Videos erfordert eine Job-ID, einen Videopfad, einen Videoergebnispfad, einen Prozentsatz des Videofortschritts und einen Videostatus. - /frame_batch - Ein
frame_batch
Objekt ist ein Mini-Batch von Frames, der durch das Sampling eines einzelnen Videos erstellt wird. Das Aufteilen eines Videos in Frame-Batches mit normaler Größe bietet einen Hebel zum Optimieren der Latenz und erhöht die Parallelisierung und den Durchsatz. Dies ist die granulare Einheit, die zur Inferenz durch Kinesis Data Streams geleitet wird. Für die Erstellung eines Frame-Batches sind eine Video-ID, eine Frame-Batch-Startnummer, eine Frame-Batch-Endnummer, ein Frame-Batch-Eingabepfad, ein Frame-Batch-Ergebnispfad und ein Frame-Batch-Status erforderlich. - /Job – Diese Interaktions-API wird für die Dateiübermittlung verwendet, um einen Verarbeitungsauftrag zu starten. Diese API hat eine andere Funktion als andere Objekt-APIs, da sie der direkte Weg zur Interaktion mit der Step Functions-Workflow-Koordination des Videoverarbeitungs-Backends und dem Amazon EKS-Cluster ist. Diese API erfordert eine Benutzer-ID, eine Projekt-ID, eine Pipeline-ID, eine Pipeline-Parametersatz-ID, Auftragsparameter und einen Auftragsstatus. In den Auftragsparametern wird ein Eingabedateipfad angegeben, bei dem es sich um den Speicherort in Amazon S3 handelt, an dem sich das .zip-Paket der zu verarbeitenden Videos befindet. Das Hochladen von Dateien wird mit der behandelt
upload_handler
-Methode, die eine vorsignierte S3-URL generiert, damit der Benutzer eine Datei platzieren kann. Ein WORKFLOW_STATEMACHINE_ARN ist eine Umgebungsvariable, die an die übergeben wirdcreate_job
API zum Angeben, wo ein Video-ZIP-Paket mit einem Eingabedateipfad zum Starten eines Jobs übermittelt wird.
Die folgende Tabelle fasst die Funktionen der API zusammen.
Methodentyp | Funktion | Beschreibung |
BESTELLE | list_jobs |
Wählt alle Jobs aus der Datenbank aus und zeigt sie an. |
jetzt lesen | create_ job |
Fügt einen neuen Auftragsdatensatz mit Benutzer-ID, Projekt-ID, Pipeline-ID, Pipeline-Parametersatz-ID, Auftragsergebnispfad, Auftragsparametern und Auftragsstatus ein. |
BESTELLE | get_ job |
Wählt Jobattribute basierend auf der Job-ID aus der Datenbank aus und zeigt sie an. |
BESTELLE | upload_handler |
Generiert eine vorsignierte S3-URL als Speicherort für das Hochladen der ZIP-Datei. Erfordert einen S3-Bucket-Namen und erwartet einen Anwendungs-/ZIP-Dateityp. |
Python-SDK-Schicht
Aufbauend auf den APIs erstellte das Team eine Python-SDK-Client-Bibliothek als Wrapper, um Entwicklern den Zugriff auf die API-Methoden zu erleichtern. Sie nutzten die Open Source Poesie, das die Python-Paketierung und das Abhängigkeitsmanagement übernimmt. Sie schufen eine client.py
Datei, die Funktionen enthält, die jede der APIs mit Python umschließen requests
Bibliothek zur Behandlung von API-Anforderungen und Ausnahmen.
Damit Entwickler das Intel 3DAT SDK starten können, müssen sie das Poetry-Paket installieren und erstellen. Dann können sie einen einfachen Python-Import von hinzufügen intel_3dat_sdk
zu jedem Python-Code.
Um den Client zu verwenden, können Sie eine Instanz des Clients erstellen und den API-Endpunkt angeben:
Über den Client können Sie dann die einzelnen Methoden wie die aufrufen create_pipeline
-Methode (siehe folgenden Code), wobei die richtigen Argumente wie Pipeline-Name und Pipeline-Beschreibung übernommen werden.
CLI-Schicht
In ähnlicher Weise baute das Team auf den APIs auf, um eine Befehlszeilenschnittstelle für Benutzer zu erstellen, die mit einer unkomplizierten Schnittstelle auf die API-Methoden zugreifen möchten, ohne Python-Code schreiben zu müssen. Sie verwendeten das Open-Source-Python-Paket Klicken Sie auf Kostenlos erhalten und dann auf Installieren. (Command Line Interface Creation Kit). Die Vorteile dieses Frameworks sind die beliebige Verschachtelung von Befehlen, die automatische Generierung von Hilfeseiten und die Unterstützung des verzögerten Ladens von Unterbefehlen zur Laufzeit. Im gleichen client.py
Datei wie im SDK wurde jede SDK-Client-Methode mit Click umschlossen und die erforderlichen Methodenargumente wurden in Befehlszeilen-Flags konvertiert. Die Flag-Eingänge werden dann beim Aufruf des SDK-Befehls verwendet.
Um die CLI zu starten, können Sie die CLI configure
Befehl. Sie werden zur Eingabe der Endpunkt-URL aufgefordert:
Jetzt können Sie die CLI verwenden, um verschiedene Befehle im Zusammenhang mit den API-Methoden aufzurufen, zum Beispiel:
Datenbase
Als Datenbank verwendet diese Anwendung Aurora Serverless, um Metadaten zu speichern, die mit jeder der APIs mit MYSQL als Datenbank-Engine verknüpft sind. Die Wahl des Aurora Serverless-Datenbankservice entspricht dem Designprinzip, den Infrastrukturaufwand zu minimieren, indem nach Möglichkeit serverlose AWS-Services verwendet werden. Das folgende Diagramm veranschaulicht diese Architektur.
Das serverloser Engine-Modus erfüllt das unregelmäßige Nutzungsmuster, da diese Anwendung für neue Kunden skaliert wird und die Workloads noch ungewiss sind. Beim Starten eines Datenbankendpunkts ist keine bestimmte DB-Instance-Größe erforderlich, sondern nur ein minimaler und maximaler Bereich für die Clusterkapazität. Aurora Serverless übernimmt die angemessene Bereitstellung einer Router-Flotte und verteilt die Arbeitslast auf die Ressourcen. Aurora Serverless führt automatisch eine Backup-Aufbewahrung für mindestens 1 Tag bis zu 35 Tage durch. Das Team optimierte die Sicherheit, indem es den Standardwert auf den Maximalwert von 35 setzte.
Darüber hinaus nutzte das Team die Daten-API um den Zugriff auf den Aurora Serverless-Cluster zu handhaben, der keine dauerhafte Verbindung erfordert und stattdessen einen sicheren HTTP-Endpunkt und die Integration mit AWS SDKs bietet. Diese Funktion verwendet AWS Secrets Manager zum Speichern der Datenbankanmeldeinformationen, sodass Anmeldeinformationen nicht explizit übergeben werden müssen. CREATE TABLE-Skripts wurden in .sql-Dateien für jede der neun Tabellen geschrieben, die den neun APIs entsprechen. Da diese Datenbank alle Metadaten und den Status von Objekten im System enthielt, wurden die API-Methoden mit den entsprechenden SQL-Befehlen ausgeführt (z select * from Job
für die list_jobs
API) und an die übergeben execute_statement
-Methode vom Amazon RDS-Client in der Daten-API.
Workflow-Orchestrierung
Das funktionale Rückgrat der Anwendung wurde mithilfe von Step Functions gehandhabt, um den Workflow zu koordinieren, wie im folgenden Diagramm dargestellt.
Die Zustandsmaschine bestand aus einer Folge von vier Lambda-Funktionen, die gestartet wird, wenn ein Job mithilfe von gesendet wird create_job
Methode aus dem job
API. Die Benutzer-ID, Projekt-ID, Pipeline-ID, Pipeline-Parametersatz-ID, Jobergebnispfad, Jobparameter und Jobstatus sind für die Joberstellung erforderlich. Sie können zuerst ein .zip-Paket mit Videodateien hochladen, indem Sie die verwenden upload_handler
-Methode aus der Auftrags-API, um eine vorsignierte S3-URL zu generieren. Während der Jobübergabe wird der Eingabedateipfad über die Jobparameter übergeben, um den Speicherort der Datei anzugeben. Dies startet die Ausführung der Workflow-Zustandsmaschine und löst vier Hauptschritte aus:
- Initialisierer-Lambda-Funktion
- Submitter-Lambda-Funktion
- Completion Check Lambda-Funktion
- Kollektor-Lambda-Funktion
Initialisierer-Lambda-Funktion
Die Hauptfunktion des Initializers besteht darin, das .zip-Paket in einzelne Videodateien aufzuteilen und diese für den Einreicher vorzubereiten. Zuerst wird die .zip-Datei heruntergeladen und dann jede einzelne Datei, einschließlich Videodateien, entpackt und extrahiert. Die Videos, vorzugsweise im .mp4-Format, werden zurück in einen S3-Bucket hochgeladen. Verwendung der create_video
Methode in der video
API wird ein Videoobjekt mit dem Videopfad als Eingabe erstellt. Dadurch werden Daten zu jedem Video in die Aurora-Datenbank eingefügt. Alle anderen Dateitypen, z. B. JSON-Dateien, werden als Metadaten betrachtet und auf ähnliche Weise hochgeladen, aber es wird kein Videoobjekt erstellt. Eine Liste der Namen der extrahierten Dateien und Videodateien wird an den nächsten Schritt übergeben.
Submitter-Lambda-Funktion
Die Submitter-Funktion nimmt die Videodateien, die vom Initializer extrahiert wurden, und erstellt Mini-Batches von Videoframes als Bilder. Die meisten aktuellen Computer-Vision-Modelle in der Produktion wurden mit Bildern trainiert, sodass sie selbst bei der Verarbeitung von Videos vor der Modellinferenz zunächst in Bildframes getrennt werden. Diese aktuelle Lösung, die ein hochmodernes Posenschätzungsmodell verwendet, ist nicht anders – die Frame-Batches vom Submitter werden an Kinesis Data Streams übergeben, um den Schritt der Inferenzgenerierung einzuleiten.
Zuerst wird die Videodatei von der Lambda-Funktion heruntergeladen. Die Bildrate und Anzahl der Bilder wird mit berechnet FileVideoStream
Modul von der imutils.video
Verarbeitung Bibliothek. Die Frames werden gemäß einer bestimmten Mini-Batch-Größe extrahiert und gruppiert, was einer der wichtigsten einstellbaren Parameter dieser Pipeline ist. Mithilfe der Python-Pickle-Bibliothek werden die Daten serialisiert und auf Amazon S3 hochgeladen. Anschließend wird ein Frame-Batch-Objekt erstellt und der Metadateneintrag in der Aurora-Datenbank erstellt. Diese Lambda-Funktion wurde mithilfe einer Docker-Datei mit Abhängigkeiten von erstellt opencv-python
, numpy
und imutils
Bibliotheken.
Completion Check Lambda-Funktion
Die Completion Check-Funktion fragt weiterhin die Aurora-Datenbank ab, um für jedes Video im .zip-Paket für diesen aktuellen Job zu sehen, wie viele Frame-Batches sich im Status COMPLETED befinden. Wenn alle Frame-Batches für alle Videos abgeschlossen sind, ist dieser Prüfprozess abgeschlossen.
Kollektor-Lambda-Funktion
Die Collector-Funktion nimmt die Ausgaben der Inferenzen, die für jeden Frame während der Consumer-Phase durchgeführt wurden, und kombiniert sie über einen Frame-Stapel und über ein Video hinweg. Die kombinierten zusammengeführten Daten werden dann in einen S3-Bucket hochgeladen. Die Funktion ruft dann die Cortex-Nachbearbeitungs-API für eine bestimmte ML-Pipeline auf, um Nachbearbeitungsberechnungen durchzuführen, und fügt die aggregierten Ergebnisse per Video zum Ausgabe-Bucket hinzu. Viele dieser Metriken werden frameübergreifend berechnet, wie z. B. Geschwindigkeit, Beschleunigung und Gelenkwinkel, sodass diese Berechnung anhand der aggregierten Daten durchgeführt werden muss. Die Hauptausgaben umfassen Körperschlüsselpunktdaten (aggregiert im CSV-Format), BMA-Berechnungen (z. B. Beschleunigung) und visuelle Überlagerung von Schlüsselpunkten, die jedem Frame in einer Bilddatei hinzugefügt werden.
Skalierbare Inferenzgenerierung zur Posenschätzung
Die Verarbeitungs-Engine, die die Skalierung der ML-Inferenz antreibt, findet in dieser Phase statt. Es umfasst drei Hauptteile, von denen jedes seine eigenen Parallelitätshebel hat, die auf Latenzkompromisse abgestimmt werden können (siehe folgendes Diagramm).
Diese Architektur ermöglicht Experimente beim Testen von Latenzgewinnen sowie Flexibilität für die Zukunft, wenn sich die Workloads mit unterschiedlichen Mischungen von Endbenutzersegmenten, die auf die Anwendung zugreifen, ändern können.
Kinesis-Datenströme
Das Team entschied sich für Kinesis Data Streams, da es normalerweise zur Verarbeitung von Streaming-Daten verwendet wird und in diesem Fall gut geeignet ist, da es Frame-Batches auf ähnliche Weise verarbeiten kann, um Skalierbarkeit und Parallelisierung bereitzustellen. In der Submitter-Lambda-Funktion wird der Kinesis Boto3-Client verwendet, mit dem put_record
-Methode, die Metadaten übergibt, die einem einzelnen Frame-Batch zugeordnet sind, z. B. Frame-Batch-ID, Frame-Batch-Startframe, Frame-Batch-Endframe, Bildform, Framerate und Video-ID.
Wir haben verschiedene Jobwarteschlangen- und Kinesis-Datenstromkonfigurationen definiert, um Durchsatzniveaus festzulegen, die an die Prioritätsebene verschiedener Benutzergruppen anknüpfen. Der Zugriff auf verschiedene Ebenen der Verarbeitungsleistung wird durch die Übergabe eines Projektwarteschlangen-ARN verknüpft, wenn ein neues Projekt mithilfe von erstellt wird project
API. Jede Benutzergruppe wird dann bei der Benutzergruppenerstellung mit einem bestimmten Projekt verknüpft. In der sind drei Standard-Stream-Konfigurationen definiert AWS Serverless-Anwendungsmodell (AWS SAM)-Infrastrukturvorlage:
- Normen -
JobStreamShardCount
- Priorität -
PriorityJobStreamShardCount
- Hohe Priorität -
HighPriorityJobStreamShardCount
Das Team verwendete einige verschiedene Hebel, um die Verarbeitungsleistung jedes Streams zu differenzieren oder die Latenz des Systems abzustimmen, wie in der folgenden Tabelle zusammengefasst.
Hebel | Beschreibung | Standardwert |
Scherbe | Ein Shard ist in Kinesis Data Streams nativ; Es ist die Basiseinheit des Durchsatzes für die Aufnahme. Der Standardwert ist 1 MB/s, was 1,000 Datensätzen pro Sekunde entspricht. | 2 |
KinesisBatchSize |
Die maximale Anzahl an Datensätzen, die Kinesis Data Streams in einem einzelnen Batch abruft, bevor die Verbraucher-Lambda-Funktion aufgerufen wird. | 1 |
KinesisParallelizationFactor |
Die Anzahl der Batches, die gleichzeitig von jedem Shard verarbeitet werden sollen. | 1 |
Verbessertes Fan-Out | Datenkonsumenten mit aktiviertem erweitertem Fanout haben einen dedizierten Aufnahmedurchsatz pro Konsument (z. B. standardmäßig 1 MB/s), anstatt den Durchsatz auf alle Konsumenten aufzuteilen. | Off |
Verbraucher-Lambda-Funktion
Aus der Perspektive von Kinesis Data Streams ist ein Datenverbraucher ein AWS-Service, der Daten von einem Datenstrom-Shard abruft, wenn Daten in einem Stream generiert werden. Diese Anwendung verwendet eine Verbraucher-Lambda-Funktion, die aufgerufen wird, wenn Nachrichten von den Datenstromwarteschlangen weitergeleitet werden. Jede Consumer-Funktion verarbeitet einen Frame-Batch, indem sie die folgenden Schritte ausführt. Zuerst wird synchron die Cortex-Prozessor-API aufgerufen, die der Endpunkt ist, der die Modellrückschlusspipeline hostet (weitere Einzelheiten finden Sie im nächsten Abschnitt zu Amazon EKS mit Cortex). Die Ergebnisse werden in Amazon S3 gespeichert, und die Datenbank wird aktualisiert, indem der Status des verarbeiteten Rahmenstapels auf geändert wird Complete
. Die Fehlerbehandlung ist integriert, um den Cortex-API-Aufruf mit einer Wiederholungsschleife zu verwalten, um alle 504-Fehler vom Cortex-Cluster zu behandeln, wobei die Anzahl der Wiederholungen auf 5 festgelegt ist.
Amazon EKS mit Cortex für ML-Inferenz
Das Team verwendete Amazon EKS, einen verwalteten Kubernetes-Service in AWS, als Rechenmaschine für ML-Inferenz. Es wurde eine Designentscheidung getroffen, Amazon EKS zum Hosten von ML-Endpunkten zu verwenden, was die Flexibilität bietet, Upstream-Kubernetes mit der Option von Clustern auszuführen, die beide vollständig in AWS via verwaltet werden AWS Fargate, oder lokale Hardware über Amazon EKS überall. Dies war eine wichtige Funktion, die von Intel OTG gewünscht wurde, die die Option bot, diese Anwendung beispielsweise mit spezialisierter lokaler Hardware zu verbinden.
Die drei ML-Modelle, die die Bausteine zum Erstellen der Inferenzpipelines waren, waren ein benutzerdefiniertes Yolo-Modell (für die Objekterkennung), ein benutzerdefiniertes HRNet-Modell (für die 2D-Posenschätzung) und ein 3DMPPE-Modell (für die 3D-Posenschätzung) (siehe vorherige ML-Abschnitt für weitere Details). Sie nutzten die Open Source Kortex Bibliothek, um die Bereitstellung und Verwaltung von ML-Inferenz-Pipeline-Endpunkten sowie das Starten und Bereitstellen der Amazon EKS-Cluster zu handhaben. Jedes dieser Modelle wurde in Docker-Containern verpackt – Modelldateien wurden in Amazon S3 gespeichert und Modellbilder wurden darin gespeichert Amazon Elastic Container-Registrierung (Amazon ECR) – und als Cortex Realtime APIs bereitgestellt. Versionen der Modellcontainer, die auf CPU und GPU ausgeführt werden, wurden erstellt, um Flexibilität für die Art der Rechenhardware zu bieten. Wenn in Zukunft zusätzliche Modelle oder Modellpipelines hinzugefügt werden müssen, können sie einfach zusätzliche Cortex Realtime APIs erstellen.
Anschließend konstruierten sie Inferenz-Pipelines, indem sie die Cortex-Realtime-Modell-APIs zu Cortex-Realtime-Pipeline-APIs zusammensetzten. Eine einzelne Echtzeit-Pipeline-API bestand aus dem Aufrufen einer Folge von Echtzeitmodell-APIs. Die behandelten Verbraucher-Lambda-Funktionen a pipeline
API als Blackbox, die einen einzigen API-Aufruf verwendet, um die endgültige Inferenzausgabe für ein Bild abzurufen. Es wurden zwei Pipelines erstellt: eine 2D-Pipeline und eine 3D-Pipeline.
Die 2D-Pipeline kombiniert einen Dekodierungs-Vorverarbeitungsschritt, eine Objekterkennung mit einem benutzerdefinierten Yolo-Modell, um den Athleten zu lokalisieren und Begrenzungsrahmen zu erstellen, und schließlich ein benutzerdefiniertes HRNet-Modell zum Erstellen von 2D-Schlüsselpunkten für die Posenschätzung.
Die 3D-Pipeline kombiniert einen Dekodierungs-Vorverarbeitungsschritt, eine Objekterkennung mit einem benutzerdefinierten Yolo-Modell, um den Athleten zu lokalisieren und Begrenzungsrahmen zu erstellen, und schließlich ein 3DMPPE-Modell zum Erstellen von 3D-Schlüsselpunkten für die Posenschätzung.
Nach dem Generieren von Inferenzen für einen Batch von Frames enthält jede Pipeline auch einen separaten Postprocessing-Echtzeit-Cortex-Endpunkt, der drei Hauptausgaben generiert:
- Aggregierte Körper-Schlüsselpunktdaten in einer einzigen CSV-Datei
- BMA-Berechnungen (z. B. Beschleunigung)
- Visuelle Überlagerung von Schlüsselpunkten, die jedem Frame in einer Bilddatei hinzugefügt werden
Die Collector-Lambda-Funktion sendet die entsprechenden Metadaten, die einem bestimmten Video zugeordnet sind, wie z. B. die Frame-IDs und S3-Speicherorte der Posenschätzungs-Inferenzausgaben, an den Endpunkt, um diese Nachbearbeitungsausgaben zu generieren.
Cortex ist für die Integration mit Amazon EKS konzipiert und erfordert nur eine Cluster-Konfigurationsdatei und einen einfachen Befehl zum Starten eines Kubernetes-Clusters:
Ein weiterer Hebel für das Performance-Tuning war die Instanzkonfiguration für die Compute-Cluster. Es wurden drei Ebenen mit unterschiedlichen Mischungen aus M5- und G4dn-Instances erstellt, die als .yaml-Dateien mit Spezifikationen wie Clustername, Region und Instance-Konfiguration und -Mix kodiert sind. M5-Instanzen sind kostengünstiger CPU-basiert und G4dn sind teurere GPU-basiert, um einige Kompromisse zwischen Kosten und Leistung zu bieten.
Betriebsüberwachung
Um betriebliche Protokollierungsstandards aufrechtzuerhalten, enthalten alle Lambda-Funktionen Code zum Aufzeichnen und Einlesen von Protokollen Amazon Kinesis Data Firehose. Beispielsweise wird jeder Frame-Batch, der von der Submitter-Lambda-Funktion verarbeitet wird, mit Zeitstempel, Aktionsname und JSON-Antwort der Lambda-Funktion protokolliert und in Amazon S3 gespeichert. Das folgende Diagramm veranschaulicht diesen Schritt in der Architektur.
Einsatz
Die Bereitstellung erfolgt über AWS SAM, ein Open-Source-Framework zum Erstellen serverloser Anwendungen in AWS. AWS SAM ermöglicht das Infrastrukturdesign, einschließlich Funktionen, APIs, Datenbanken und Zuordnungen von Ereignisquellen, die kodifiziert und einfach in neuen AWS-Umgebungen bereitgestellt werden können. Während der Bereitstellung wird die AWS SAM-Syntax übersetzt in AWS CloudFormation um die Bereitstellung der Infrastruktur abzuwickeln.
A template.yaml
Datei enthält die Infrastrukturspezifikationen zusammen mit einstellbaren Parametern, wie z. EIN samconfig.toml
Die Datei enthält Bereitstellungsparameter wie Stack-Name, S3-Bucket-Name, in dem Anwendungsdateien wie Lambda-Funktionscode gespeichert sind, und Ressourcen-Tags zur Kostenverfolgung. Ein deploy.sh-Shell-Skript mit den einfachen Befehlen ist alles, was zum Erstellen und Bereitstellen der gesamten Vorlage erforderlich ist:
Benutzerarbeitsablauf
Zusammenfassend lässt sich sagen, dass Sie nach der Bereitstellung der Infrastruktur diesem Workflow folgen können, um loszulegen:
- Erstellen Sie mithilfe der Client-Bibliothek einen Intel 3DAT-Client.
- Verwenden Sie die API, um eine neue Instanz einer Pipeline zu erstellen, die dem erforderlichen Verarbeitungstyp entspricht, z. B. einer für die 3D-Pose-Schätzung.
- Erstellen Sie eine neue Instanz eines Projekts und übergeben Sie den Cluster-ARN und den Kinesis-Warteschlangen-ARN.
- Erstellen Sie eine neue Instanz eines Pipeline-Parametersatzes.
- Erstellen Sie eine neue Instanz von Pipelineparametern, die dem Pipelineparametersatz zugeordnet sind.
- Erstellen Sie eine neue Benutzergruppe, die einer Projekt-ID und einer Pipeline-Parametersatz-ID zugeordnet ist.
- Erstellen Sie einen neuen Benutzer, der der Benutzergruppe zugeordnet ist.
- Laden Sie eine .zip-Datei mit Videos auf Amazon S3 hoch, indem Sie eine vorsignierte S3-URL verwenden, die von der Upload-Funktion in der Job-API generiert wird.
- Sende ein
create_job
API-Aufruf mit Auftragsparametern, die den Speicherort der Videodateien angeben. Dadurch wird der Verarbeitungsauftrag gestartet.
Zusammenfassung
Die Anwendung ist jetzt live und kann sowohl von Athleten als auch von Trainern getestet werden. Intel OTG freut sich, innovative Posenschätzungstechnologie mithilfe von Computer Vision für eine Vielzahl von Benutzern zugänglich zu machen, von Entwicklern über Sportler bis hin zu Partnern von Softwareanbietern.
Das AWS-Team hilft Kunden wie Intel OTG leidenschaftlich dabei, ihre ML-Reise zu beschleunigen, von der Ideenfindungs- und Entdeckungsphase mit ML Solutions Lab bis zur Härtungs- und Bereitstellungsphase mit AWS ML ProServe. Wir alle werden die Olympischen Spiele 2021 in Tokio in diesem Sommer genau beobachten, um uns all die Fortschritte vorzustellen, die ML im Sport freisetzen kann.
Fangen Sie noch heute an! Erkunden Sie Ihren Anwendungsfall mit den in diesem Beitrag erwähnten Diensten und vielen anderen auf der AWS-Managementkonsole.
Über die Autoren
Han-Man ist Senior Manager – Machine Learning & AI bei AWS mit Sitz in San Diego, CA. Er hat einen Doktortitel in Ingenieurwesen von der Northwestern University und verfügt über mehrere Jahre Erfahrung als Unternehmensberater, der Kunden in den Bereichen Fertigung, Finanzdienstleistungen und Energie berät. Heute arbeitet er leidenschaftlich mit Kunden aus verschiedenen Branchen zusammen, um Lösungen für maschinelles Lernen und KI auf AWS zu entwickeln und zu implementieren. In seiner Freizeit verfolgt er gerne die NBA und spielt Basketball.
Iman Kamyabi ist ML-Ingenieur bei AWS Professional Services. Er hat mit einer Vielzahl von AWS-Kunden zusammengearbeitet, um sich für Best Practices bei der Einrichtung wiederholbarer und zuverlässiger ML-Pipelines einzusetzen.
Jonathan Lee ist der Director of Sports Performance Technology der Olympic Technology Group bei Intel. Er studierte die Anwendung des maschinellen Lernens auf die Gesundheit als Student an der UCLA und während seiner Abschlussarbeit an der Universität von Oxford. Seine Karriere konzentrierte sich auf die Entwicklung von Algorithmen und Sensoren für Gesundheit und menschliche Leistung. Er leitet jetzt das 3D Athlete Tracking-Projekt bei Intel.
Nelson Leung ist der Plattformarchitekt im Sports Performance CoE bei Intel, wo er eine End-to-End-Architektur für innovative Produkte definiert, die die Leistung von Sportlern verbessern. Er leitet auch die Implementierung, Bereitstellung und Produktisierung dieser maschinellen Lernlösungen in großem Maßstab für verschiedene Intel-Partner.
Troy Squillaci ist ein DecSecOps-Ingenieur bei Intel, wo er Kunden professionelle Softwarelösungen durch DevOps Best Practices liefert. Er integriert gerne KI-Lösungen in skalierbare Plattformen in einer Vielzahl von Bereichen.
Paul Min ist Associate Solutions Architect Intern bei Amazon Web Services (AWS), wo er Kunden aus verschiedenen Branchen hilft, ihre Mission voranzubringen und ihre Cloud-Einführung zu beschleunigen. Zuvor arbeitete er bei Intel als Praktikant im Software Engineering, um an der Entwicklung des 3D Athlete Tracking Cloud SDK mitzuwirken. Außerhalb der Arbeit spielt Paul gerne Golf und kann singen gehört werden.
- Coinsmart. Europas beste Bitcoin- und Krypto-Börse.
- Platoblockkette. Web3-Metaverse-Intelligenz. Wissen verstärkt. DEN FREIEN ZUGANG.
- CryptoHawk. Altcoin-Radar. Kostenlose Testphase.
- Quelle: https://aws.amazon.com/blogs/machine-learning/the-intel3d-athlete-tracking-3dat-scalable-architecture-deploys-pose-estimation-models-using-amazon-kinesis-data-streams- und-amazon-eks/
- "
- &
- 000
- 100
- 2021
- 3d
- Über uns
- beschleunigen
- Zugang
- zugänglich
- Nach
- Konto
- über
- Action
- Aktionen
- Zusatz
- Zusätzliche
- Administrator
- Adoption
- AI
- Algorithmus
- Alle
- Amazon
- Amazon Web Services
- unter
- Bienen
- APIs
- Anwendung
- Anwendungen
- angemessen
- Architektur
- Argumente
- zugewiesen
- Partnerschaftsräte
- Athleten
- Attribute
- automatische
- AWS
- Sicherungskopie
- Basketball
- Bevor
- Vorteile
- BESTE
- Best Practices
- Schwarz
- Blog
- Körper
- Box
- bauen
- Building
- rufen Sie uns an!
- Kapazität
- österreichische Unternehmen
- Karriere
- Fälle
- Hauptgeschäftsstelle
- Champion
- Übernehmen
- Entscheidungen
- Kunden
- Cloud
- Code
- Sammlung
- Sammler
- kombiniert
- Komponente
- Berechnen
- Computer
- Konfiguration
- Verbindung
- Berater
- Verbraucher
- KUNDEN
- Container
- Behälter
- enthält
- weiter
- Smartgeräte App
- Koordinate
- Kernbereich
- Dazugehörigen
- erstellen
- erstellt
- schafft
- Erstellen
- Schaffung
- Referenzen
- kritischem
- wichtig
- Strom
- Zur Zeit
- Original
- Kunde
- Kunden
- innovativ, auf dem neuesten Stand
- technische Daten
- Datenbase
- Datenbanken
- Tag
- gewidmet
- tiefer
- liefert
- einsetzen
- Einsatz
- Einsatz
- setzt ein
- Design
- entworfen
- Detail
- detailliert
- Details
- Entdeckung
- entwickeln
- Entwickler:in / Unternehmen
- Entwickler
- Entwicklung
- anders
- unterscheiden
- Direkt
- Direktor
- Entdeckung
- Displays
- Docker
- Tut nicht
- Domains
- nach unten
- im
- leicht
- Endpunkt
- Energie
- Motor
- Ingenieur
- Entwicklung
- Arbeitsumfeld
- Event
- Beispiel
- aufgeregt
- vorhandenen
- erwartet
- ERFAHRUNGEN
- ERKUNDEN
- Merkmal
- Endlich
- Revolution
- Finanzdienstleistungen
- Vorname
- passen
- FLOTTE
- Flexibilität
- flexibel
- konzentriert
- folgen
- Folgende
- folgt
- Format
- vorausschau
- FRAME
- Unser Ansatz
- Funktion
- funktional
- Funktionalität
- Funktionen
- Zukunft
- erzeugen
- Erzeugung
- Generation
- Unterstützung
- Kundenziele
- gut
- GPU
- Abschluss
- Gruppe an
- Gruppen
- Griff
- Handling
- Hardware
- Gesundheit
- gehört
- Hilfe
- Unternehmen
- hilft
- hier
- höher
- Ultraschall
- HTTPS
- human
- Identitätsschutz
- Image
- implementieren
- Implementierung
- wichtig
- das
- Dazu gehören
- Einschließlich
- Krankengymnastik
- Branchen
- Energiegewinnung
- Infrastruktur
- innovativ
- Varianten des Eingangssignals:
- Einsätze
- installieren
- integriert
- Integration
- Intel
- Intelligenz
- Interaktion
- Schnittstelle
- IT
- Job
- Jobs
- Reise
- Wesentliche
- Labor
- starten
- Start
- umwandeln
- lernen
- Niveau
- Bibliothek
- Line
- Liste
- Laden
- Standorte
- Standorte
- Maschine
- Maschinelles Lernen
- gemacht
- halten
- Dur
- MACHT
- Mann
- verwalten
- verwaltet
- Management
- Herstellung
- Karte
- Mapping
- erwähnt
- Methoden
- Metrik
- Minimum
- Ziel
- ML
- Mobil
- Mobile Anwendungen
- Modell
- für
- modulare
- mehr
- vor allem warme
- mehrere
- Namen
- NBA
- notwendig,
- Bedürfnisse
- Anzahl
- Olympiade
- öffnet
- betreiben
- optimiert
- Option
- Auftrag
- Andere
- besitzen
- Oxford
- Paket
- Teil
- besondere
- besonders
- Bestehen
- leidenschaftlich
- Schnittmuster
- Prozentsatz
- Leistung
- Durchführung
- Perspektive
- Stück
- Plattform
- Plattformen
- spielend
- Poesie
- Punkte
- möglich
- Werkzeuge
- größte treibende
- Danach
- früher
- primär
- Prinzip
- Prioritätsliste
- Prozessdefinierung
- anpassen
- Verarbeitung
- Prozessor
- produziert
- Produktion
- Produkte
- Professionell
- Projekt
- die
- bietet
- Zweck
- Angebot
- Roh
- Echtzeit
- erkennen
- Rekord
- Aufzeichnungen
- in Bezug auf
- zuverlässig
- Zugriffe
- erfordern
- falls angefordert
- Voraussetzungen:
- erfordert
- Ressourcen
- Downloads
- Antwort
- Die Ergebnisse
- Führen Sie
- Laufen
- Sicherheit
- San
- Skalierbarkeit
- skalierbaren
- Skalieren
- Skalierung
- Sdk
- Verbindung
- Segmente
- Serverlos
- Dienstleistungen
- kompensieren
- Einstellung
- Form
- ,,teilen"
- Schale
- gezeigt
- ähnlich
- Ähnlich
- Einfacher
- Größe
- So
- Software
- Software als Service
- Softwareentwicklung
- Lösung
- Lösungen
- einige
- Jemand,
- spezialisiert
- Spezifikationen
- Geschwindigkeit
- Sports
- Stapel
- Stufe
- Standard
- Normen
- Anfang
- begonnen
- beginnt
- Bundesstaat
- State-of-the-art
- Status
- Lagerung
- speichern
- Strom
- Streaming
- eingereicht
- Anschließend
- Sommer
- Support
- Unterstützt
- System
- Einnahme
- Team
- Technologie
- Testen
- deswegen
- Durch
- KRAWATTE
- Zeit
- heute
- gemeinsam
- Tokio
- verfolgen sind
- Tracking
- Typen
- typisch
- ucla
- Universität
- University of Oxford
- öffnen
- Aktualisierung
- -
- Nutzer
- Verwendung
- Wert
- Vielfalt
- verschiedene
- Vertikalen
- Video
- Videos
- Seh-
- Netz
- Web-Services
- WHO
- ohne
- Arbeiten
- gearbeitet
- arbeiten,
- Jahr