Skalierbare KI-Inferenz in der Hybrid Cloud ausführen

  • Die Bereiche, in denen Roblox KI und insbesondere generative KI einsetzt, sind in den letzten Jahren rasant gewachsen.

  • Wir befinden uns in der Endphase eines dreistufigen Prozesses zum Aufbau und zur Optimierung der Infrastruktur, die für die Unterstützung dieses Niveaus von KI-Tools erforderlich ist.

  • Wir berichten über die Schritte, die wir unternommen haben, um eine hybride Cloud-Infrastruktur aufzubauen, die ML-Inferenz in großem Umfang unterstützen kann.

Auf der RDC letzte Woche haben wir unser neuestes KI-Inkubationsprojekt angekündigt: die Entwicklung eines multimodalen 3D-Grundmodells für die generative Erstellung. Die Entwicklung von KI für eine ständig aktive, immersive globale 3D-Plattform, die von Millionen von Menschen genutzt wird, erfordert eine enorme Rechenleistung. Anfang 2023 unterstützten wir weniger als 50 Inferenzpipelines für maschinelles Lernen (ML). Heute unterstützt unsere Infrastruktur etwa 250 dieser Pipelines. Wir unterhalten Zehntausende von CPUs und mehr als tausend GPUs in zwei Rechenzentren und unserer Hybrid-Cloud-Infrastruktur, um all diese Modelle auszuführen. Und das ist erst der Anfang.

Wir haben bereits darüber berichtet, wie wir uns Gedanken über generative KI für unsere Creator:innen machen, wie wir KI einsetzen, um die Menschen auf Roblox zu schützen, und wie KI-Übersetzungen Menschen auf der ganzen Welt bei der Kommunikation helfen. Aber das sind nur ein paar Beispiele: Mit etwa 250 Modellen in der Produktion wird praktisch jede Interaktion auf Roblox von einer Form der KI angetrieben. Wenn eine Person Roblox zum ersten Mal besucht und nach einem Erlebnis sucht, dem sie beitreten möchte, ist KI in unseren Empfehlungs- und Suchsystemen im Einsatz. Und wenn die Person ein Erlebnis auswählt und auf die Schaltfläche "Spielen" klickt, ermittelt unser Algorithmus zur Spielersuche den besten Server zum Beitreten.

Millionen von Creator:innen haben bereits Zugang zu unseren generativen KI-Tools. Mit dem Assistenten können sie mit einfachen Aufforderungen Skripte und Actions erstellen, um die Erstellung von Erlebnissen zu beschleunigen. Mit unseren Textur- und Material-Generatoren können sie das Aussehen und den Stil von Objekten schnell ändern und überarbeiten. Und mit der kürzlich eingeführten automatischen Avatar-Erstellung treten wir in die Ära der generativen 4D-KI ein, die den Prozess der Erstellung eines Avatars vereinfacht und den Creator:innen stundenlange Arbeit erspart. Mit Stand August 2024 wurden etwa 8% der UGC-Avatarkörper, die auf Roblox veröffentlicht wurden, mit der automatischen Avatar-Erstellung geschaffen.

Wir treten nun in die letzte Phase eines dreistufigen Prozesses ein, der bereits seit mehreren Jahren läuft. Diese Reise begann Ende 2021. Damals führte das Fehlen einer einheitlichen Roblox-KI-Plattform dazu, dass die Entwicklerteams ihre eigenen Miniplattformen entwickelten und unterschiedliche Frameworks auswählten. Die Teams, die wichtige Komponenten wie unseren Avatar-Marktplatz, die Startseite und die Suche entwickelten, bauten jeweils ihre eigenen Funktionen. Anstatt einen zentralen Funktionsspeicher zu nutzen, setzten die Teams ihre Lösungen ad hoc zusammen. Außerdem musste jedes Team seine eigenen Optimierungen entwickeln und die Herausforderungen der Skalierung von Inferenzen unabhängig voneinander angehen, ohne Unterstützung durch eine zentrale Plattform. Dieser fragmentierte Ansatz machte deutlich, dass wir dringend eine kohärente, zentralisierte Plattform brauchten, um unsere Prozesse zu optimieren und die Effizienz in allen Bereichen zu steigern.

