Hosten Sie mehrere Modelle in einem Container hinter einem Endpunkt - Amazon SageMaker

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Hosten Sie mehrere Modelle in einem Container hinter einem Endpunkt

Multimodell-Endpunkte bieten eine skalierbare und kostengünstige Lösung für die Bereitstellung einer großen Anzahl von Modellen. Sie verwenden dieselbe Flotte von Ressourcen und einen gemeinsamen Server-Container, um alle Ihre Modelle zu hosten. Dies reduziert Hosting-Kosten, indem die Endpunktauslastung gegenüber der Verwendung von Einzelmodell-Endpunkten verbessert wird. Es reduziert auch den Bereitstellungsaufwand, da Amazon SageMaker das Laden von Modellen im Speicher und deren Skalierung auf der Grundlage der Datenverkehrsmuster zu Ihrem Endpunkt verwaltet.

Das folgende Diagramm zeigt, wie Multimodell-Endpunkte im Vergleich zu Einzelmodell-Endpunkten funktionieren.

Diagramm, das zeigt, wie Endgeräte mit mehreren Modellen im Vergleich zu Endgeräten mit nur einem Modell Modelle hosten.

Multimodell-Endpunkte eignen sich ideal zum Hosten einer großen Anzahl von Modellen, die dasselbe ML-Framework auf einem gemeinsam genutzten Serving-Container verwenden. Wenn Sie eine Mischung von Modellen haben, auf die häufig bzw. selten zugegriffen wird, kann ein Multimodell-Endpunkt diesen Datenverkehr mit weniger Ressourcen und höheren Kosteneinsparungen effizient bedienen. Ihre Anwendung sollte gelegentlich auftretende Latenzeinbußen im durch Kaltstarts tolerieren, die beim Aufrufen selten verwendeter Modelle auftreten.

Endgeräte mit mehreren Modellen unterstützen das Hosten sowohl als auch unterstützter Modelle. CPU GPU Durch die Verwendung GPU unterstützter Modelle können Sie die Kosten für die Modellbereitstellung senken, indem Sie den Endpunkt und die zugrundeliegenden beschleunigten Recheninstanzen stärker nutzen.

Multimodell-Endpunkte ermöglichen darüber hinaus die zeitliche gemeinsame Nutzung von Speicherressourcen über Ihre Modelle hinweg. Dies funktioniert am besten, wenn die Modelle in Größe und Aufruflatenz recht ähnlich sind. In diesem Fall können Multimodell-Endpunkte Instances effektiv über alle Modelle hinweg verwenden. Wenn Sie Modelle mit deutlich höheren Anforderungen an Transaktionen pro Sekunde (TPS) oder Latenz haben, empfehlen wir, diese auf dedizierten Endpunkten zu hosten.

Sie können Multimodell-Endpunkte mit den folgenden Features verwenden:

Sie können multi-model-enabled Container nicht mit Amazon Elastic Inference verwenden.

Sie können die Konsole AWS SDK for Python (Boto) oder die SageMaker Konsole verwenden, um einen Endpunkt mit mehreren Modellen zu erstellen. Für CPU unterstützte Endpunkte mit mehreren Modellen können Sie Ihren Endpunkt mit benutzerdefinierten Containern erstellen, indem Sie die Multi Model Server-Bibliothek integrieren.

Unterstützte Algorithmen, Frameworks und Instances

Informationen zu den Algorithmen, Frameworks und Instance-Typen, die Sie mit Multimodell-Endpunkten verwenden können, finden Sie in den folgenden Abschnitten.

Unterstützte Algorithmen, Frameworks und Instanzen für Endgeräte mit mehreren Modellen, die unterstützte Instanzen verwenden CPU

Die Inference-Container für die folgenden Algorithmen und Frameworks unterstützen Multimodell-Endpunkte:

