Stellen Sie Modelle mit TorchServe bereit - 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.

Stellen Sie Modelle mit TorchServe bereit

TorchServe ist der empfohlene Modellserver für PyTorch, der im AWS PyTorch Deep Learning Container (DLC) vorinstalliert ist. Dieses leistungsstarke Tool bietet Kunden eine konsistente und benutzerfreundliche Erfahrung und bietet eine hohe Leistung bei der Bereitstellung mehrerer PyTorch-Modelle auf verschiedenen AWS Instances, einschließlich CPU, GPU, Neuron und Graviton, unabhängig von der Modellgröße oder Verteilung.

TorchServe unterstützt eine Vielzahl fortschrittlicher Funktionen, darunter dynamisches Batching, Microbatching, Modell-A/B-Tests, Streaming, Torch XLA, TensorRT, ONNX und IPEX. Darüber hinaus integriert es nahtlos PiPPy, die Lösung für große Modelle von PyTorch, und ermöglicht so eine effiziente Handhabung großer Modelle. Darüber hinaus erweitert TorchServe seine Unterstützung auf beliebte Open-Source-Bibliotheken wie DeepSpeed, Accelerate, Fast Transformers und mehr und erweitert so seine Funktionen noch weiter. Mit TorchServe können AWS Benutzer ihre PyTorch-Modelle vertrauensvoll einsetzen und bedienen und dabei die Vorteile der Vielseitigkeit und optimierten Leistung für verschiedene Hardwarekonfigurationen und Modelltypen nutzen. Nähere Informationen finden Sie in der PyTorch-Dokumentation und in TorchServe auf GitHub.

In der folgenden Tabelle sind die von TorchServe unterstützten AWS PyTorch-DLCs aufgeführt.

Instance-Typ Link zu SageMaker AI PyTorch DLC

CPU und GPU

SageMaker AI PyTorch Container

Neuron

PyTorch Neuron Container

Graviton

SageMaker AI PyTorch Graviton Container

In den folgenden Abschnitten wird das Setup zum Erstellen und Testen von PyTorch-DLCs auf Amazon SageMaker AI beschrieben.

Erste Schritte

Stellen Sie vor Beginn sicher, dass die folgenden Voraussetzungen erfüllt sind:

  1. Stellen Sie sicher, dass Sie Zugriff auf ein AWS Konto haben. Richten Sie Ihre Umgebung so ein, dass der AWS CLI entweder über einen AWS IAM-Benutzer oder eine IAM-Rolle auf Ihr Konto zugreifen kann. Wir empfehlen die Verwendung einer IAM-Rolle. Zu Testzwecken in Ihrem persönlichen Konto können Sie der IAM-Rolle die folgenden Richtlinien für verwaltete Berechtigungen hinzufügen:

  2. Konfigurieren Sie Ihre Abhängigkeiten lokal wie im folgenden Beispiel gezeigt:

    from datetime import datetime import os import json import logging import time # External Dependencies: import boto3 from botocore.exceptions import ClientError import sagemaker sess = boto3.Session() sm = sess.client("sagemaker") region = sess.region_name account = boto3.client("sts").get_caller_identity().get("Account") smsess = sagemaker.Session(boto_session=sess) role = sagemaker.get_execution_role() # Configuration: bucket_name = smsess.default_bucket() prefix = "torchserve" output_path = f"s3://{bucket_name}/{prefix}/models" print(f"account={account}, region={region}, role={role}")
  3. Rufen Sie das PyTorch-DLC-Image ab, wie im folgenden Beispiel gezeigt.

    SageMaker AI PyTorch DLC Images sind in allen AWS-Regionen verfügbar. Weitere Informationen finden Sie in der Liste der DLC-Container-Images.

    baseimage = sagemaker.image_uris.retrieve( framework="pytorch", region="<region>", py_version="py310", image_scope="inference", version="2.0.1", instance_type="ml.g4dn.16xlarge", )
  4. Einen lokalen Workspace erstellen.

    mkdir -p workspace/

Hinzufügen eines Pakets

In den folgenden Abschnitten wird beschrieben, wie Sie Ihrem PyTorch-DLC-Image Pakete hinzufügen und vorinstallieren.

BYOC-Anwendungsfälle

