Modellbereitstellung mit Triton Inference Server - Amazon SageMaker KI

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.

Modellbereitstellung mit Triton Inference Server

Triton Inference Server ist eine Open-Source-Inferenz-Server-Software, die die KI-Inferenz optimiert. Mit Triton können Sie jedes Modell bereitstellen, das mit mehreren Frameworks für Deep Learning und Machine Learning erstellt wurde, darunter TensorRT, TensorFlow, PyTorch, ONNX, OpenVINO, Python, RAPIDS FIL und mehr.

Die Container von SageMaker AI Triton helfen Ihnen dabei, Triton Inference Server auf der Hosting-Plattformen von SageMaker AI bereitzustellen, um trainierte Modelle in der Produktion bereitzustellen. Es unterstützt die verschiedenen Modi, in denen SageMaker AI arbeitet. Eine Liste der verfügbaren Triton Inference Server-Container, die auf SageMaker AI verfügbar sind, finden Sie unter NVIDIA Triton Inference Containers (nur SM-Unterstützung).

Für umfassende Notebook-Beispiele empfehlen wir, einen Blick auf das amazon-sagemaker-examples-Repository zu werfen.

Hosting-Modi

Die folgenden Hosting-Modi von SageMaker AI werden von Triton-Containern unterstützt:

  • Endpunkte für ein einzelnes Modell

    • Dies ist der Standardbetriebsmodus von SageMaker AI. In diesem Modus kann der Triton-Container ein einzelnes Modell oder ein einzelnes Ensemble-Modell laden.

    • Der Name des Modells muss als Eigenschaft der Container-Umgebung übergeben werden, die Teil des API-Aufrufs CreateModel von SageMaker AI ist. Die Umgebungsvariable, die zur Übergabe des Modellnamens verwendet wird, ist SAGEMAKER_TRITON_DEFAULT_MODEL_NAME.

  • Endpunkte eines einzelnen Modells mit Ensemble

    • Triton Inference Server unterstützt ein Ensemble, bei dem es sich um eine Pipeline oder einen DAG (gerichteter azyklischer Graph) von Modellen handelt. Obwohl ein Ensemble technisch gesehen aus mehreren Modellen besteht, kann SageMaker AI im standardmäßigen Einzelmodell-Endpunktmodus das eigentliche Ensemble (das Metamodell, das die Pipeline darstellt) als das zu ladende Hauptmodell behandeln und anschließend die zugehörigen Modelle laden.

    • Zum Laden des Modells muss der Modellname des eigentlichen Ensembles verwendet werden. Sie muss als Eigenschaft der Container-Umgebung übergeben werden, die Teil des CreateModel SageMaker-API-Aufrufs ist. Die Umgebungsvariable, die zur Übergabe des Modellnamens verwendet wird, ist SAGEMAKER_TRITON_DEFAULT_MODEL_NAME.

  • Multimodell-Endpunkte

    • In diesem Modus kann SageMaker AI mehrere Modelle auf einem einzigen Endpunkt bedienen. Sie können diesen Modus verwenden, indem Sie die Umgebungsvariable ‘MultiModel’: true als Eigenschaft der Container-Umgebung angeben, die Teil des CreateModel SageMaker-API-Aufrufs ist.

    • Standardmäßig wird beim Start der Instance kein Modell geladen. Um eine Inferenzanforderung für ein bestimmtes Modell auszuführen, geben Sie die *.tar.gz Datei des entsprechenden Modells als Argument für die TargetModel Eigenschaft des InvokeEndpoint SageMaker-API-Aufrufs an.

  • Endpunkte mit mehreren Modellen und Ensemble

    • In diesem Modus funktioniert SageMaker AI wie für Multimodell-Endpunkte beschrieben. Der Triton-Container von SageMaker AI kann jedoch mehrere Ensemble-Modelle laden, was bedeutet, dass mehrere Modell-Pipelines auf derselben Instance ausgeführt werden können. SageMaker AI behandelt jedes Ensemble als ein Modell, und das eigentliche Ensemble jedes Modells kann aufgerufen werden, indem das entsprechende *.tar.gz Archiv als TargetModel angegeben wird.

    • Für eine bessere Speicherverwaltung während des dynamischen Speichers LOAD und UNLOAD empfehlen wir, die Ensemblegröße klein zu halten.

Inferenz-Payload-Typen