Um ein anderes Framework oder einen anderen Algorithmus zu verwenden, verwenden Sie das SageMaker Inferenz-Toolkit, um einen Container zu erstellen, der Endpunkte mit mehreren Modellen unterstützt. Weitere Informationen finden Sie unter Erstellen Sie Ihren eigenen Container für Endgeräte SageMaker mit mehreren Modellen.

Endpunkte mit mehreren Modellen unterstützen alle Instanztypen. CPU

Unterstützte Algorithmen, Frameworks und Instanzen für Endgeräte mit mehreren Modellen, die unterstützte Instanzen verwenden GPU

Das Hosten mehrerer GPU unterstützter Modelle auf Endpunkten mit mehreren Modellen wird über den SageMaker Triton Inference Server unterstützt. Dies unterstützt alle wichtigen Inferenz-Frameworks wie NVIDIA® TensorRT™,,, Python PyTorch,MXNet,, scikit-learn ONNXXGBoost,, Open RandomForestVINO, benutzerdefiniertes C++ und mehr.

Um ein anderes Framework oder einen anderen Algorithmus zu verwenden, können Sie das Triton-Backend für Python oder C++ verwenden, um Ihre Modelllogik zu schreiben und jedes benutzerdefinierte Modell bereitzustellen. Sobald Sie den Server bereit haben, können Sie damit beginnen, Hunderte von Deep-Learning-Modellen hinter einem Endpunkt bereitzustellen.

Endgeräte mit mehreren Modellen unterstützen die folgenden Instanztypen: GPU

Instance-Familie Instance-Typ vCPUs GiB Speicher pro v CPU GPUs GPUSpeicher

p2

ml.p2.xlarge

4

15,25

1

12

p3

ml.p3.2xlarge

8

7.62

1

16

g5

ml.g5.xlarge

4

4

1

24

g5

ml.g5.2xlarge

8

4

1

24

g5

ml.g5.4xlarge

16

4

1

24

g5

ml.g5.8xlarge

32

4

1

24

g5

ml.g5.16xlarge

64

4

1

24

g4dn

ml.g4dn.xlarge

4

4

1

16

g4dn

ml.g4dn.2xlarge

8

4

1

16

g4dn

ml.g4dn.4xlarge

16

4

1

16

g4dn

ml.g4dn.8xlarge

32

4

1

16

g4dn

ml.g4dn.16xlarge

64

4

1

16

Beispiel-Notebooks für Multimodell-Endpunkte

Weitere Informationen zur Verwendung von Multimodell-Endpunkten finden Sie evtl. in den folgenden Beispiel-Notebooks:

Anweisungen zum Erstellen und Zugreifen auf Jupyter-Notebook-Instances, mit denen Sie die vorherigen Beispiele ausführen können, finden Sie unter. SageMaker Amazon SageMaker Notebook-Instances Nachdem Sie eine Notebook-Instanz erstellt und geöffnet haben, wählen Sie den Tab SageMaker Beispiele, um eine Liste aller Beispiele zu sehen. SageMaker Die Endpunkt-Notebooks mit mehreren Modellen befinden sich im ADVANCEDFUNCTIONALITYAbschnitt. Zum Öffnen eines Notebooks wählen Sie die Registerkarte Verwenden und dann Kopie erstellen aus.

Weitere Informationen zu Anwendungsfällen für Multimodell-Endpunkte finden Sie in den folgenden Blogs und Ressourcen:

Funktionsweise von Multimodell-Endpunkten

