Erstellen Sie Ihren eigenen Container für Endgeräte SageMaker mit mehreren Modellen - 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.

Erstellen Sie Ihren eigenen Container für Endgeräte SageMaker mit mehreren Modellen

In den folgenden Abschnitten erfahren Sie, wie Sie Ihren eigenen Container und Ihre eigenen Abhängigkeiten in Multimodell-Endpunkte einbringen können.

Bringen Sie Ihre eigenen Abhängigkeiten für Endpunkte mit mehreren Modellen auf unterstützten Instanzen mit CPU

Wenn keines der vorgefertigten Container-Images Ihren Anforderungen entspricht, können Sie Ihren eigenen Container für die Verwendung mit CPU unterstützten Endpunkten mit mehreren Modellen erstellen.

Von benutzerdefinierten Amazon Elastic Container Registry (AmazonECR) -Images, die in Amazon bereitgestellt SageMaker werden, wird erwartet, Verwenden eigenen Inferenzcodes mit Hosting-Services dass sie den unter beschriebenen Basisvertrag einhalten, der die SageMaker Interaktion mit einem Docker-Container regelt, der Ihren eigenen Inferenzcode ausführt. Damit ein Container mehrere Modelle gleichzeitig laden und bedienen kann, müssen zusätzliche Verhaltensweisen APIs beachtet werden. Dieser zusätzliche Vertrag beinhaltet neue Modelle APIs zum Laden, Auflisten, Abrufen und Entladen sowie ein anderes Modell API zum Aufrufen von Modellen. Es gibt auch unterschiedliche Verhaltensweisen für Fehlerszenarien, die eingehalten werden APIs müssen. Um anzugeben, dass der Container die zusätzlichen Anforderungen erfüllt, können Sie der Dockerfile-Datei den folgenden Befehl hinzufügen:

LABEL com.amazonaws.sagemaker.capabilities.multi-models=true

SageMaker fügt auch eine Umgebungsvariable in den Container ein

SAGEMAKER_MULTI_MODEL=true

Wenn Sie einen Multimodell-Endpunkt für eine serielle Inferenz-Pipline erstellen, muss Ihre Docker-Datei über die erforderlichen Kennzeichnungen für Multimodell- und serielle Inferenz-Pipelines verfügen. Weitere Informationen zu seriellen Informations-Pipelines finden Sie unter Echtzeit-Prognosen mit einer Inferenz-Pipeline.

Damit Sie diese Anforderungen für einen benutzerdefinierten Container implementieren können, stehen zwei Bibliotheken zur Verfügung:

  • Multi Model Server ist ein Open-Source-Framework für die Bereitstellung von Modellen für maschinelles Lernen, die in Containern installiert werden können, um das Frontend bereitzustellen, das die Anforderungen für den neuen Endpoint-Container mit mehreren Modellen erfüllt. APIs Es bietet die HTTP Frontend- und Modellverwaltungsfunktionen, die für Endpunkte mit mehreren Modellen erforderlich sind, um mehrere Modelle in einem einzigen Container zu hosten, Modelle dynamisch in den Container zu laden und aus dem Container zu entladen und Inferenzen für ein bestimmtes geladenes Modell durchzuführen. Es bietet auch ein steckbares Backend, das einen steckbaren benutzerdefinierten Backend-Handler unterstützt, in dem Sie Ihren eigenen Algorithmus implementieren können.

  • SageMaker Inference Toolkit ist eine Bibliothek, die Multi Model Server mit einer Konfiguration und Einstellungen bootet, die ihn mit Endpunkten aus mehreren Modellen kompatibel machen. SageMaker Darüber hinaus können Sie wichtige Leistungsparameter, z. B. die Anzahl der Arbeitskräfte pro Modell, je nach den Anforderungen Ihres Szenarios optimieren.

Bringen Sie Ihre eigenen Abhängigkeiten für Endpunkte mit mehreren Modellen auf unterstützten Instanzen mit GPU

Die Funktion Bring Your Own Container (BYOC) auf Endpunkten mit mehreren Modellen und GPU unterstützten Instanzen wird derzeit von den Bibliotheken Multi Model Server und SageMaker Inference Toolkit nicht unterstützt.

Für die Erstellung von Endpunkten mit mehreren Modellen und GPU unterstützten Instanzen können Sie den SageMaker unterstützten NVIDIATriton Inference Server mit den Triton Inference Containern verwenden. NVIDIA Um Ihre eigenen Abhängigkeiten mitzubringen, können Sie Ihren eigenen Container mit dem SageMaker unterstützten NVIDIATriton Inference Server als Basis-Image für Ihre Docker-Datei erstellen:

FROM 301217895009.dkr.ecr.us-west-2.amazonaws.com/sagemaker-tritonserver:22.07-py3
Wichtig

Container mit dem Triton Inference Server sind die einzigen unterstützten Container, die Sie für unterstützte Endpunkte mit mehreren Modellen verwenden können. GPU

Verwenden Sie das Inference Toolkit SageMaker

Anmerkung