Triton unterstützt zwei Methoden zum Senden einer Inferenz-Payload über das Netzwerk – json und binary+json (oder binär codiertes JSON). Die JSON-Nutzlast umfasst in beiden Fällen den Datentyp, die Form und den eigentlichen Tensor für die Inferenzanforderung. Der Anforderungstensor muss ein binärer Tensor sein.

Bei dem binary+json Format müssen Sie die Länge der Anforderungsmetadaten im Header angeben, damit Triton die binäre Nutzlast korrekt analysieren kann. Im Triton-Container von SageMaker AI erfolgt dies mithilfe eines benutzerdefinierten Content-Type Headers: application/vnd.sagemaker-triton.binary+json;json-header-size={}. Dies unterscheidet sich von der Verwendung des Inference-Header-Content-Length Headers auf einem eigenständigen Triton Inference Server, da benutzerdefinierte Header in SageMaker AI nicht zulässig sind.

Verwenden Sie config.pbtxt, um die Modellkonfiguration festzulegen

Für Triton Inference Server auf SageMaker AI muss jedes Modell eine config.pbtxt Datei enthalten, die mindestens die folgenden Konfigurationen für das Modell spezifiziert:

  • name: Dies ist zwar optional für Modelle, die außerhalb von SageMaker AI ausgeführt werden, wir empfehlen jedoch, immer einen Namen für die Modelle anzugeben, die in Triton auf SageMaker AI ausgeführt werden sollen.

  • platform und/oder backend: Die Einrichtung eines Backends ist wichtig, um den Typ des Modells zu spezifizieren. Einige Backends haben eine weitere Klassifizierung, wie tensorflow_savedmodel oder tensorflow_graphdef zum Beispiel. Solche Optionen können zusätzlich zum Schlüssel backend als Teil des platform Schlüssels angegeben werden. Die gängigsten Backends sind tensorrt, onnxruntime, tensorflow, pytorch, python, dali, fil, und openvino.

  • input: Geben Sie drei Attribute für die Eingabe an: name, data_type und dims (die Form).

  • output: Geben Sie drei Attribute für die Ausgabe an: name, data_type und dims (die Form).

  • max_batch_size: Stellen Sie die Chargengröße auf einen Wert größer oder gleich 1 ein, der die maximale Chargengröße angibt, die Triton für das Modell verwenden sollte.

Weitere Informationen zur Konfiguration config.pbtxt finden Sie im GitHub-Repository von Triton. Triton bietet verschiedene Konfigurationen zur Optimierung des Modellverhaltens. Einige der gängigsten und wichtigsten Konfigurationsoptionen sind:

  • instance_groups: Instance-Gruppen helfen bei der Angabe der Nummer und des Standorts für ein bestimmtes Modell. Sie haben die Attribute countkind, und gpus (werden verwendet, wenn kind KIND_GPU ist). Das count Attribut entspricht der Anzahl der Worker. Für die reguläre Bereitstellung von Models hat jeder Worker seine eigene Kopie des Modells. In ähnlicher Weise count gibt der in Triton die Anzahl der Modellkopien pro Gerät an. Wenn der instance_group Typ beispielsweise KIND_CPU ist, hat die CPU die count Anzahl der Modellkopien.

    Anmerkung

    Auf einer GPU-Instance gilt die instance_group Konfiguration pro GPU-Gerät. Beispielsweise wird die count Anzahl der Modellkopien auf jedem GPU-Gerät platziert, sofern Sie nicht explizit angeben, welche GPU-Geräte das Modell laden sollen.

  • dynamic_batching und sequence_batching: Dynamisches Batching wird für statuslose Modelle verwendet, und Sequenz-Batching wird für statusbehaftete Modelle verwendet (bei denen Sie jedes Mal eine Anfrage an dieselbe Modell-Instance weiterleiten möchten). Batching-Scheduler ermöglichen eine modellspezifische Warteschlange, wodurch der Durchsatz je nach Batching-Konfiguration erhöht werden kann.

  • ensemble: Ein Ensemble-Modell stellt eine Pipeline aus einem oder mehreren Modellen und die Verbindung von Eingabe- und Ausgangstensoren zwischen diesen Modellen dar. Es kann konfiguriert werden, indem platform als ensemble angegeben wird. Die Ensemble-Konfiguration ist nur eine Darstellung der Modellpipeline. In SageMaker AI werden alle Modelle eines Ensembles als vom Ensemble-Modell abhängige Modelle behandelt und für SageMaker-AI-Metriken als ein einziges Modell gezählt, wie z. B. LoadedModelCount.