Phase eins: Aufbau einer soliden Grundlage für ML

Wir entschieden uns frühzeitig für Kubeflow, um die Vorteile der darin enthaltenen Kernbausteine für ML zu nutzen, darunter Notebooks, Pipelines, Offline-Experimente und Model Serving. Da wir noch einen Funktionsspeicher benötigten, entschieden wir uns zunächst für eine Lösung eines Drittanbieters. Um ML für die Roblox-Ingenieur:innen zugänglicher zu machen, haben wir roblox-ml entwickelt, eine Python-Bibliothek, die die Komplexität der Bereitstellung eines Modells in der Produktion weiter reduziert.

Wir haben Jupyter-Notebooks verwendet, um eine für die Iteration von Modellen optimierte Entwicklungsumgebung mit Servern für den erforderlichen Datenzugriff und GPU-Ressourcen bereitzustellen. Um einen Trainingsjob zu skalieren oder ihn regelmäßig auszuführen, um ein Modell neu zu trainieren, mussten wir in der Regel eine Pipeline schreiben. Unsere roblox-ml-Bibliothek ermöglichte es den Ingenieur:innen, Notebook-Code einfach in Kubeflow-Pipelines umzuwandeln, indem sie die Laufzeitumgebung und den Quellcode als Snapshot nutzen konnten, ohne Docker-Images erstellen zu müssen, und indem sie Rechenressourcen mit Prioritäten auswählten, Benachrichtigungen einrichteten und die Authentifizierung verwalteten.

Modelle sind nur dann effektiv, wenn sie die richtigen Funktionen zur richtigen Zeit haben. Unser Funktionsspeicher vereinfachte den Prozess zur Definition neuer Funktionen und förderte gleichzeitig die gemeinsame Nutzung von mehr als 900 Funktionen in über 100 Funktionsdiensten. Dies ermöglichte es den Teams, neue Modelle schneller zu erstellen und einzusetzen, als unsere Sammlung von Funktionen wuchs.

Nachdem unsere ML-Pipelines-Plattform funktionsfähig und stabil war, verzeichneten wir eine steigende Nachfrage nach Online-Inferenzunterstützung – allen voran Personalisierung, Suche und Marktplatz. Während wir die Batch-Inferenz als Ausgangspunkt für ausgereifte ML-Operationen empfehlen, haben wir unsere Modellregistrierungs- und Serving-Plattform entwickelt, um Inferenzen in Echtzeit zu unterstützen. Mithilfe unserer Modellregistrierung können Roblox-Ingenieur:innen roblox-ml nutzen, um Modelle hoch- und herunterzuladen, die mit Tags versehen und automatisch versioniert werden, um Rückverfolgbarkeit, Rollbacks und A/B-Tests zu erleichtern. Unsere Personalisierungsmodelle werden z.B. täglich trainiert und eingesetzt, und wir führen oft etwa 20 A/B-Tests parallel durch. Für unsere Serving-Plattform haben wir KServe mit dem Triton Inference Server als zugrunde liegende Modell-Serving-Laufzeitumgebung verwendet, weil sie sehr leistungsfähig ist und mehrere ML-Frameworks sowohl auf GPUs als auch auf CPUs unterstützt.

Ob im Batch- oder Online-Betrieb, die Modelle bei Roblox werden vor der Veröffentlichung ausgiebig getestet. Dazu gehören Offline-Experimente, Schattentests und A/B-Tests. Nach der Freigabe werden die Modelle kontinuierlich überwacht, um sicherzustellen, dass sie die erwartete Leistung erbringen, sowohl im Betrieb (z.B. Latenzzeit) als auch in Bezug auf die Genauigkeit. Im Rahmen unseres Engagements für Sicherheit und Netiquette bewerten menschliche Moderator:innen auch alle gemeldeten Unstimmigkeiten bei den Inferenzen, was dazu beiträgt, dass wir wichtige Entscheidungen richtig treffen und den Trainingsdatensatz für unsere Modelle verbessern.

