Reduzieren Sie den Zeitaufwand für die Bereitstellung Ihrer Modelle in Amazon SageMaker zum Testen von PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Reduzieren Sie den Zeitaufwand für die Bereitstellung Ihrer Modelle in Amazon SageMaker zum Testen

Data Scientists trainieren ihre Modelle oft lokal und suchen nach einem geeigneten Hosting-Service, um ihre Modelle bereitzustellen. Leider gibt es keinen festgelegten Mechanismus oder Leitfaden für die Bereitstellung vorab trainierter Modelle in der Cloud. In diesem Beitrag betrachten wir die Bereitstellung trainierter Modelle für Amazon Sage Maker Hosting, um Ihre Bereitstellungszeit zu verkürzen.

SageMaker ist ein vollständig verwalteter Dienst für maschinelles Lernen (ML). Mit SageMaker können Sie ML-Modelle schnell erstellen und trainieren und sie direkt in einer produktionsbereiten gehosteten Umgebung bereitstellen. Außerdem müssen Sie keine Server verwalten. Sie erhalten eine integrierte Jupyter-Notebook-Umgebung mit einfachem Zugriff auf Ihre Datenquellen. Sie können Datenanalysen durchführen, Ihre Modelle trainieren und sie mit Ihren eigenen Algorithmen testen oder von SageMaker bereitgestellte ML-Algorithmen verwenden, die für die effiziente Ausführung großer Datensätze optimiert sind, die auf mehrere Computer verteilt sind. Training und Hosting werden nach Nutzungsminuten abgerechnet, ohne Mindestgebühren und ohne Vorauszahlungen.

Lösungsüberblick

Datenwissenschaftler trainieren manchmal Modelle lokal mit ihrer IDE und senden diese Modelle entweder zur Bereitstellung an das ML-Engineering-Team oder führen Vorhersagen einfach lokal auf leistungsstarken Maschinen aus. In diesem Beitrag stellen wir eine Python-Bibliothek vor, die den Prozess der Bereitstellung von Modellen für SageMaker vereinfacht Hosting auf Echtzeit- oder serverlosen Endpunkten.

Diese Python-Bibliothek bietet Datenwissenschaftlern eine einfache Schnittstelle für den schnellen Einstieg in SageMaker, ohne dass sie die Low-Level-Funktionalität von SageMaker kennen müssen.

Wenn Sie Modelle lokal mit Ihrer bevorzugten IDE trainiert haben und von der Skalierbarkeit der Cloud profitieren möchten, können Sie diese Bibliothek verwenden, um Ihr Modell in SageMaker bereitzustellen. Mit SageMaker haben Sie zusätzlich zu allen Skalierungsvorteilen einer Cloud-basierten ML-Plattform Zugriff auf speziell entwickelte Trainingstools (verteiltes Training, Hyperparameter-Tuning), Experimentmanagement, Modellmanagement, Bias-Erkennung, Modellerklärbarkeit und viele andere Funktionen, die Ihnen in jedem Aspekt des ML-Lebenszyklus helfen können. Sie können aus den drei beliebtesten Frameworks für ML wählen: Scikit-learn, PyTorch und TensorFlow, und Sie können den gewünschten Berechnungstyp auswählen. Dabei werden Standardwerte bereitgestellt, sodass Benutzer dieser Bibliothek ihre Modelle bereitstellen können, ohne komplexe Entscheidungen treffen oder neue Konzepte erlernen zu müssen. In diesem Beitrag zeigen wir Ihnen, wie Sie mit dieser Bibliothek beginnen und die Bereitstellung Ihrer ML-Modelle auf SageMaker-Hosting optimieren können.

Die Bibliothek finden Sie im GitHub-Repository.

Das SageMaker-Migrations-Toolkit

Das SageMakerMigration -Klasse ist über eine auf GitHub veröffentlichte Python-Bibliothek verfügbar. Anweisungen zur Installation dieser Bibliothek finden Sie im Repository; Stellen Sie sicher, dass Sie der README-Datei folgen, um Ihre Umgebung richtig einzurichten. Nachdem Sie diese Bibliothek installiert haben, wird im Rest dieses Beitrags erläutert, wie Sie sie verwenden können.

Das SageMakerMigration -Klasse besteht aus High-Level-Abstraktionen über SageMaker-APIs, die die Schritte zum Bereitstellen Ihres Modells in SageMaker erheblich reduzieren, wie in der folgenden Abbildung dargestellt. Dies ist zum Experimentieren gedacht, damit Entwickler schnell loslegen und SageMaker testen können. Es ist nicht für Produktionsmigrationen vorgesehen.

