Maschinelles Lernen auf Kubernetes #2: Kubernetes-Architektur für MLOps

Auf Geschwindigkeit ausgelegt: ~ 10 ms Latenz, auch unter Last
Unglaublich schnelle Methode zum Erstellen, Verfolgen und Bereitstellen Ihrer Modelle!
- Verarbeitet mehr als 350 RPS auf nur 1 vCPU — kein Tuning erforderlich
- Produktionsbereit mit vollem Unternehmenssupport
Machine-Learning-Operationen (MLOps) sind ein wichtiger Bestandteil moderner datenwissenschaftlicher Workflows. MLOps umfasst die Entwicklung, Bereitstellung und Verwaltung von Modellen für maschinelles Lernen und der zugehörigen Infrastruktur. Eine der wichtigsten Herausforderungen von MLOps ist die Notwendigkeit einer skalierbaren und flexiblen Infrastruktur, die den besonderen Anforderungen von ML-Workloads gerecht wird. Kubernetes ist eine leistungsstarke Plattform, die die notwendige Infrastruktur bereitstellen kann, um MLOps in großem Maßstab zu unterstützen. Der Entwurf einer Kubernetes-Architektur für MLOps erfordert jedoch eine sorgfältige Berücksichtigung von Faktoren wie Sicherheit, Ressourcenmanagement und Anwendungsabhängigkeiten. In diesem Blog werden wir einige bewährte Methoden für den Entwurf einer Kubernetes-Architektur für MLOps untersuchen.