Phase zwei: Vorbereitung auf die Skalierung der Inferenzen

Anfang 2023 sahen wir ein enormes Potenzial für generative KI, um die Erstellung auf Roblox zu beschleunigen. Um dieses Potenzial voll auszuschöpfen, haben wir einen Großteil des Jahres 2023 damit verbracht, die Leistung und Effizienz unserer ML-Trainings- und Inferenzinfrastruktur zu optimieren. Dank dieser Optimierungen konnten wir die Rechenkosten für die Erstellung von CLIP-Einbettungen erheblich senken. Zunächst haben wir unsere verteilten Trainingssysteme erweitert, um das Training auf großen Datensätzen und die Ausführung von Modellen mit Milliarden von Parametern auf mehreren Arbeiterknoten zu ermöglichen.

Als wir begannen, einen verteilten Arbeitsablauf zu entwickeln, wurde uns klar, dass unser bestehendes System für die Offline-Inferenz die Wachstumsrate, die wir langfristig sehen wollten, nicht unterstützen würde. Unser ursprüngliches System war für Echtzeit-Inferenzen ausgelegt, bei denen die Ein- und Ausgabedaten sequentiell sind. Obwohl es für unsere anfänglichen Bemühungen gut funktionierte, war es nicht in der Lage, parallele Aufgaben oder mehrstufige Verarbeitungen zu unterstützen, und es war auch nicht ressourceneffizient genug, um die von uns benötigte Größe zu unterstützen. Außerdem mussten die Ingenieur:innen ihre eigene Logik für das Chunking von Daten und die Fehlerbehandlung schreiben, was mit zunehmender Größe unserer Inferenzanforderungen immer zeitaufwändiger wurde.

Um diese Herausforderungen zu bewältigen, haben wir die Unterstützung für Ray hinzugefügt, ein Open-Source-Computing-Framework, das die Skalierung von Batch-Inferenz-Workloads erleichtert. Durch den Aufbau einer Ray-basierten verteilten Task-Pipeline für Batch-Inferenzen konnten wir die Ressourcennutzung optimieren, eine mehrstufige Verarbeitung ermöglichen und eine robuste Task-Parallelität sowie eine höhere Fehlertoleranz bieten. Darüber hinaus können Ingenieur:innen mit der Ray Data-Bibliothek eine Pipeline mit Streaming-Ausführung in nur wenigen Zeilen definieren, was die Geschwindigkeit und Effizienz der Entwickler:innen erhöht. Wir haben bisher enorme Effizienzgewinne durch den Einsatz von Ray für Batch-Inferenzen erzielt.

Da unser Inferenz-Bedarf weiter wuchs, verlagerten wir die gesamte CPU-Inferenz in unsere eigenen Rechenzentren, wodurch wir eine bessere Kontrolle über die Latenz und die Datenschutzeinstellungen haben. Wir verarbeiten täglich etwa 1 Milliarde Personalisierungsanfragen für unsere 79,5 Millionen täglich aktiven Benutzer:innen (Stand: 30. Juni 2024). Die Verlagerung dieses Workloads in unsere eigenen Rechenzentren hat uns geholfen, unsere Effizienz aufrechtzuerhalten, ohne das Erlebnis für unsere Benutzer:innen zu beeinträchtigen. Um Inferenzkosten zu sparen, speichern viele Systeme die Anfragen im Cache – dies hätte zu veralteten Empfehlungen geführt, da viele Benutzer:innen die Roblox-Startseite mehrmals am Tag besuchen. Dies verbesserte auch unsere Effizienz, da wir so besser optimieren konnten, wo die Inferenzen ausgeführt werden, und die Workloads verteilen konnten, um die benötigten Rechenressourcen zu reduzieren.

