Wie war dieser Inhalt?
Wie Snorkel AI durch die Skalierung von Machine-Learning-Workloads mithilfe von Amazon EKS Kosteneinsparungen von ĂŒber 40 % erzielte
Startups fĂŒr Machine Learning (ML) verwenden hĂ€ufig viel Rechenleistung, da sie groĂe Modelle mithilfe von High-End-GPUs trainieren und sie fĂŒr Inferenzen in groĂem Umfang einsetzen. AWS Startups arbeitet von der GrĂŒndung bis zum Börsengang mit Startups zusammen und hat Tausenden von GrĂŒndern und Innovatoren im Bereich der kĂŒnstlichen Intelligenz (KI) geholfen, ihr Unternehmen auf Amazon Elastic Kubernetes Service (Amazon EKS) aufzubauen. Amazon EKS ist eine beliebte Wahl fĂŒr die Erstellung und das Hosten von ML-Modellen, da es die FlexibilitĂ€t von Kubernetes mit der Sicherheit und WiderstandsfĂ€higkeit eines von AWS verwalteten Dienstes verbindet, der fĂŒr die Erstellung hochverfĂŒgbarer containerisierter Workloads optimiert ist.
Snorkel AI ist ein solches Unternehmen, das von Amazon EKS profitiert. Snorkel AI versetzt Fortune-500-Unternehmen, Bundesbehörden und KI-Innovatoren in die Lage , Basismodelle (FMs) und groĂe Sprachmodelle (LLMs) zu erstellen, anzupassen und zu destillieren, damit sie mit hoher Genauigkeit auf domĂ€nenspezifischen DatensĂ€tzen arbeiten. Mithilfe des datenzentrierten Ansatzes von Snorkel fĂŒr die KI-Entwicklung haben Unternehmen produktionsreife KI-Dienste fĂŒr AnwendungsfĂ€lle wie die Bearbeitung von VersicherungsansprĂŒchen, die Verbreitung von Finanzdaten, die Analyse von klinischen Studien und die Beschleunigung des proaktiven Bohrlochmanagements fĂŒr Offshore-Bohrungen entwickelt.
In den letzten Monaten hat das Snorkel-Team hart daran gearbeitet, die einzigartigen Herausforderungen beim Entwurf einer effizienten Infrastruktur zur UnterstĂŒtzung von ML-Entwicklungsworkloads zu bewĂ€ltigen, ohne die Infrastrukturkosten zu erhöhen, die Geschwindigkeit der Entwickler zu verringern oder die Benutzererfahrung zu beeintrĂ€chtigen. Ihr oberstes Ziel war es, die Cluster-Rechenkosten fĂŒr Snorkel Flow, ihre End-to-End-ML-Plattform, um mehr als 40 % zu senken.
Ein Ăberblick ĂŒber Snorkel Flow
Die KI-Datenentwicklungsplattform Snorkel Flow von Snorkel ermöglicht es Datenteams, KI-Anwendungen schnell zu erstellen, indem sie eine iterative Schleife aus programmatischer Kennzeichnung, schnellem Modelltraining und Fehleranalyse einsetzen. Jedes Projekt beginnt, wenn Benutzer eine kleine Anzahl von Kennzeichnungsfunktionen erstellen.
Labeling-Funktionen verwenden einfache Heuristiken, externe Datenbanken, Legacy-Modelle oder sogar Aufrufe groĂer Sprachmodelle, um Labels auf unbeschriftete Datenmengen anzuwenden, die auf verschlĂŒsselter Expertenintuition basieren. Der schwache Ăberwachungsalgorithmus der Plattform kombiniert diese regelbasierten Funktionen, um die wahrscheinlichste Bezeichnung fĂŒr jeden Datensatz zu ermitteln. Die Benutzer trainieren dann ein einfaches Modell auf der Grundlage dieser probabilistischen Datenpunkte und bewerten die Auswirkungen der einzelnen Beschriftungsfunktionen. In der Analysephase untersuchen Benutzer Teile der Daten, bei denen das Modell unterdurchschnittlich abschneidet. AnschlieĂend erstellen oder Ă€ndern sie Beschriftungsfunktionen, trainieren ein weiteres Schnellmodell und setzen die Schleife fort. Wenn Benutzer mit der QualitĂ€t ihrer Labels zufrieden sind, erstellen sie ein endgĂŒltiges Modell auf einer Architektur aus dem Modellzooâvon der logistischen Regression bis hin zu FMsâund exportieren es zur Bereitstellung.
Aufgrund der Art dieses Workflows erlebt die Infrastruktur von Snorkel Flow unterschiedliche Perioden mit hoher Rechenauslastung. Die Betriebskosten stiegen natĂŒrlich, je gröĂer der Kundenstamm und die Möglichkeiten der ML-Produkte von Snorkel Flow wurden. Um ein effizientes Wachstum zu erreichen, wollte Snorkel herausfinden, wie die Margen erhöht werden können, wĂ€hrend gleichzeitig modernste ML-Software eingesetzt wird. Snorkel implementierte die folgenden Methoden, um die Rechenkosten fĂŒr Cluster um mehr als 40 % zu senken.
Lösungen fĂŒr die Cloud-KostenoptimierungÂ
Software-as-a-Service (SaaS)-Startups haben hÀufig die Möglichkeit, ihre Cloud-Ausgaben zu optimieren. Es ist wichtig, die einzigartigen Faktoren zu verstehen, die diese Kosten beeinflussen.
FĂŒr Snorkel gab es zwei signifikante Faktoren:
- ML-Entwicklungsworkloads erfordern hĂ€ufig spezielle und teure Hardware wie GPUs. In der Regel sind diese Workloads von Natur âsprunghaftâ.
- Fortune-500-Unternehmen und groĂe Bundesbehörden nutzen Snorkel, darunter groĂe Finanzinstitute mit hoch entwickelten IT-Abteilungen, die spezifische Bereitstellungs- und Datenschutzanforderungen haben, mithilfe einer containerisierten Plattform.
Das Team von Snorkel ist sehr daran interessiert, Systeme zu entwickeln, die eine effiziente Skalierung ohne einen linearen Anstieg der Infrastrukturkosten ermöglichen. Aus diesem Grund entwickelte Snorkel eine umfassende Autoscaling-Lösung, die auf seine ML-Workloads auf Amazon EKS zugeschnitten ist, um Bedenken hinsichtlich der Cloud-Kosten auszurÀumen. Diese Lösung beschleunigte nicht nur Workloads, die Burst-Computing erfordern, sondern erreichte auch ihre Ziele zur Kostensenkung.
Neben der Autoscaling-Lösung trugen unter anderem folgende Strategien zur Senkung der Cloud-Kosten um ĂŒber 40 % bei:
- Zusammenarbeit mit technischen FĂŒhrungskrĂ€ften und dem AWS-Team bei der EinfĂŒhrung von Savings Plans durch Optimierungen der Cloud-Konfiguration.
- Richtige Dimensionierung der Ressourcen durch Ăberwachung der Knotenauslastung mit Prometheus und Beratung mit Backend-Ingenieuren, um den Bedarf an Plattformkomponenten zu ermitteln.
- Umstellung auf kostengĂŒnstige Typen virtueller Maschinen (VM) auf Amazon EKS und Nutzung von Amazon Elastic Compute Cloud (Amazon EC2)-Instances mit mehreren GPUs fĂŒr ein besseres Preis-Leistungs-VerhĂ€ltnis.
- EinfĂŒhrung interner ProzessĂ€nderungen, bei denen Ingenieure mit Teams mit Kundenkontakt zusammenarbeiteten, um ungenutzte Rechenleistung zu minimieren.
In diesem Beitrag beschreibt Snorkel den Prozess zur BewĂ€ltigung dieser Skalierungsherausforderungen, um den Entwurf einer besseren Infrastruktur fĂŒr ML-Systeme zu erleichtern. Wenn Sie neu bei Kubernetes sind, lesen Sie den Beitrag EinfĂŒhrung in Kubernetes von Snorkel, um mehr ĂŒber die Grundlagen und das Machine Learning auf Kubernetes zu erfahren: Weisheit bei Snorkel, um mehr ĂŒber ihre bisherige Reise mit Kubernetes zu erfahren.
So sieht Snorkel Flow auf AWS aus
In der Praxis folgt die Interaktion von Snorkel Flow mit AWS der folgenden Reihenfolge. Da die Snorkel-Flow-Plattform stark von Containern abhÀngig ist, verlief die Migration zu AWS nahezu reibungslos.
- Benutzer erreichen ihre Snorkel-Flow-Instance ĂŒber ihren Webbrowser, der einer Regel in Amazon Route 53 zugeordnet ist.
- Route 53 leitet die Anfrage an einen Application Load Balancer weiter.
- Der Application Load Balancer leitet die Anfrage dann an Snorkel-Flow-Pods weiter, die auf einem gemeinsam genutzten EKS-Cluster ausgefĂŒhrt werden. Snorkel stellte den EC2-Instance-Typ von m5 auf m6a um, um die Kosten zu optimieren. Dies fĂŒhrte zu einer Recheneinsparung von 10 % bei vernachlĂ€ssigbaren LeistungseinbuĂen, basierend auf den Kosten pro Stunde fĂŒr dieselbe CPU und denselben RAM.
- DarĂŒber hinaus wurde ein Upgrade von einer einzelnen g4dn.8xlarge-GPU-Instance auf eine g4dn.12xlarge-Multi-GPU-Instance durchgefĂŒhrt, wodurch 4x so viele GPU-Pods bedient werden konnten.
- Jede Snorkel-Flow-Instance verwendet ein Amazon Elastic File System (Amazon EFS)-Volume, um Dateien auf der Festplatte zu speichern.
- Eine selbst gehostete Redis-Warteschlange auf einem Pod auf der EC2-Instance enthÀlt die eingehenden Jobs und wartet darauf, dass Worker-Pods sie annehmen.
- EKS-Metriken werden an Amazon CloudWatch ĂŒbertragen, und benutzerdefinierte Skripte ĂŒberwachen die Protokolle auf Cluster-Leistungsanomalien.
Diese Architektur hat Snorkel-Flow-Benutzern ein stabiles und flottes Erlebnis beschert.