Namespace-Design
Kubernetes-Namespaces bieten eine Möglichkeit, Ressourcen innerhalb eines Clusters zu partitionieren. In einer MLOps-Architektur ist es üblich, Namespaces zu verwenden, um verschiedene Umgebungen wie Entwicklung, Test und Produktion voneinander zu trennen. Dadurch wird sichergestellt, dass Anwendungen und Dienste voneinander isoliert sind, und das Risiko von Ressourcen-/Anwendungskonflikten wird reduziert. Ein effektives Namespace-Design kann auch die Gesamtleistung des Clusters und die Ressourcennutzung verbessern.
Beachten Sie beim Entwerfen von Namespaces für MLOps Folgendes:
- Verwenden Sie beschreibende Namen, die den Zweck des Namespace widerspiegeln (z. B. „dev“, „test“, „prod“).
- Verwenden Sie RBAC (rollenbasierte Zugriffskontrolle), um den Zugriff auf Namespaces auf der Grundlage von Benutzerrollen einzuschränken.
- Verwenden Sie Ressourcenkontingente, um die Menge an CPU und Arbeitsspeicher zu begrenzen, die von Anwendungen in jedem Namespace verwendet werden kann.
Knotenauswahl
Kubernetes verwendet einen Planungsalgorithmus, um zu bestimmen, welche Knoten für die Bereitstellung von Anwendungen verwendet werden sollen. Durch die richtige Knotenauswahl kann eine optimale Leistung gewährleistet und die Wahrscheinlichkeit von Leistungs- und Netzwerklatenzproblemen verringert werden.
Beim Entwerfen einer Kubernetes-Architektur für MLOps ist es wichtig, bei der Auswahl von Knoten die folgenden Faktoren zu berücksichtigen:
- Art und Menge der Ressourcen, die von Anwendungen benötigt werden (z. B. CPU, Speicher, GPU).
- Die Netzwerklatenz zwischen Knoten und dem Datenspeicherort.
- Der Standort aller speziellen Hardware, die für Workloads mit maschinellem Lernen erforderlich ist.
Um die Knotenauswahl zu optimieren, können Sie Tools wie Node-Selektoren, Node-Affinität sowie Taints and Tolerations verwenden. Beispielsweise können Sie mithilfe von Knotenselektoren angeben, welche Knoten für Workloads mit maschinellem Lernen geeignet sind, für die GPUs erforderlich sind.
Beispielabbildung: Angenommen, Sie haben einen großen Datensatz, auf dem Sie ein Modell für maschinelles Lernen trainieren müssen, und Sie möchten einen verteilten Trainingsansatz verwenden, um den Prozess zu beschleunigen. Sie entscheiden sich dafür, TensorFlow zu verwenden und den Trainingsjob auf einem Kubernetes-Cluster auszuführen. Um die Leistung des Trainingsjobs zu optimieren, sollten Sie sicherstellen, dass die Knoten, die Sie für die Ausführung des Jobs auswählen, über die richtige Kombination aus CPU-, GPU-, Arbeitsspeicher- und Speicherressourcen verfügen. Beispielsweise können Sie Knoten auswählen, die über GPUs mit einer bestimmten Speichermenge verfügen, oder Knoten mit SSD-Speicher für einen schnelleren Datenzugriff.
Wie verwende ich Node-Selektoren und Affinität für das obige Szenario?
In diesem Szenario könnten Sie Node-Labels und Node-Selektoren in Kubernetes verwenden, um sicherzustellen, dass Ihr ML-Trainingsjob auf Knoten mit der richtigen Kombination von Ressourcen ausgeführt wird. Sie könnten Knoten im Cluster anhand ihrer Hardwarespezifikationen wie CPU-Typ, GPU-Typ, Speichergröße und Speichertyp kennzeichnen und dann in Ihrer Trainingsjob-Spezifikation mithilfe von Knotenselektoren angeben, welche Knoten verwendet werden sollen.
Sie könnten beispielsweise in Ihrer TensorFlow-Jobspezifikation einen Knotenselektor definieren, der Knoten mit einer bestimmten Kombination von Bezeichnungen auswählt, z. B. „CPU=Intel“ und „GPU=NVIDIA“ und „Memory>=32GB“. Dadurch würde sichergestellt, dass Ihr Trainingsjob auf Knoten mit den richtigen Hardwarespezifikationen ausgeführt wird, was die Leistung des Jobs optimieren und den Zeitaufwand für das Training des Modells reduzieren würde.
Alternativ könnten Sie Kubernetes-Knotenaffinitäts- und Anti-Affinitätsregeln verwenden, um komplexere Planungsanforderungen festzulegen, z. B. das Planen von Pods nur auf Knoten mit einem bestimmten Satz von Labels oder das Vermeiden der Planung von Pods auf Knoten mit bestimmten Labels. Dies würde eine genauere Kontrolle über die Planung Ihres Trainingsjobs ermöglichen und könnte dazu beitragen, sicherzustellen, dass er auf den Knoten ausgeführt wird, die für die Aufgabe am besten geeignet sind.
Verwaltung der Ressourcen
Die Verwaltung von Ressourcen ist entscheidend, um sicherzustellen, dass Anwendungen und Dienste auf Kubernetes reibungslos und effektiv laufen. Es hilft auch, Leistungsprobleme zu vermeiden und reduziert die Wahrscheinlichkeit von Ausfällen
Beachten Sie beim Entwerfen einer Kubernetes-Architektur für MLOps die folgenden Best Practices für das Ressourcenmanagement:
- Verwenden Sie Ressourcenanforderungen und Grenzwerte, um die Menge an CPU und Arbeitsspeicher anzugeben, die von Anwendungen benötigt werden.
- Verwenden Sie Horizontal Pod Autoscaling (HPA), um die Anzahl der Replikate basierend auf der CPU- oder Speicherauslastung automatisch zu skalieren.
- Verwenden Sie native Kubernetes-Tools wie kube-top, kube-state-metrics und Prometheus, um die Ressourcennutzung zu überwachen.
Hohe Verfügbarkeit
In einer MLOps-Architektur ist eine hohe Verfügbarkeit unerlässlich, um sicherzustellen, dass die Dienste den Benutzern auch bei Ausfällen immer zur Verfügung stehen. Dadurch wird die Zuverlässigkeit von Machine-Learning-Workloads verbessert und die Wahrscheinlichkeit von Ausfällen verringert.
Beachten Sie Folgendes, um eine hohe Verfügbarkeit auf Kubernetes zu erreichen:
- Verwenden Sie mehrere Replikate kritischer Anwendungen, um sicherzustellen, dass sie Knotenausfälle überstehen.
- Verwenden Sie einen Load Balancer, um den Datenverkehr auf mehrere Replikate zu verteilen.
- Verwenden Sie native Kubernetes-Tools wie Readiness Probes und Liveness Probes, um Anwendungsausfälle zu erkennen und diese zu beheben.
Beispielillustration: Angenommen, Sie sind ein SaaS-Unternehmen, das Ihren Kunden eine ML-basierte Empfehlungsmaschine zur Verfügung stellt. Ihre Empfehlungsmaschine verwendet ein Deep-Learning-Modell, für dessen Schulung und Ausführung eine erhebliche Menge an Rechenressourcen erforderlich ist. Sie müssen sicherstellen, dass Ihr ML-Workload hochverfügbar ist und dass Sie Ressourcen effektiv zuweisen können, um Nachfrageschwankungen zu bewältigen.
Verwaltung von Ressourcen und Sicherstellung der Hochverfügbarkeit mithilfe interner Kubernetes-Funktionen
Um Ihre Ressourcen effektiv zu verwalten, können Sie die integrierten Ressourcenverwaltungsfunktionen von Kubernetes wie Ressourcenanforderungen, Grenzwerte und Kontingente verwenden. Sie könnten Ressourcenanforderungen und Grenzwerte für jede Komponente Ihrer Empfehlungsmaschine definieren, z. B. für den Webserver, die Datenbank und das Modell für maschinelles Lernen. Dadurch würde sichergestellt, dass jeder Komponente die richtige Menge an Ressourcen zugewiesen wird, um effizient zu funktionieren, und dass Ressourcen nicht für eine übermäßige Bereitstellung verschwendet werden.
Darüber hinaus könnten Sie in Kubernetes einen horizontalen Pod-Autoscaler (HPA) einrichten, der Ihre Empfehlungs-Engine automatisch je nach Bedarf skaliert. Der HPA würde die Ressourcenauslastung Ihres Workloads überwachen und die Anzahl der Replikate jeder Komponente an den Bedarf anpassen. Dadurch wird sichergestellt, dass Ihnen die richtige Menge an Ressourcen zur Verfügung steht, um Nachfrageschwankungen zu bewältigen, und dass Sie nicht zu viel oder zu wenig bereitstellen.
Um eine hohe Verfügbarkeit Ihres Workloads sicherzustellen, könnten Sie Ihre Empfehlungs-Engine über mehrere Availability Zones (AZs) in der Infrastruktur Ihres Cloud-Anbieters bereitstellen. Sie könnten die Knotenaffinitäts- und Anti-Affinitätsregeln von Kubernetes verwenden, um sicherzustellen, dass jede Komponente Ihres Workloads auf mehrere AZs verteilt ist. Dadurch würde sichergestellt, dass Ihr Workload auch bei einem Ausfall einer AZ weiterhin funktioniert und eine hohe Verfügbarkeit gewährleistet ist.
Darüber hinaus könnten Sie einen Load Balancer einrichten, um den Datenverkehr auf die verschiedenen Replikate Ihrer Webserverkomponente zu verteilen und so sicherzustellen, dass der Datenverkehr auf alle verfügbaren Replikate verteilt wird. Dadurch würde verhindert, dass ein einzelnes Replikat überlastet wird, und sicherstellen, dass Ihre Arbeitslast hohe Datenmengen bewältigen kann.
Sicherheit
Sicherheit ist ein wichtiger Aspekt beim Entwurf einer Kubernetes-Architektur für MLOps und kann dazu beitragen, dass Machine-Learning-Workloads und die zugehörigen Daten vor unbefugtem Zugriff und Datenschutzverletzungen geschützt sind.
„Sicherheit ist nicht nur ein nachträglicher Aspekt des maschinellen Lernens, sie ist ein zentraler Bestandteil des Entwicklungsprozesses. Von der Datenerfassung bis zur Modellbereitstellung muss jeder Schritt der ML-Pipeline aus Sicherheitsgründen betrachtet werden. Dies gilt insbesondere für den Umgang mit sensiblen Daten oder für den Einsatz von Modellen in Produktionsumgebungen, in denen sie potenziellen Angreifern ausgesetzt sind. Als ML-Praktiker müssen wir bei der Identifizierung und Minderung von Sicherheitsrisiken proaktiv vorgehen und unsere Sicherheitslage kontinuierlich evaluieren, wenn neue Bedrohungen auftauchen.“
-Dr. Tracy Hammond, Professorin für Informatik und Ingenieurwesen an der Texas A&M University und Direktorin des Sketch Recognition Lab
Beachten Sie die folgenden Best Practices, um sicherzustellen, dass Ihre Infrastruktur sicher ist:
- Verwenden Sie RBAC, um den Zugriff auf Ressourcen auf der Grundlage von Benutzerrollen einzuschränken.
- Verwenden Sie Netzwerkrichtlinien, um den Verkehr zwischen Namespaces und Pods einzuschränken.
- Verwenden Sie Tools zur Verwaltung von Geheimnissen wie Vault oder Kubernetes Secrets, um vertrauliche Daten wie API-Schlüssel und Passwörter zu speichern.
- Verwenden Sie Container-Images aus vertrauenswürdigen Quellen und scannen Sie sie mit Tools wie Clair oder Trivy auf Sicherheitslücken.
Fazit
Zusammenfassend lässt sich sagen, dass Kubernetes eine leistungsstarke Plattform für die Implementierung einer MLOps-Infrastruktur bietet, die den einzigartigen Anforderungen von ML-Workloads gerecht wird. Durch sorgfältige Überlegungen zum Design von Namespaces, der Knotenauswahl und dem Ressourcenmanagement können ML-Praktiker sicherstellen, dass ihre ML-Workloads effizient, sicher und mit hoher Verfügbarkeit ausgeführt werden. Angesichts der wachsenden Nachfrage nach skalierbarer und flexibler Infrastruktur für ML-Workloads ist Kubernetes ein wertvolles Tool für MLOps-Praktiker, die ihrer Zeit immer einen Schritt voraus sein wollen. Wir hoffen, dieser Blog hat Ihnen eine nützliche Einführung in die Implementierung der MLOps-Infrastruktur auf Kubernetes gegeben, und wir empfehlen Ihnen, diese leistungsstarke Plattform weiter zu erkunden, um Ihre eigenen ML-Workflows zu unterstützen.
Wahre Gießerei ist ein ML Deployment PaaS über Kubernetes, um die Workflows von Entwicklern zu beschleunigen und ihnen gleichzeitig volle Flexibilität beim Testen und Bereitstellen von Modellen zu bieten und gleichzeitig die volle Sicherheit und Kontrolle für das Infra-Team zu gewährleisten. Über unsere Plattform ermöglichen wir Teams für maschinelles Lernen bereitstellen und überwachen Modelle innerhalb von 15 Minuten mit 100% iger Zuverlässigkeit, Skalierbarkeit und der Möglichkeit, innerhalb von Sekunden rückgängig zu machen. So können sie Kosten sparen und Modelle schneller für die Produktion freigeben, wodurch ein echter Geschäftswert erzielt wird.
TrueFoundry AI Gateway bietet eine Latenz von ~3—4 ms, verarbeitet mehr als 350 RPS auf einer vCPU, skaliert problemlos horizontal und ist produktionsbereit, während LiteLM unter einer hohen Latenz leidet, mit moderaten RPS zu kämpfen hat, keine integrierte Skalierung hat und sich am besten für leichte Workloads oder Prototyp-Workloads eignet.
Der schnellste Weg, deine KI zu entwickeln, zu steuern und zu skalieren















.png)




.png)






.webp)

.webp)