Veröffentlichen von Standard-Triton-Metriken zu Amazon CloudWatch

Der NVIDIA Triton Inference Container stellt Metriken an Port 8002 (konfigurierbar) für die verschiedenen Modelle und GPUs bereit, die im Triton Inference Server verwendet werden. Vollständige Informationen zu den verfügbaren Standardmetriken finden Sie auf der GitHub-Seite für die Triton Inference Server-Metriken. Diese Metriken liegen im Prometheus-Format vor und können mit einer Prometheus-Scraper-Konfiguration gescrapt werden.

Ab Version v23.07 unterstützt der Triton-Container von SageMaker AI die Veröffentlichung dieser Metriken in Amazon CloudWatch, indem er einige Umgebungsvariablen angibt. Um die Prometheus-Metriken zu ermitteln, nutzt der Triton-Container von SageMaker AI den Amazon CloudWatch-Agenten.

Die erforderlichen Umgebungsvariablen, die Sie für die Erfassung von Metriken angeben müssen, lauten wie folgt:

Umgebungsvariable Beschreibung Beispielwert

SAGEMAKER_TRITON_ALLOW_METRICS

Geben Sie diese Option an, damit Triton Metriken auf seinem Prometheus-Endpunkt veröffentlichen kann.

„true“

SAGEMAKER_TRITON_PUBLISH_METRICS_TO_CLOUDWATCH

Geben Sie diese Option an, um die Vorabprüfungen zu starten, die für die Veröffentlichung von Metriken in Amazon CloudWatch erforderlich sind.

„true“

SAGEMAKER_TRITON_CLOUDWATCH_LOG_GROUP

Geben Sie diese Option an, um auf die Protokollgruppe zu verweisen, in die die Metriken geschrieben werden.

„/aws/SageMaker AI/Endpoints/TritonMetrics/SageMakerTwoEnsemblesTest“

SAGEMAKER_TRITON_CLOUDWATCH_METRIC_NAMESPACE

Geben Sie diese Option an, um auf den Metrik-Namespace zu verweisen, in dem Sie die Metriken sehen und grafisch darstellen möchten.

„/aws/SageMaker AI/Endpoints/TritonMetrics/SageMakerTwoEnsemblesPublicTest“

SAGEMAKER_TRITON_METRICS_PORT

Geben Sie dies als 8002 oder einen anderen Port an. Wenn SageMaker AI den angegebenen Port nicht blockiert hat, wird er verwendet. Andernfalls wird automatisch ein anderer nicht blockierter Port ausgewählt.

„8002"

Beachten Sie beim Veröffentlichen von Metriken mit Triton auf SageMaker AI die folgenden Einschränkungen:

  • Sie können zwar benutzerdefinierte Metriken über die C-API und das Python-Backend (ab Version 23.05) generieren, diese werden jedoch derzeit nicht für die Veröffentlichung auf Amazon CloudWatch unterstützt.

  • Im Multimodell-Endpunkt (MME)-Modus von SageMaker AI läuft Triton in einer Umgebung, in der Modell-Namespacing aktiviert sein muss, da jedes Modell (außer Ensemble-Modellen) so behandelt wird, als ob es sich in seinem eigenen Modell-Repository befände. Derzeit führt dies zu einer Einschränkung für Metriken. Wenn Modell-Namespacing aktiviert ist, unterscheidet Triton die Metriken nicht zwischen zwei Modellen mit demselben Namen, die zu unterschiedlichen Ensembles gehören. Um das Problem zu umgehen, stellen Sie sicher, dass jedes bereitgestellte Modell einen eindeutigen Namen hat. Dies macht es auch einfacher, Ihre Metriken in CloudWatch nachzuschlagen.

Umgebungsvariablen

In der folgenden Tabelle sind die unterstützten Umgebungsvariablen für Triton in SageMaker AI aufgeführt.

Umgebungsvariable Beschreibung Typ Mögliche Werte

SAGEMAKER_MULTI_MODEL

Ermöglicht Triton den Betrieb im Multimodell-Endpunktmodus von SageMaker AI.

Boolesch

true, false

SAGEMAKER_TRITON_DEFAULT_MODEL_NAME

Geben Sie das Modell an, das im SageMaker-AI-Einzelmodellmodus (Standard) geladen werden soll. Geben Sie für den Ensemble-Modus den Namen des eigentlichen Ensembles an.

String

<model_name> wie in config.pbtxt angegeben

SAGEMAKER_TRITON_PING_MODE