Das SageMaker Inference Toolkit wird nur für CPU unterstützte Endpunkte mit mehreren Modellen unterstützt. Das SageMaker Inference Toolkit wird derzeit nicht für unterstützte Endpunkte mit mehreren Modellen unterstützt. GPU

Vorgefertigte Container, die Multimodell-Endpunkte unterstützen, sind unter aufgeführt Unterstützte Algorithmen, Frameworks und Instances. Wenn Sie ein anderes Framework oder einen anderen Algorithmus verwenden möchten, müssen Sie einen Container erstellen. Der einfachste Weg, dies zu tun, besteht darin, das SageMaker Inference Toolkit zu verwenden, um einen vorhandenen vorgefertigten Container zu erweitern. Das SageMaker Inferenz-Toolkit ist eine Implementierung für den Server mit mehreren Modellen (MMS), der Endpunkte erstellt, in denen sie bereitgestellt werden können. SageMaker Ein Beispielnotizbuch, das zeigt, wie ein benutzerdefinierter Container eingerichtet und bereitgestellt wird, der Endpunkte mit mehreren Modellen unterstützt, finden Sie im SageMaker Beispielnotizbuch für Endgeräte mit mehreren Modellen. BYOC

Anmerkung

Das SageMaker Inferenz-Toolkit unterstützt nur Python-Modellhandler. Wenn Sie Ihren Handler in einer anderen Sprache implementieren möchten, müssen Sie Ihren eigenen Container erstellen, der den zusätzlichen Multimodell-Endpunkt implementiert. APIs Weitere Informationen finden Sie unter Vertrag für individuelle Container für Multimodell-Endpunkte.

Um einen Container mithilfe des SageMaker Inferenz-Toolkits zu erweitern
  1. Erstellen Sie einen Modell-Handler. MMSerwartet einen Model-Handler, bei dem es sich um eine Python-Datei handelt, die Funktionen zur Vorverarbeitung, zum Abrufen von Vorhersagen aus dem Modell und zur Verarbeitung der Ausgabe in einem Model-Handler implementiert. Ein Beispiel für einen Modell-Handler finden Sie unter model_handler.py aus dem Beispiel-Notebook.

  2. Importieren Sie das Inferenz-Toolkit und verwenden Sie seine model_server.start_model_server Funktion, um zu beginnen. MMS Das folgende Beispiel stammt aus der dockerd-entrypoint.py-Datei aus dem Beispiel-Notebook. Beachten Sie, dass der Aufruf an model_server.start_model_server den im vorherigen Schritt beschriebenen Modell-Handler übergibt:

    import subprocess import sys import shlex import os from retrying import retry from subprocess import CalledProcessError from sagemaker_inference import model_server def _retry_if_error(exception): return isinstance(exception, CalledProcessError or OSError) @retry(stop_max_delay=1000 * 50, retry_on_exception=_retry_if_error) def _start_mms(): # by default the number of workers per model is 1, but we can configure it through the # environment variable below if desired. # os.environ['SAGEMAKER_MODEL_SERVER_WORKERS'] = '2' model_server.start_model_server(handler_service='/home/model-server/model_handler.py:handle') def main(): if sys.argv[1] == 'serve': _start_mms() else: subprocess.check_call(shlex.split(' '.join(sys.argv[1:]))) # prevent docker exit subprocess.call(['tail', '-f', '/dev/null']) main()
  3. Kopieren Sie in Ihrer Dockerfile den Modell-Handler aus dem ersten Schritt und geben Sie die Python-Datei aus dem vorherigen Schritt als Eintrittspunkt in Ihrer Dockerfile an. Die folgenden Zeilen stammen aus der Dockerfile, die im Beispiel-Notebook verwendet wird:

    # Copy the default custom service file to handle incoming data and inference requests COPY model_handler.py /home/model-server/model_handler.py # Define an entrypoint script for the docker image ENTRYPOINT ["python", "/usr/local/bin/dockerd-entrypoint.py"]
  4. Erstellen und registrieren Sie Ihren Container. Das folgende Shell-Skript aus dem Beispiel-Notebook erstellt den Container und lädt ihn in ein Amazon-Elastic-Container-Registry-Repository in Ihrem AWS -Konto hoch:

    %%sh # The name of our algorithm algorithm_name=demo-sagemaker-multimodel cd container account=$(aws sts get-caller-identity --query Account --output text) # Get the region defined in the current configuration (default to us-west-2 if none defined) region=$(aws configure get region) region=${region:-us-west-2} fullname="${account}.dkr.ecr.${region}.amazonaws.com/${algorithm_name}:latest" # If the repository doesn't exist in ECR, create it. aws ecr describe-repositories --repository-names "${algorithm_name}" > /dev/null 2>&1 if [ $? -ne 0 ] then aws ecr create-repository --repository-name "${algorithm_name}" > /dev/null fi # Get the login command from ECR and execute it directly $(aws ecr get-login --region ${region} --no-include-email) # Build the docker image locally with the image name and then push it to ECR # with the full name. docker build -q -t ${algorithm_name} . docker tag ${algorithm_name} ${fullname} docker push ${fullname}

Sie können diesen Container jetzt verwenden, um Endpunkte mit mehreren Modellen bereitzustellen. SageMaker