Als wir weiter skalierten, wurde uns klar, dass wir eine maßgeschneiderte Funktionsspeicherlösung brauchten, die einen hohen Durchsatz, geringe Latenzzeiten und Kosteneffizienz bietet und gleichzeitig schnelle Iterationen für verschiedene Dienste ermöglicht. Bestehende Lösungen von Drittanbietern erfüllten diese Anforderungen nicht, also entwickelten wir unseren eigenen Funktionsspeicher, der auf dem Open-Source-Projekt Feast aufbaut. Unser Funktionsspeicher bot eine eigene domänenspezifische Sprache zur Definition von Transformationen für Batch- und Streaming-Funktionen. Flink wurde als Stream-Processing-Engine eingesetzt, um Echtzeitfunktionen zu ermöglichen, die für Modelle, die möglichst aktuelle Informationen enthalten sollten, entscheidend waren. Am anderen Ende des Spektrums befanden sich Funktionen, die aus der Batch-Verarbeitung einer riesigen Anzahl von 3D-Objekten abgeleitet werden mussten, indem die Roblox-Game-Engine in einer verteilten Umgebung erneut ausgeführt wurde. Unser Funktionsspeicher nimmt jetzt etwa 30 Milliarden Datensätze auf und liefert etwa 70 Milliarden Datensätze pro Tag mit einer P99-Latenz von 50 ms – und er unterstützt mehr als 100 Funktionsdienste.

Die Verwendung von Einbettungen durch Modelle hat ebenfalls rasant zugenommen, angetrieben durch die wachsende Nachfrage nach semantischem Verständnis, sei es durch NLP, Computer Vision oder Empfehlungssysteme. Das hat uns dazu motiviert, eine Vektordatenbank zu entwickeln, um Vektoren als hochdimensionale Punkte effizient zu speichern und abzurufen. Die Vektordatenbank ermöglichte die schnelle Suche nach den nächsten Nachbarn, um Funktionen wie die multimodale Suche und die Erkennung von Inhaltsverletzungen zu unterstützen.

Als immer mehr Teams ML-Modelle einsetzten, wollten wir Effizienzlösungen finden und den Ingenieur:innen helfen, schneller erfolgreich zu sein, also gründeten wir unser eigenes Ground-Truth-Team. Dieses Team hilft den Ingenieur:innen, ihre eigene Pipeline für die Datensatzproduktion zu entwerfen, Daten mit menschlichen Auswertern zu trainieren und zu validieren und qualitativ hochwertige Daten zu liefern. Dies hat uns geholfen, den Aufbau einer Datenpipeline und die Validierung von Datensätzen sowie das Format, in dem die Daten geliefert, verfolgt und überwacht werden, zu standardisieren.

Phase drei: Operationalisierung von massiver Inferenz

Durch den Start des Roblox-Assistenten ist die Zahl der verarbeiteten Token auf 1,5 Milliarden pro Woche gestiegen. Außerdem haben wir neue Funktionen veröffentlicht, darunter die Echtzeit-KI-Chat-Übersetzung und unser Sprach-Sicherheitsmodell (jetzt Open Source), die die Nachfrage nach Inferenzkapazitäten deutlich erhöht haben. Wir haben zwei Kernprojekte in Angriff genommen, um die Entwicklung von KI-Anwendungen zu beschleunigen: unser ML-Gateway und eine Plattform für den Betrieb großer Sprachmodelle (LLMOps), die auf dem vLLM-Projekt basiert. Zusammen werden diese beiden Projekte die Grundlage für die nächste Generation von ML bei Roblox bilden.