Skalierung ĂŒberdenken
Vor der in Abbildung 1 beschriebenen Architektur verwendeten frĂŒhe Iterationen der Infrastruktur von Snorkel feste Ressourcen. Die Benutzer von Snorkel teilten mit, dass die AusfĂŒhrung dieser ĂŒberlasteten Workloads zu lange dauern könnte und sich daher negativ auf ihre Benutzererfahrung auswirkte.
Die manuelle Skalierung von Rechenressourcen erwies sich als nicht skalierbar und fehleranfĂ€llig, was zu hohen Cloud-Kosten fĂŒhrte, auch in Zeiten geringer Nutzung. Es war das Schlimmste aus beiden Welten: niedrige Cloud-Kosteneffizienz und Leistung, die langsamer als nötig war.
Um diesen Herausforderungen zu begegnen, implementierte Snorkel Autoscaling auf mehreren Ebenen in seiner Infrastruktur, wie in den folgenden Abschnitten beschrieben.
Entwurf einer skalierbaren Infrastruktur unter BerĂŒcksichtigung der Kosteneffizienz
Die Kubernetes-Distribution von Snorkel Flow umfasst eine Reihe von Bereitstellungen, die in einem EKS-Cluster ausgefĂŒhrt werden, der Pods enthĂ€lt, auf denen verschiedene Komponenten der Plattform ausgefĂŒhrt werden.
Wie in Abbildung 2 dargestellt, hat das Snorkel-Team ein neues Konzept fĂŒr Kubernetes-Pods eingefĂŒhrt, um die besonderen Herausforderungen bei der Arbeit mit Bursty-Compute-Workloads zu bewĂ€ltigen: die semantische Kategorisierung als âfestâ oder âflexibelâ.
- Pods, die repariert sind, können nicht sicher von Knoten zu Knoten verschoben werden, entweder weil sie wichtige In-Memory-Status verlieren (z. B. laufende RechenauftrĂ€ge ohne Checkpointing) oder um vermeidbare Ausfallzeiten fĂŒr grundlegende Plattformkomponenten (z. B. den Orchestrator fĂŒr den Ray-Cluster) zu minimieren.
- Pods, die flexibel sind, können sicher auf einen neuen Knoten verschoben werden. Diese Unterscheidung ist im Zusammenhang mit der automatischen Skalierung von Bedeutung, da beim Downscaling von Knoten Pods verschoben werden, die nicht ausgelastet sind, wenn diese beendet werden.