In den folgenden Schritten wird beschrieben, wie Sie Ihrem PyTorch-DLC-Image ein Paket hinzufügen. Weitere Informationen zum Anpassen Ihres Containers finden Sie unter Benutzerdefinierte Images für AWS Deep Learning Containers erstellen.

  1. Angenommen, Sie möchten dem PyTorch DLC-Docker-Image ein Paket hinzufügen. Erstellen Sie ein Dockerfile unter dem docker Verzeichnis, wie im folgenden Beispiel gezeigt:

    mkdir -p workspace/docker cat workspace/docker/Dockerfile ARG BASE_IMAGE FROM $BASE_IMAGE #Install any additional libraries RUN pip install transformers==4.28.1
  2. Erstellen und veröffentlichen Sie das benutzerdefinierte Docker-Image mithilfe des folgenden Skripts build_and_push.sh.

    # Download script build_and_push.sh to workspace/docker ls workspace/docker build_and_push.sh Dockerfile # Build and publish your docker image reponame = "torchserve" versiontag = "demo-0.1" ./build_and_push.sh {reponame} {versiontag} {baseimage} {region} {account}

Anwendungsfälle für die Vorinstallation von SageMaker AI

Das folgende Beispiel zeigt, wie Sie ein Paket in Ihrem PyTorch-DLC-Container vorinstallieren. Sie müssen lokal im Verzeichnis workspace/code eine requirements.txt Datei erstellen.

mkdir -p workspace/code cat workspace/code/requirements.txt transformers==4.28.1

Erstellen Sie TorchServe-Modellartefakte

Im folgenden Beispiel verwenden wir das vortrainierte MNIST-Modell. Wir erstellen ein Verzeichnisworkspace/mnist, implementieren mnist_handler.py, indem wir den Anweisungen für den benutzerdefinierten Service von TorchServe folgen, und konfigurieren die Modellparameter (wie Batchgröße und Worker) in model-config.yaml. Anschließend verwenden wir das TorchServe-Tool torch-model-archiver, um die Modellartefakte zu erstellen und auf Amazon S3 hochzuladen.

  1. Konfigurieren Sie die Modellparameter in model-config.yaml.

    ls -al workspace/mnist-dev mnist.py mnist_handler.py mnist_cnn.pt model-config.yaml # config the model cat workspace/mnist-dev/model-config.yaml minWorkers: 1 maxWorkers: 1 batchSize: 4 maxBatchDelay: 200 responseTimeout: 300
  2. Erstellen Sie die Modellartefakte mit Torch-Model-Archiver.

    torch-model-archiver --model-name mnist --version 1.0 --model-file workspace/mnist-dev/mnist.py --serialized-file workspace/mnist-dev/mnist_cnn.pt --handler workspace/mnist-dev/mnist_handler.py --config-file workspace/mnist-dev/model-config.yaml --archive-format tgz

    Wenn Sie ein Paket vorinstallieren möchten, müssen Sie das code Verzeichnis in die Datei tar.gz aufnehmen.

    cd workspace torch-model-archiver --model-name mnist --version 1.0 --model-file mnist-dev/mnist.py --serialized-file mnist-dev/mnist_cnn.pt --handler mnist-dev/mnist_handler.py --config-file mnist-dev/model-config.yaml --archive-format no-archive cd mnist mv ../code . tar cvzf mnist.tar.gz .
  3. Laden Sie mnist.tar.gz auf Amazon S3 hoch.

    # upload mnist.tar.gz to S3 output_path = f"s3://{bucket_name}/{prefix}/models" aws s3 cp mnist.tar.gz {output_path}/mnist.tar.gz

Verwendung von Endpunkten mit einem einzigen Modell für die Bereitstellung mit TorchServe

Das folgende Beispiel zeigt Ihnen, wie Sie einen Echtzeit-Inferenzendpunkt für ein einzelnes Modell erstellen, das Modell auf dem Endpunkt bereitstellen und den Endpunkt mithilfe des Amazon SageMaker Python SDK testen.

from sagemaker.model import Model from sagemaker.predictor import Predictor # create the single model endpoint and deploy it on SageMaker AI model = Model(model_data = f'{output_path}/mnist.tar.gz', image_uri = baseimage, role = role, predictor_cls = Predictor, name = "mnist", sagemaker_session = smsess) endpoint_name = 'torchserve-endpoint-' + time.strftime("%Y-%m-%d-%H-%M-%S", time.gmtime()) predictor = model.deploy(instance_type='ml.g4dn.xlarge', initial_instance_count=1, endpoint_name = endpoint_name, serializer=JSONSerializer(), deserializer=JSONDeserializer()) # test the endpoint import random import numpy as np dummy_data = {"inputs": np.random.rand(16, 1, 28, 28).tolist()} res = predictor.predict(dummy_data)