Für Scikit-learn-, PyTorch- und TensorFlow-Modelle unterstützt diese Bibliothek die Bereitstellung trainierter Modelle auf einem SageMaker-Endpunkt in Echtzeit oder einem serverlosen Endpunkt. Weitere Informationen zu den Inferenzoptionen in SageMaker finden Sie unter Modelle für Inferenz bereitstellen.

Echtzeit vs. serverlose Endpunkte

Echtzeit-Inferenz ist ideal für Inferenz-Workloads, bei denen Sie interaktive Echtzeitanforderungen mit geringer Latenz haben. Sie können Ihr Modell für SageMaker-Hostingdienste bereitstellen und erhalten einen Endpunkt, der für Inferenzen verwendet werden kann. Diese Endpunkte werden vollständig verwaltet und unterstützen die automatische Skalierung.

SageMaker Serverless Inference ist eine speziell entwickelte Inferenzoption, mit der Sie ML-Modelle einfach bereitstellen und skalieren können. Serverless Inference ist ideal für Workloads, die Leerlaufzeiten zwischen Datenverkehrsspitzen haben und Kaltstarts tolerieren können. Serverlose Endpunkte starten automatisch Rechenressourcen und skalieren sie je nach Datenverkehr ein und aus, wodurch die Notwendigkeit entfällt, Instanztypen auszuwählen oder Skalierungsrichtlinien zu verwalten. Dadurch entfällt das undifferenzierte schwere Heben der Auswahl und Verwaltung von Servern.

Abhängig von Ihrem Anwendungsfall möchten Sie Ihr Modell möglicherweise schnell auf SageMaker hosten, ohne dass eine Instanz immer aktiv ist und Kosten verursacht. In diesem Fall ist ein serverloser Endpunkt eine großartige Lösung.

Bereiten Sie Ihr trainiertes Modell und Ihr Inferenzskript vor

Nachdem Sie das Modell identifiziert haben, das Sie auf SageMaker bereitstellen möchten, müssen Sie sicherstellen, dass das Modell SageMaker im richtigen Format präsentiert wird. SageMaker-Endpunkte bestehen im Allgemeinen aus zwei Komponenten: dem trainierten Modellartefakt (.pth, .pkl usw.) und einem Inferenzskript. Das Rückschlussskript ist nicht immer obligatorisch, aber wenn es nicht bereitgestellt wird, werden die Standardhandler für den von Ihnen verwendeten Serving-Container angewendet. Es ist wichtig, dieses Skript bereitzustellen, wenn Sie Ihre Eingabe-/Ausgabefunktionalität für Rückschlüsse anpassen müssen.

Das trainierte Modellartefakt ist einfach ein gespeichertes Scikit-learn-, PyTorch- oder TensorFlow-Modell. Bei Scikit-learn ist dies normalerweise eine Pickle-Datei, bei PyTorch eine .pt- oder .pth-Datei und bei TensorFlow ein Ordner mit Assets, .pb-Dateien und anderen Variablen.

Im Allgemeinen müssen Sie steuern können, wie Ihr Modell Eingaben verarbeitet und Inferenzen durchführt, und das Ausgabeformat für Ihre Antwort steuern. Mit SageMaker können Sie eine Inferenzskript um diese Anpassung hinzuzufügen. Jedes von SageMaker verwendete Inferenzskript muss über eine oder mehrere der folgenden vier Handler-Funktionen verfügen: model_fn, input_fn, predict_fn und output_fn.

Beachten Sie, dass diese vier Funktionen gelten für PyTorch machen Scikit-lernen Container speziell. TensorFlow hat etwas andere Handler, weil es in integriert ist TensorFlow-Bereitstellung. Für ein Inferenzskript mit TensorFlow haben Sie zwei Modellhandler: input_handler und output_handler. Auch diese haben den gleichen Vor- und Nachverarbeitungszweck, mit dem Sie arbeiten können, aber sie sind für die Integration etwas anders konfiguriert TensorFlow-Bereitstellung. Für PyTorch-Modelle ist model_fn eine obligatorische Funktion, die im Inferenzskript enthalten sein muss.

model_fn

Dies ist die Funktion, die zuerst aufgerufen wird, wenn Sie Ihren SageMaker-Endpunkt aufrufen. Hier schreiben Sie Ihren Code zum Laden des Modells. Zum Beispiel:

def model_fn(model_dir):
    model = Your_Model()
    with open(os.path.join(model_dir, 'model.pth'), 'rb') as f:
        model.load_state_dict(torch.load(f))
    return model

Je nach Framework und Modelltyp kann sich dieser Code ändern, aber die Funktion muss ein initialisiertes Modell zurückgeben.

input_fn