Dieses feste/flexible Framework bietet Snorkel eine domÀnenspezifische Möglichkeit, automatisiertes Cluster-Downscaling zu ermöglichen, sodass sie den Cluster-Autoscaler auf Amazon EKS aktivieren können, ohne dass ihre Finanzabteilung ihnen jede Stunde eine Nachricht sendet.
Der ursprĂŒngliche Ansatz von Snorkel bestand darin, podDisruptionBudgets auf dem EKS-Cluster bereitzustellen, um zu verhindern, dass der Cluster-Autoscaler tagsĂŒber flexible Pods bewegt und feste Pods ĂŒberhaupt bewegt. Dieser Ansatz war zwar effektiv, lieĂ das Snorkel-Team jedoch unzufrieden, da er weitaus weniger Knoten herunterskalierte, als theoretisch optimal war.
Um diesem Problem zu begegnen, setzte Snorkel auf eine Optimierung der Pod-Planung, bei der feste Pods in eine kleine feste Gruppe von Knoten isoliert wurden. Dabei wurden flexible Pods und Worker-Pods (die als feste Pods betrachtet werden, aber aufgrund der Autoskalierung der Worker-Knoten kurzlebig sind) in der verbleibenden flexiblen Gruppe von Knoten eingeplant.
Diese Ănderungen ermöglichten es Snorkel, die flexiblen Knoten nachts effizient zu verkleinern, wenn es sicher war, die flexiblen Pods zu bewegen und die groĂe Mehrheit der Worker-Pods herunterzuskalieren.
Durch die effiziente Herunterskalierung der ĂŒberwiegenden Mehrheit der Knoten des Clusters (d. h. der flexiblen Knoten) konnte Snorkel sein Ziel erreichen, die Cloud-Kosten fĂŒr das Hosten von Snorkel Flow um ĂŒber 40 % zu senken.
Weitere Informationen zur Autoscaling-Lösung von Snorkel
Snorkel unterteilt die Implementierung der im vorherigen Abschnitt beschriebenen Lösung in drei aufeinander folgende Schritte:
- ZunĂ€chst implementierte Snorkel âWorker Autoscalingâ, einen benutzerdefinierten Redis-basierten Autoscaling-Dienst, der es ihren Worker-Pods ermöglicht, basierend auf Jobs in den Warteschlangen der Mitarbeiter hoch- und herunterzuskalieren.
- Zweitens implementierten sie das âCluster-Autoscalingâ, indem sie ihre Kubernetes-Bereitstellungen so umkonfiguriert haben, dass der Kubernetes-Cluster-Auto-Scaler die Knoten nicht nur herunterskalieren, sondern auch hochskalieren kann.
- Drittens implementierte Snorkel âOptimierungen beim Herunterskalieren von Knotenâ, indem feste Pods zu einer kleinen Gruppe fester Knoten gruppiert wurden, um zu verhindern, dass feste Pods das Herunterskalieren der verbleibenden Knoten stören.
Worker-Autoscaling
Die Snorkel-Flow-Plattform abstrahiert die Rechenleistung in ein Paradigma, in dem Jobs in Redis-Warteschlangen warten und Worker als Prozesse in Worker Pods laufen.
Snorkel implementierte eine Worker-Autoscaling-Lösung (Abbildung 3) fĂŒr Worker-Pods, indem es eine wiederkehrende Funktion in der Backend-API von Snorkel Flow ausfĂŒhrte. Diese Funktion ĂŒberprĂŒft alle paar Sekunden, ob der Kubernetes-Cluster und Redis sowohl fĂŒr das Hoch- als auch fĂŒr das Herunterskalieren in Frage kommen.
Wenn Jobs in einer oder mehreren relevanten Redis-basierten Warteschlangen warten, fordert die Funktion die Kubernetes-API auf, zusĂ€tzliche Worker-Pods fĂŒr die Verarbeitung dieser Jobs bereitzustellen. Wenn die Redis-Warteschlange leer ist und keine laufenden Jobs in der Jobregistrierung vorhanden sind, wird die Kubernetes-API aufgefordert, die Worker-Pods zu löschen, um reservierte CPU- und RAM-Ressourcen freizugeben.