SageMaker verwaltet den Lebenszyklus von Modellen, die auf Endpunkten mit mehreren Modellen im Speicher des Containers gehostet werden. Anstatt beim Erstellen des Endpunkts alle Modelle von einem Amazon S3 S3-Bucket in den Container herunterzuladen, werden sie SageMaker dynamisch geladen und zwischengespeichert, wenn Sie sie aufrufen. Wenn es eine Aufrufanfrage für ein bestimmtes Modell SageMaker erhält, geht es wie folgt vor:

  1. Er leitet die Anforderung an eine Instance hinter dem Endpunkt weiter.

  2. Er lädt das Modell aus dem S3-Bucket auf das Speicher-Volume dieser Instance herunter.

  3. Lädt das Modell in den Speicher des Containers (CPUoderGPU, je nachdem, ob Sie über CPU oder über GPU gesicherte Instanzen verfügen) auf dieser beschleunigten Recheninstanz. Wenn das Modell bereits im Speicher des Containers geladen ist, ist der Aufruf schneller, da es SageMaker nicht heruntergeladen und geladen werden muss.

SageMaker leitet Anfragen für ein Modell weiterhin an die Instanz weiter, in der das Modell bereits geladen ist. Wenn das Modell jedoch viele Aufrufanforderungen empfängt und es zusätzliche Instanzen für den Multimodell-Endpunkt gibt, SageMaker leitet es einige Anfragen an eine andere Instanz weiter, um den Datenverkehr zu bewältigen. Wenn das Modell noch nicht auf die zweite Instance geladen wurde, wird das Modell auf das Speicher-Volume dieser Instance heruntergeladen und in den Speicher des Containers geladen.

Wenn die Speicherauslastung einer Instanz hoch ist und ein anderes Modell in den Speicher geladen werden SageMaker muss, werden ungenutzte Modelle aus dem Container dieser Instanz entladen, um sicherzustellen, dass genügend Speicher zum Laden des Modells vorhanden ist. Entfernte Modelle verbleiben auf dem Speicher-Volume der Instance und können später in den Speicher des Containers geladen werden, ohne dass sie erneut aus dem S3-Bucket heruntergeladen werden müssen. Wenn das Speichervolumen der Instance seine Kapazität erreicht, werden alle ungenutzten Modelle aus dem Speichervolume SageMaker gelöscht.

Um ein Modell zu löschen, beenden Sie das Senden von Anfragen und löschen Sie es aus dem S3-Bucket. SageMaker bietet Endpunktfunktionen für mehrere Modelle in einem Serving-Container. Das Hinzufügen von Modellen zu einem Multimodell-Endpunkt und ihr Löschen erfordert keine Aktualisierung des Endpunkts selbst. Um ein Modell hinzuzufügen, laden Sie es in den S3-Bucket hoch und rufen Sie es auf. Um sie verwenden zu können, sind keine Codeänderungen erforderlich.

Anmerkung

Wenn Sie einen Multimodell-Endpunkt aktualisieren, kann es bei Aufrufanfragen auf dem Endpunkt zunächst zu höheren Latenzen kommen, da sich Smart Routing auf Multimodell-Endpunkten an das Muster Ihres Datenverkehrs anpasst. Sobald es allerdings das Muster Ihres Datenverkehrs kennt, kann es bei den am häufigsten verwendeten Modellen zu niedrigen Latenzen kommen. Bei weniger häufig verwendeten Modellen kann es zu Kaltstart-Latenzen kommen, da die Modelle dynamisch in eine Instance geladen werden.

Einstellung des SageMaker Caching-Verhaltens von Endpunktmodellen für mehrere Modelle

Standardmäßig werden bei Endpunkten mit mehreren Modellen häufig verwendete Modelle im Arbeitsspeicher (CPUoderGPU, je nachdem, ob Sie über oder über GPU gesicherte Instanzen verfügenCPU) und auf der Festplatte zwischengespeichert, um Rückschlüsse mit geringer Latenz zu ermöglichen. Die zwischengespeicherten Modelle werden nur dann entladen und/oder von der Festplatte gelöscht, wenn einem Container nicht mehr genügend Arbeitsspeicher oder Festplattenspeicher für ein neues Zielmodell zur Verfügung steht.

Sie können das Caching-Verhalten eines Multimodell-Endpunkts ändern und das Modell-Caching explizit aktivieren oder deaktivieren, indem Sie den Parameter ModelCacheSetting beim Aufrufen von create_model festlegen.