Dies ist die zweite Funktion, die aufgerufen wird, wenn Ihr Endpunkt aufgerufen wird. Diese Funktion nimmt die an den Endpunkt gesendeten Daten für die Inferenz und parst sie in das Format, das für das Modell erforderlich ist, um eine Vorhersage zu generieren. Zum Beispiel:

def input_fn(request_body, request_content_type):
    """An input_fn that loads a pickled tensor"""
    if request_content_type == 'application/python-pickle':
        return torch.load(BytesIO(request_body))
    else:
        # Handle other content-types here or raise an Exception
        # if the content type is not supported.
        pass

Das request_body enthält die Daten, die zum Generieren von Inferenzen aus dem Modell verwendet werden, und wird in dieser Funktion analysiert, sodass sie das erforderliche Format aufweisen.

vorhersage_fn

Dies ist die dritte Funktion, die aufgerufen wird, wenn Ihr Modell aufgerufen wird. Diese Funktion übernimmt die vorverarbeiteten Eingabedaten, die von zurückgegeben werden input_fn und verwendet das von zurückgegebene Modell model_fn um die Vorhersage zu treffen. Zum Beispiel:

def predict_fn(input_data, model):
    device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
    model.to(device)
    model.eval()
    with torch.no_grad():
        return model(input_data.to(device))

Sie können optional hinzufügen output_fn um die Ausgabe von zu analysieren predict_fn bevor Sie es an den Kunden zurücksenden. Die Funktionssignatur ist def output_fn(prediction, content_type).

Verschieben Sie Ihr vortrainiertes Modell nach SageMaker

Nachdem Sie Ihre trainierte Modelldatei und Ihr Inferenzskript haben, müssen Sie diese Dateien wie folgt in einem Ordner ablegen:

#SKLearn Model

model_folder/
    model.pkl
    inference.py
    
# Tensorflow Model
model_folder/
    0000001/
        assets/
        variables/
        keras_metadata.pb
        saved_model.pb
    inference.py
    
# PyTorch Model
model_folder/
    model.pth
    inference.py

Nachdem Ihr Modell und Ihr Inferenzskript vorbereitet und in dieser Ordnerstruktur gespeichert wurden, ist Ihr Modell bereit für die Bereitstellung auf SageMaker. Siehe folgenden Code:

from sagemaker_migration import frameworks as fwk

if __name__ == "__main__":
    ''' '''
    sk_model = fwk.SKLearnModel(
        version = "0.23-1", 
        model_data = 'model.joblib',
        inference_option = 'real-time',
        inference = 'inference.py',
        instance_type = 'ml.m5.xlarge'
    )
    sk_model.deploy_to_sagemaker()

Stellen Sie nach der Bereitstellung Ihres Endpunkts sicher, dass Sie alle Ressourcen bereinigen, die Sie nicht über die SageMaker-Konsole oder über die verwenden delete_endpoint Boto3-API-Aufruf.

Zusammenfassung

Das Ziel des SageMaker Migration Toolkit-Projekts ist es, Datenwissenschaftlern das Onboarding ihrer Modelle in SageMaker zu erleichtern, um die Vorteile der Cloud-basierten Inferenz zu nutzen. Das Repository wird sich weiterentwickeln und weitere Optionen für die Migration von Workloads zu SageMaker unterstützen. Der Code ist Open Source und wir begrüßen Community-Beiträge durch Pull-Requests und Issues.

Probieren Sie auch die GitHub-Repository um mehr über die Verwendung des SageMaker-Migrations-Toolkits zu erfahren, und zögern Sie nicht, auch Beispiele oder Feature-Anfragen beizutragen, um sie dem Projekt hinzuzufügen!


Über die Autoren

Reduzieren Sie den Zeitaufwand für die Bereitstellung Ihrer Modelle in Amazon SageMaker zum Testen von PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.Kirit Thadaka ist ein ML Solutions Architect, der im Team von Amazon SageMaker Service SA arbeitet. Bevor er zu AWS kam, arbeitete Kirit einige Zeit in KI-Startups in der Frühphase, gefolgt von einer Zeit als Berater in verschiedenen Rollen in den Bereichen KI-Forschung, MLOps und technische Führung.

Reduzieren Sie den Zeitaufwand für die Bereitstellung Ihrer Modelle in Amazon SageMaker zum Testen von PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.Widder Vegiraju ist ML-Architekt im SageMaker-Serviceteam. Er konzentriert sich darauf, Kunden bei der Erstellung und Optimierung ihrer KI/ML-Lösungen auf Amazon SageMaker zu unterstützen. In seiner Freizeit liebt er es zu reisen und zu schreiben.

Zeitstempel:

Mehr von AWS Maschinelles Lernen