Wie in Abbildung 4 dargestellt, wurden die Worker-Pods von Snorkel Flow mit der EinfĂŒhrung dieser Worker-Autoscaling-Implementierung kurzlebig und erschienen nur dann im Cluster, wenn Jobs verarbeitet werden mussten.

Cluster-Autoscaling
Die Ressource PodDisruptionBudget schĂŒtzt bestimmte Pods vor Störungen (z. B. freiwilligen Neustarts), indem sie die Angabe der maximalen Anzahl von Pod-Replikaten ermöglicht, die zu einem bestimmten Zeitpunkt nicht verfĂŒgbar sein können. Wie in Abbildung 5 dargestellt, wird durch die explizite Festlegung dieses Werts fĂŒr eine Bereitstellung auf 0 sichergestellt, dass das Cluster-Autoscaling die Knoten, auf denen die Pods der Bereitstellung ausgefĂŒhrt werden, nicht herunterskaliert.

Die Implementierung dieser Ressource auf gehosteten Snorkel-Flow-Instances ermöglichte es dem Cluster-Autoscaler, nicht ausgelastete Knoten sicher herunterzuskalieren. Die Kosteneinsparungen, die Snorkel erzielte, waren jedoch marginal â sie waren immer noch nicht in der Lage, den GroĂteil ihrer Knoten herunterzuskalieren, da alle Snorkel-Flow-Pods durch ein zugehöriges podDisruptionBudget geschĂŒtzt waren.
Bei nĂ€herer Betrachtung stellte das Team von Snorkel fest, dass dieser Schutz nicht immer existieren muss. Die Workloads sind sehr hoch und die meisten Benutzerinteraktionen mit Snorkel Flow finden wĂ€hrend des Arbeitstages des Kunden statt, sodass es sicher ist, diesen Schutz auĂerhalb der GeschĂ€ftszeiten zu lockern. Ăhnlich wie beim Worker-Autoscaling implementierte Snorkel eine wiederkehrende Funktion, die podDisruptionBudgets fĂŒr die flexiblen Pods einer Instance ĂŒber Nacht âausschalteteâ, indem die maximale Anzahl nicht verfĂŒgbarer Pod-Replikate von 0 auf 1 gesetzt wurde (Abbildung 6). Die frĂŒhere Lösung zum Autoscaling von Workern in Kombination mit dem ClusterAutoscaler- und der PodDisruptionBudget-Feature war in der Lage, viel mehr unausgelastete Worker-Knoten herunterzuskalieren als zuvor. Kunden, die Snorkel Flow in ihrer Cloud einsetzen, können dies nach Bedarf konfigurieren.