Wir empfehlen, den Wert des Parameters ModelCacheSetting für Anwendungsfälle, die nicht vom Modell-Caching profitieren, auf Disabled festzulegen. Wenn eine große Anzahl von Modellen z. B. vom Endpunkt aus bedient werden müssen, jedes Modell aber nur einmal (oder sehr selten) aufgerufen wird. In solchen Anwendungsfällen Disabled ermöglicht das Einstellen des ModelCacheSetting Parameterwerts auf höhere Transaktionen pro Sekunde (TPS) für invoke_endpoint Anfragen im Vergleich zum Standard-Caching-Modus. Ein höherer Wert liegt TPS in diesen Anwendungsfällen daran, SageMaker dass nach der invoke_endpoint Anfrage Folgendes ausgeführt wird:

  • Es entlädt das Modell asynchron aus dem Speicher und löscht es unmittelbar nach dem Aufruf von der Festplatte.

  • Es bietet eine höhere Parallelität beim Herunterladen und Laden von Modellen in den Inference-Container. CPUSowohl für Endpoints GPU als auch für Backpoints ist die Parallelität ein Faktor, der von der Nummer vCPUs der Container-Instance abhängt.

Richtlinien zur Auswahl eines SageMaker ML-Instanztyps für einen Endpunkt mit mehreren Modellen finden Sie unter. Instance-Empfehlungen für Bereitstellungen von Multimodell-Endpunkten

Instance-Empfehlungen für Bereitstellungen von Multimodell-Endpunkten

Bei der Auswahl eines SageMaker ML-Instanztyps für einen Endpunkt mit mehreren Modellen sind mehrere Punkte zu berücksichtigen:

  • Stellen Sie ausreichend Amazon Elastic Block Store (AmazonEBS) -Kapazität für alle Modelle bereit, die bedient werden müssen.

  • Wägen Sie Leistung (Minimierung von Kaltstarts) und Kosten (keine übermäßige Bereitstellung von Instance-Kapazität) gegeneinander auf. Informationen zur Größe des Speichervolumes, das für jeden Instance-Typ SageMaker für einen Endpunkt und für einen Endpunkt mit mehreren Modellen angehängt wird, finden Sie unter. Speichervolumen der Host-Instance

  • Bei einem Container, der für die Ausführung im MultiModel-Modus konfiguriert ist, verfügt das für seine Instances bereitgestellte Speichervolume über mehr Speicher als im Standardmodus SingleModel. Somit können mehr Modelle im Instance-Speicher zwischengespeichert werden als im SingleModel-Modus.