Verwendung von Endpunkten mit mehreren Modellen für die Bereitstellung mit TorchServe

Multi-Modell-Endpunkte sind eine skalierbare und kostengünstige Lösung für das Hosting einer großen Anzahl von Modellen hinter einem Endpunkt. Sie verbessern die Nutzung der Endgeräte, indem sie dieselbe Ressourcenflotte gemeinsam nutzen und Container zum Hosten all Ihrer Modelle bereitstellen. Sie reduzieren auch den Bereitstellungsaufwand, da SageMaker AI das dynamische Laden und Entladen von Modellen sowie die Skalierung von Ressourcen auf der Grundlage von Verkehrsmustern verwaltet. Endgeräte mit mehreren Modellen eignen sich besonders für Deep-Learning- und generative KI-Modelle, die eine beschleunigte Rechenleistung erfordern.

Durch die Verwendung von TorchServe auf Multimodell-Endpunkten von SageMaker AI können Sie Ihre Entwicklung beschleunigen, indem Sie einen Serving-Stack verwenden, mit dem Sie vertraut sind, und gleichzeitig die gemeinsame Nutzung von Ressourcen und die vereinfachte Modellverwaltung nutzen, die Multimodell-Endpunkte von SageMaker AI bieten.

Das folgende Beispiel zeigt Ihnen, wie Sie einen Multimodell-Endpunkt erstellen, das Modell auf dem Endpunkt bereitstellen und den Endpunkt mithilfe des Amazon SageMaker Python SDK testen. Weitere Details finden Sie in diesem Notebook-Beispiel.

from sagemaker.multidatamodel import MultiDataModel from sagemaker.model import Model from sagemaker.predictor import Predictor # create the single model endpoint and deploy it on SageMaker AI model = Model(model_data = f'{output_path}/mnist.tar.gz', image_uri = baseimage, role = role, sagemaker_session = smsess) endpoint_name = 'torchserve-endpoint-' + time.strftime("%Y-%m-%d-%H-%M-%S", time.gmtime()) mme = MultiDataModel( name = endpoint_name, model_data_prefix = output_path, model = model, sagemaker_session = smsess) mme.deploy( initial_instance_count = 1, instance_type = "ml.g4dn.xlarge", serializer=sagemaker.serializers.JSONSerializer(), deserializer=sagemaker.deserializers.JSONDeserializer()) # list models list(mme.list_models()) # create mnist v2 model artifacts cp mnist.tar.gz mnistv2.tar.gz # add mnistv2 mme.add_model(mnistv2.tar.gz) # list models list(mme.list_models()) predictor = Predictor(endpoint_name=mme.endpoint_name, sagemaker_session=smsess) # test the endpoint import random import numpy as np dummy_data = {"inputs": np.random.rand(16, 1, 28, 28).tolist()} res = predictor.predict(date=dummy_data, target_model="mnist.tar.gz")

Metriken

TorchServe unterstützt sowohl Metriken auf System- als auch auf Modellebene. Sie können Metriken entweder im Protokollformatmodus oder im Prometheus-Modus über die Umgebungsvariable TS_METRICS_MODE aktivieren. Sie können die zentrale Metrikkonfigurationsdatei von TorchServe verwendenmetrics.yaml, um die Arten von Metriken anzugeben, die verfolgt werden sollen, z. B. Anzahl der Anfragen, Latenz, Speichernutzung, GPU-Auslastung und mehr. Anhand dieser Datei können Sie Einblicke in die Leistung und den Zustand der bereitgestellten Modelle gewinnen und das Verhalten des TorchServe-Servers effektiv in Echtzeit überwachen. Ausführlichere Informationen finden Sie in der Dokumentation zu den TorchServe-Metriken.

Sie können über den Amazon CloudWatch-Protokollfilter auf TorchServe-Metrikprotokolle zugreifen, die dem StatsD-Format ähneln. Im Folgenden finden Sie ein Beispiel für ein TorchServe-Metrikprotokoll:

CPUUtilization.Percent:0.0|#Level:Host|#hostname:my_machine_name,timestamp:1682098185 DiskAvailable.Gigabytes:318.0416717529297|#Level:Host|#hostname:my_machine_name,timestamp:1682098185