Optimierungen beim Herunterskalieren von Knoten
Trotz dieser Verbesserungen stellte Snorkel fest, dass die Mehrheit der nicht ausgelasteten Knoten ĂŒberhaupt nicht herunterskaliert wurde.
Bei weiteren Untersuchungen stellte Snorkel fest, dass das Problem darauf zurĂŒckzufĂŒhren war, dass feste und flexible Pods denselben Knoten besetzen. Dies war problematisch, weil ein fester Pod, der pseudozufĂ€llig einem Knoten zugewiesen wurde, der flexible Pods enthĂ€lt, diesen Knoten âanheftenâ und so verhindern wĂŒrde, dass er herunterskaliert wird, selbst wenn er nicht ausgelastet ist. Diese mangelnde Kontrolle ĂŒber die Planung fester Pods fĂŒhrte zu Perioden, in denen die ĂŒberwiegende Mehrheit der Knoten des Clusters nicht herunterskaliert werden konnte, obwohl sie viel mehr Rechenleistung zur VerfĂŒgung stellten, als zu diesem Zeitpunkt benötigt wurde.
Snorkel nutzte die Kubernetes-Ressource podAffinities, um dieses Problem zu beheben. Damit konnten sie einschrĂ€nken, auf welchen Knoten ein Pod ausgefĂŒhrt werden kann, basierend auf den Labels anderer Pods, die bereits auf einem bestimmten Knoten laufen. Sie fĂŒgten den Pods Labels hinzu, um zwischen festen und flexiblen Pods zu unterscheiden und fĂŒgten ihrer Bereitstellungskonfiguration eine podAntiAffinity hinzu, um sicherzustellen, dass feste Pods nicht auf Knoten geplant werden, auf denen flexible Pods ausgefĂŒhrt werden, und umgekehrt.
Diese Implementierung von podAffinities ermöglichte es Snorkel AI, Knoten in zwei funktionale Gruppen aufzuteilen: die feste Gruppe von Knoten, die feste Pods enthalten, die niemals sicher zwischen Knoten verschoben werden können (z. B. Redis aufgrund des Caches), und die flexible Gruppe von Knoten, die âflexibleâ Pods enthĂ€lt, die entweder kurzlebig sind (wie Worker-Pods) oder auĂerhalb der GeschĂ€ftszeiten (z. B. ĂŒber Nacht) sicher bewegt werden können.
Obwohl dies mit manuellem Eingreifen bei der Plattformwartung möglich ist, kann Snorkel die festen Knoten nicht automatisch herunterskalieren. Diese Lösung ermöglicht es ihnen jedoch, die flexiblen Knoten automatisch herunterzuskalieren, da sie nun die unbeweglichen Pods in die festen Knoten isoliert haben.