Beachten Sie bei der Auswahl eines SageMaker ML-Instanztyps Folgendes:

  • Endpunkte mit mehreren Modellen werden derzeit für alle CPU GPU Instanztypen und für Einzelinstanztypen unterstützt.

  • Bei der Datenverkehrsverteilung (Zugriffsmuster) auf die Modelle, die hinter dem Multimodell-Endpunkt gehostet werden sollen, zusammen mit der Modellgröße (wie viele Modelle in den Speicher der Instance geladen werden könnten) ist folgendes zu berücksichtigen:

    • Stellen Sie sich die Speichermenge auf einer Instanz als Cache-Speicherplatz für Modelle vor, die geladen werden sollen, und stellen Sie sich die Anzahl vCPUs als Parallelitätslimit für die Durchführung von Inferenzen für die geladenen Modelle vor (vorausgesetzt, das Aufrufen eines Modells ist gebunden). CPU

    • Bei CPU unterstützten Instances wirkt sich die Anzahl der vCPUs Auswirkungen auf Ihre maximale Anzahl gleichzeitiger Aufrufe pro Instanz aus (vorausgesetzt, das Aufrufen eines Modells ist daran gebunden). CPU Eine höhere Anzahl von vCPUs ermöglicht es Ihnen, mehr einzigartige Modelle gleichzeitig aufzurufen.

    • Bei GPU gesicherten Instances können Sie mit einer höheren Menge an Instance und GPU Arbeitsspeicher mehr Modelle laden und bereit haben, Inferenzanforderungen zu bearbeiten.

    • Halten Sie CPU sowohl für GPU Instances als auch für Backed-Instances etwas „freien“ Arbeitsspeicher bereit, sodass ungenutzte Modelle entladen werden können. Dies gilt insbesondere für Endpunkte mit mehreren Modellen und mehreren Instanzen. Wenn eine Instance oder eine Availability Zone ausfällt, werden die Modelle dieser Instances an andere Instances hinter dem Endpunkt umgeleitet.

  • Bestimmen Sie Ihre Toleranz gegenüber Lade-/Herunterladezeiten:

    • Die Instance-Typfamilien d (z. B. m5d, c5d oder r5d) und g5s verfügen über einen NVMe (Non-Volatile Memory Express)SSD, der eine hohe I/O-Leistung bietet und die Zeit reduzieren kann, die zum Herunterladen von Modellen auf das Speichervolume und zum Laden des Modells durch den Container vom Speichervolume benötigt wird.

    • Da die Instance-Typen d und g5 über einen NVMe SSD Speicher verfügen, SageMaker wird diesen ML-Compute-Instances, die den Multi-Modell-Endpunkt hosten, kein EBS Amazon-Speicher-Volume angehängt. Auto Scaling funktioniert am besten, wenn die Modelle ähnlich dimensioniert und homogen sind, d. h. wenn sie ähnliche Inference-Latenz- und Ressourcenanforderungen haben.

Sie können auch die folgenden Anleitungen verwenden, um das Laden von Modellen auf Ihre Multimodell-Endpunkte zu optimieren:

Wählen Sie einen Instance-Typ, der nicht alle Zielmodelle im Speicher aufnehmen kann

In einigen Fällen können Sie sich dafür entscheiden, die Kosten zu senken, indem Sie einen Instance-Typ wählen, der nicht alle Zielmodelle gleichzeitig im Arbeitsspeicher aufnehmen kann. SageMaker entlädt Modelle dynamisch, wenn der Arbeitsspeicher knapp wird, um Platz für ein neues Zielmodell zu schaffen. Bei selten angeforderten Modellen verlieren Sie die dynamische Latenz beim Laden. In Fällen mit strengeren Latenzanforderungen können Sie sich für größere Instance-Typen oder mehr Instances entscheiden. Wenn Sie vorab Zeit für Leistungstests und Analysen investieren, können Sie Produktionsbereitstellungen erfolgreich durchführen.

Auswertung der Treffer im Modell-Cache

CloudWatch Amazon-Metriken können Ihnen bei der Bewertung Ihrer Modelle helfen. Weitere Informationen zu Kennzahlen, die Sie mit Multimodell-Endpunkten verwenden können, finden Sie unter CloudWatch Metriken für Endpunktbereitstellungen mit mehreren Modellen .

Sie können mithilfe der Average-Statistik der Metrik ModelCacheHit das Verhältnis von Anforderungen überwachen, bei denen das Modell bereits geladen ist. Sie können mithilfe der SampleCount-Statistik für die Metrik ModelUnloadingTime die Anzahl der Entladungsanforderungen überwachen, die während eines Zeitraums an den Container gesendet werden. Wenn Modelle zu häufig entladen werden (ein Anzeichen für Thrashing, bei dem Modelle entladen und wieder geladen werden, da für den Arbeitssatz von Modellen nicht genügend Cache-Platz zur Verfügung steht), sollten Sie einen größeren Instance-Typ mit mehr Speicher verwenden oder die Anzahl der Instances hinter dem Multimodell-Endpunkt erhöhen. Beachten Sie bei Multimodell-Endpunkten mit mehreren Instances, dass ein Modell möglicherweise auf mehr als eine Instance geladen wird.