Wir haben unser einheitliches ML-Gateway entwickelt, um den Zugriff auf alle großen Modelle, sowohl Open-Source- als auch intern entwickelte, in einer Vielzahl von Umgebungen zu zentralisieren, einschließlich CPUs und GPUs in der Cloud und vor Ort. Unser Ziel war es, ein effizientes, optimiertes System für die Verwaltung von KI-Ressourcen im gesamten Unternehmen zu schaffen. Im Backend bietet das Gateway eine gemeinsame API-Schnittstelle, benutzerfreundliche Konfigurationsoptionen und eine effiziente Ressourcennutzung für alle Modelle, die wir eingesetzt haben.

Das Gateway verbesserte die Ausfallsicherheit unserer Inferenzdienste, indem es eine zentrale Drosselung nach Tokenanzahl für generative KI-Workloads und einen latenzbewussten Lastausgleich zwischen den Regionen ermöglichte. Außerdem erhöht es die Sicherheit durch die zentrale Verwaltung von API-Schlüsseln, ermöglicht eine umfassende Nachverfolgung der Nutzung und die potenzielle Implementierung von Berechtigungen und lässt sich für eine bessere Beobachtbarkeit in Überwachungstools integrieren. All diese Funktionen werden uns dabei helfen, die Nutzung großer Modelle zu optimieren, Kosten zu senken und den Ingenieur:innen von Roblox wertvolle Erkenntnisse zu liefern.

Darüber hinaus haben wir vLLM als primäre Inferenz-Engine für LLMs eingeführt und nutzen die Hochleistungsfähigkeiten von vLLM, um KI-Anwendungen auf Roblox zu betreiben. Seit wir auf vLLM umgestiegen sind, haben wir eine fast zweifache Verbesserung der Latenz und des Durchsatzes erreicht und verarbeiten derzeit etwa 4 Milliarden Token pro Woche.

Die Entscheidung für vLLM steht im Einklang mit unserem Engagement für den Einsatz von Open-Source- und Spitzentechnologien, die effizient skaliert werden können, um den Anforderungen unserer riesigen Benutzerbasis und unserer vielfältigen Erlebnisse gerecht zu werden. Roblox leistet einen aktiven Beitrag zum Open-Source-Projekt vLLM und war federführend bei der Entwicklung der multimodalen Unterstützung für vLLM, die es der Engine ermöglicht, nicht nur Text, sondern auch Bilder und in Zukunft möglicherweise andere Datentypen zu verarbeiten. Außerdem haben wir spekulative Dekodierungstechniken implementiert, um die Inferenzleistung weiter zu verbessern und eine schnellere und effizientere Verarbeitung von Sprachaufgaben zu ermöglichen.

Mit ML-Gateway und vLLM können wir die Hunderte von ML-Pipelines, die bei Roblox im Einsatz sind, effizient unterstützen – und die Inferenzleistung weiter steigern, da die Nachfrage nach KI-gestützten Funktionen weiter steigt. Und wir sind mit dieser Arbeit noch lange nicht fertig. Wir haben große Pläne für die Zukunft der KI bei Roblox. Wir arbeiten an neuen KI-gesteuerten Tools, um die Erstellung von Spielen sowohl für Anfänger:innen als auch für Expert:innen effizienter zu machen. Wie immer arbeiten wir daran, die Leistung und Effizienz unserer Infrastruktur zu verbessern, um die KI-Tools, die wir und unsere Creator:innen täglich nutzen, besser zu unterstützen.

Unser Engagement für Open Source

Wir haben es dank mehrerer erfolgreicher Open-Source-Projekte bis hierher geschafft. Ein Großteil unseres technischen Stacks basiert auf den oben erwähnten Open-Source-Technologien.

Wir wollen ein starker Partner in der Open-Source-KI-Community sein und einen Teil unserer eigenen Open-Source-Technologie beisteuern. Vor kurzem haben wir unser erstes Open-Source-Modell vorgestellt – unseren Voice Safety Classifier – und arbeiten derzeit an unserem ML-Gateway, in der Hoffnung, auch dieses Open Source zu machen. Wir sind der Meinung, dass die Zukunft der KI Offenheit und Transparenz beinhalten sollte, und wir freuen uns, ein aktives Mitglied dieser Community zu sein.