Fazit
Die Teams von Snorkel und AWS Startups hoffen, dass das Teilen dieses Denkprozesses und dieser Lösungen anderen Startups hilft, eine bessere Infrastruktur fĂŒr ML-Workloads aufzubauen, die schnell an Bedeutung gewinnen, da ML, groĂe Sprachmodelle und andere FMs ihren Weg in die Produktion fĂŒr Unternehmen auf der ganzen Welt finden.
Nehmen Sie an der AWS re:Invent 2023 teil? Diese Bereitstellung wird im Rahmen der Snorkel-Sitzung Navigieren durch die Zukunft der KI: Bereitstellung von generativen Modellen auf Amazon EKS (Sitzung CON312) vorgestellt. Schauen Sie sich das auf jeden Fall an!
Vielen Dank an David Hao, Edmond Liu und Alec Xiang, die dazu beigetragen haben, diese technische Vision fĂŒr Snorkel Wirklichkeit werden zu lassen. Besonderer Dank gilt den oben Genannten sowie Matt Casey, Henry Ehrenberg, Anthony Bishopric und dem gesamten Snorkel-Infrastrukturentwicklungsteam fĂŒr ihr aufmerksames Feedback zu diesem Artikel.

Ganapathi Krishnamoorthi
Ganapathi Krishnamoorthi ist Senior ML Solutions Architect bei AWS. Ganapathi bietet Startup- und Unternehmenskunden prĂ€skriptive Anleitungen und hilft ihnen dabei, Cloud-Anwendungen in groĂem MaĂstab zu entwickeln und bereitzustellen. Er ist auf Machine Learning spezialisiert und konzentriert sich darauf, Kunden dabei zu helfen, KI/ML fĂŒr ihre GeschĂ€ftsergebnisse zu nutzen. Wenn er nicht auf der Arbeit ist, erkundet er gerne die Natur und hört Musik.
Wie war dieser Inhalt?