'ready' ist der Standardmodus im Einzelmodellmodus von SageMaker AI und 'live' ist der Standardmodus im Multimodell-Endpunktmodus von SageMaker AI.

String

ready, live

SAGEMAKER_TRITON_DISABLE_MODEL_NAMESPACING

Im Triton-Container von SageMaker AI ist dies standardmäßig auf true eingestellt.

Boolesch

true, false

SAGEMAKER_BIND_TO_PORT

In SageMaker AI lautet der Standardport 8080. In Szenarien mit mehreren Containern können Sie eine Anpassung an einen anderen Port vornehmen.

String

<port_number>

SAGEMAKER_SAFE_PORT_RANGE

Dies wird von der SageMaker-AI-Plattform festgelegt, wenn der Multi-Container-Modus verwendet wird.

String

<port_1><port_2>

SAGEMAKER_TRITON_ALLOW_GRPC

SageMaker AI unterstützt GRPC derzeit zwar nicht, aber wenn Sie Triton vor einem benutzerdefinierten Reverse-Proxy verwenden, können Sie GRPC aktivieren.

Boolesch

true, false

SAGEMAKER_TRITON_GRPC_PORT

Der Standardport für GRPC ist 8001, aber Sie können ihn ändern.

String

<port_number>

SAGEMAKER_TRITON_THREAD_COUNT

Sie können die Anzahl der Standard-HTTP-Request-Handler-Threads festlegen.

String

<number>

SAGEMAKER_TRITON_LOG_VERBOSE

true standardmäßig in SageMaker AI, aber Sie können diese Option selektiv ausschalten.

Boolesch

true, false

SAGEMAKER_TRITON_LOG_INFO

false standardmäßig auf SageMaker AI.

Boolesch

true, false

SAGEMAKER_TRITON_LOG_WARNING

false standardmäßig auf SageMaker AI.

Boolesch

true, false

SAGEMAKER_TRITON_LOG_ERROR

false standardmäßig auf SageMaker AI.

Boolesch

true, false

SAGEMAKER_TRITON_SHM_DEFAULT_BYTE_SIZE

Geben Sie die Shm-Größe für das Python-Backend in Byte an. Der Standardwert ist 16 MB, kann aber erhöht werden.

String

<number>

SAGEMAKER_TRITON_SHM_GROWTH_BYTE_SIZE

Geben Sie die Shm-Wachstumsgröße für das Python-Backend in Byte an. Der Standardwert ist 1 MB, kann aber erhöht werden, um größere Inkremente zu ermöglichen.

String

<number>

SAGEMAKER_TRITON_TENSORFLOW_VERSION

Der Standardwert ist 2. Triton unterstützt Tensorflow 2 ab Triton v23.04 nicht mehr. Sie können diese Variable für frühere Versionen konfigurieren.

String

<number>

SAGEMAKER_TRITON_MODEL_LOAD_GPU_LIMIT

Schränken Sie den maximalen Prozentsatz des GPU-Speichers ein, der für das Laden des Modells verwendet wird, sodass der Rest für die Inferenzanforderungen verwendet werden kann.

String

<number>

SAGEMAKER_TRITON_ALLOW_METRICS

false standardmäßig auf SageMaker AI.

Boolesch

true, false

SAGEMAKER_TRITON_METRICS_PORT

Der Standard-Port ist 8002.

String

<number>

SAGEMAKER_TRITON_PUBLISH_METRICS_TO_CLOUDWATCH

false standardmäßig auf SageMaker AI. Setzen Sie diese Variable auf true, um die Übertragung von Triton-Standardmetriken an Amazon CloudWatch zu ermöglichen. Wenn diese Option aktiviert ist, sind Sie für die CloudWatch-Kosten verantwortlich, wenn Metriken in Ihrem Konto veröffentlicht werden.

Boolesch

true, false

SAGEMAKER_TRITON_CLOUDWATCH_LOG_GROUP

Erforderlich, wenn Sie die Veröffentlichung von Metriken in CloudWatch aktiviert haben.

String

<cloudwatch_log_group_name>

SAGEMAKER_TRITON_CLOUDWATCH_METRIC_NAMESPACE

Erforderlich, wenn Sie die Veröffentlichung von Metriken in CloudWatch aktiviert haben.

String

<cloudwatch_metric_namespace>

SAGEMAKER_TRITON_ADDITIONAL_ARGS

Hängt beim Starten des Triton-Servers alle zusätzlichen Argumente an.

String

<additional_args>