Verbessern Sie die hochwertige Forschung mit Hugging Face und Amazon SageMaker asynchronen Inferenzendpunkten PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Verbessern Sie hochwertige Forschung mit Hugging Face und asynchronen Inferenzendpunkten von Amazon SageMaker

Viele unserer AWS-Kunden bieten Forschung, Analysen und Business Intelligence als Service an. Diese Art von Forschung und Business Intelligence ermöglicht es ihren Endkunden, Märkten und Wettbewerbern einen Schritt voraus zu sein, Wachstumschancen zu erkennen und Probleme proaktiv anzugehen. Einige unserer Kunden aus dem Finanzdienstleistungssektor recherchieren beispielsweise für Aktien, Hedgefonds und Investmentmanagementgesellschaften, um ihnen dabei zu helfen, Trends zu verstehen und Portfoliostrategien zu identifizieren. In der Gesundheitsbranche ist ein immer größerer Teil der Gesundheitsforschung heute informationsbasiert. Ein großer Teil der Forschung beinhaltet die Analyse von Daten, die ursprünglich für Diagnose-, Behandlungs- oder andere Forschungsprojekte gesammelt wurden und nun für neue Forschungszwecke verwendet werden. Diese Formen der Gesundheitsforschung haben zu einer wirksamen Primärprävention zur Vermeidung neuer Fälle, zur Sekundärprävention zur Früherkennung und zur Prävention für ein besseres Krankheitsmanagement geführt. Die Forschungsergebnisse verbessern nicht nur die Lebensqualität, sondern tragen auch zur Senkung der Gesundheitsausgaben bei.

Kunden neigen dazu, die Informationen aus öffentlichen und privaten Quellen zu verdauen. Anschließend wenden sie etablierte oder benutzerdefinierte NLP-Modelle (Natural Language Processing) an, um einen Trend zusammenzufassen und zu identifizieren und auf der Grundlage dieser Informationen Erkenntnisse zu generieren. Die NLP-Modelle, die für diese Art von Forschungsaufgaben verwendet werden, befassen sich mit großen Modellen und umfassen normalerweise lange Artikel, die angesichts der Größe des Korpus zusammengefasst werden müssen – und dedizierte Endpunkte, die derzeit nicht kostenoptimiert sind. Diese Anwendungen erhalten zu unterschiedlichen Tageszeiten einen Burst eingehenden Datenverkehrs.

Wir glauben, dass Kunden von der Möglichkeit, auf null herunterzuskalieren und ihre Inferenzfähigkeit nach Bedarf zu erweitern, sehr profitieren würden. Dies optimiert die Forschungskosten und macht dennoch keine Kompromisse bei der Qualität der Schlussfolgerungen. Dieser Beitrag beschreibt, wie Hugging Face zusammen mit Amazon Sage Maker asynchrone Inferenz kann dazu beitragen.

Sie können Textzusammenfassungsmodelle mit mehreren Deep-Learning-Frameworks wie TensorFlow, PyTorch und Apache MXNet erstellen. Diese Modelle haben typischerweise eine große Eingabenutzlast von mehreren Textdokumenten unterschiedlicher Größe. Fortgeschrittene Deep-Learning-Modelle erfordern eine rechenintensive Vorverarbeitung vor der Modellinferenz. Die Verarbeitungszeiten können bis zu einigen Minuten betragen, wodurch die Option zum Ausführen von Echtzeit-Inferenzen durch das Übergeben von Nutzlasten über eine HTTP-API entfällt. Stattdessen müssen Sie Eingabenutzlasten asynchron aus einem Objektspeicher wie z Amazon Simple Storage-Service (Amazon S3) mit automatischer Warteschlange und einem vordefinierten Parallelitätsschwellenwert. Das System sollte in der Lage sein, Statusbenachrichtigungen zu empfangen und unnötige Kosten zu reduzieren, indem Ressourcen bereinigt werden, wenn die Aufgaben abgeschlossen sind.

SageMaker hilft Datenwissenschaftlern und Entwicklern, qualitativ hochwertige Modelle für maschinelles Lernen (ML) schnell vorzubereiten, zu erstellen, zu trainieren und bereitzustellen, indem es eine breite Palette von Funktionen zusammenführt, die speziell für ML entwickelt wurden. SageMaker bietet die fortschrittlichsten Open-Source-Model-Serving-Container für XGBoost (Container, SDK), Scikit-Lernen (Container, SDK), PyTorch (Container, SDK), TensorFlow (Container, SDK) und Apache MXNet (Container, SDK).

SageMaker bietet vier Optionen zum Bereitstellen trainierter ML-Modelle zum Generieren von Rückschlüssen auf neue Daten.
  1. Echtzeit-Inferenz Endpunkte eignen sich für Workloads, die mit geringen Latenzanforderungen in der Größenordnung von ms bis Sekunden verarbeitet werden müssen.
  2. Batch-Transformation ist ideal für Offline-Vorhersagen für große Datenmengen.
  3. Serverlose Amazon SageMaker-Inferenz (im Vorschaumodus und zum jetzigen Zeitpunkt nicht für Produktionsworkloads empfohlen) ist eine speziell entwickelte Inferenzoption, die es Ihnen erleichtert, ML-Modelle bereitzustellen und zu skalieren. Serverless Inference ist ideal für Workloads, die Leerlaufzeiten zwischen Datenverkehrsspitzen haben und Kaltstarts tolerieren können.
  4. Asynchrone Inferenz Endpunkte stellen eingehende Anfragen in eine Warteschlange. Sie sind ideal für Workloads, bei denen die Anforderungsgrößen groß sind (bis zu 1 GB) und die Inferenzverarbeitungszeiten in der Größenordnung von Minuten liegen (bis zu 15 Minuten). Mit asynchroner Inferenz können Sie Kosten sparen, indem Sie die Anzahl der Instanzen automatisch auf null skalieren, wenn keine Anforderungen zu verarbeiten sind.

Lösungsüberblick

In diesem Beitrag stellen wir eine PEGASUS-Modell das für die Textzusammenfassung vortrainiert wurde Gesicht umarmen zu SageMaker-Hosting-Dienste. Der Einfachheit halber verwenden wir das Modell von Hugging Face. Sie können jedoch Feinabstimmung des Modells basierend auf einem benutzerdefinierten Datensatz. Sie können auch andere Modelle ausprobieren, die in der verfügbar sind Modellhub mit umarmendem Gesicht. Wir stellen auch einen asynchronen Inferenzendpunkt bereit, der dieses Modell hostet, von dem Sie Vorhersagen erhalten können.

Der Inferenzhandler des asynchronen Inferenzendpunkts erwartet einen Artikel als Eingabenutzlast. Der zusammengefasste Text des Artikels ist die Ausgabe. Die Ausgabe wird in der Datenbank gespeichert, um die Trends zu analysieren, oder nachgelagert für weitere Analysen eingespeist. Diese nachgelagerte Analyse leitet Dateneinblicke ab, die bei der Recherche helfen.

Wir demonstrieren, wie Sie mit asynchronen Inferenzendpunkten benutzerdefinierte Parallelitäts- und Abschlussbenachrichtigungen erhalten. Wir konfigurieren die automatische Skalierung von Instanzen hinter dem Endpunkt so, dass sie auf null herunterskaliert wird, wenn der Datenverkehr nachlässt, und wieder hochskaliert wird, wenn sich die Anforderungswarteschlange füllt.

Wir benützen auch Amazon CloudWatch Metriken zur Überwachung der Warteschlangengröße, der Gesamtverarbeitungszeit und der verarbeiteten Aufrufe.

Im folgenden Diagramm zeigen wir die Schritte, die beim Durchführen einer Inferenz mit einem asynchronen Inferenzendpunkt erforderlich sind.

Verbessern Sie die hochwertige Forschung mit Hugging Face und Amazon SageMaker asynchronen Inferenzendpunkten PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

  1. Unsere vortrainierten PEGASUS Das ML-Modell wird zuerst auf dem Skalierungsendpunkt gehostet.
  2. Der Benutzer lädt den zusammenzufassenden Artikel in einen Eingabe-S3-Bucket hoch.
  3. Der asynchrone Inferenzendpunkt wird mithilfe einer API aufgerufen.
  4. Nachdem die Inferenz abgeschlossen ist, wird das Ergebnis im Ausgabe-S3-Bucket gespeichert.
  5. An Amazon Simple Notification Service (Amazon SNS) Benachrichtigung wird an den Benutzer gesendet, um ihn über den abgeschlossenen Erfolg oder Misserfolg zu informieren.

Erstellen Sie einen asynchronen Inferenzendpunkt

Wir erstellen den asynchronen Inferenzendpunkt ähnlich einem in Echtzeit gehosteten Endpunkt. Die Schritte umfassen das Erstellen eines SageMaker-Modells, gefolgt von der Konfiguration des Endpunkts und der Bereitstellung des Endpunkts. Der Unterschied zwischen den beiden Arten von Endpunkten besteht darin, dass die Endpunktkonfiguration für asynchrone Rückschlüsse eine enthält AsyncInferenceConfig Sektion. Hier geben wir den S3-Ausgabepfad für die Ergebnisse des Endpunktaufrufs an und schließen optional SNS-Themen für Benachrichtigungen über Erfolg und Fehler ein. Wir geben auch die vom Kunden festgelegte maximale Anzahl gleichzeitiger Aufrufe pro Instanz an. Siehe folgenden Code:

AsyncInferenceConfig={ "OutputConfig": { "S3OutputPath": f"s3://{bucket}/{bucket_prefix}/output", # Optionally specify Amazon SNS topics for notifications "NotificationConfig": { "SuccessTopic": success_topic, "ErrorTopic": error_topic, } }, "ClientConfig": { "MaxConcurrentInvocationsPerInstance": 2 #increase this value up to throughput peak for ideal performance } }

Einzelheiten zur API zum Erstellen einer Endpunktkonfiguration für asynchrone Inferenz finden Sie unter Erstellen eines asynchronen Inferenzendpunkts.

Rufen Sie den asynchronen Inferenzendpunkt auf

Der folgende Screenshot zeigt einen kurzen Artikel, den wir als Eingabenutzlast verwenden:
Verbessern Sie die hochwertige Forschung mit Hugging Face und Amazon SageMaker asynchronen Inferenzendpunkten PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Der folgende Code lädt den Artikel als input.json Datei zu Amazon S3:

sm_session.upload_data( input_location, bucket=sm_session.default_bucket(), key_prefix=prefix, extra_args={"ContentType": "text/plain"})

Wir verwenden den Amazon S3-URI für die Eingabenutzlastdatei, um den Endpunkt aufzurufen. Das Antwortobjekt enthält den Ausgabespeicherort in Amazon S3, um die Ergebnisse nach Abschluss abzurufen:

response = sm_runtime.invoke_endpoint_async(EndpointName=endpoint_name, InputLocation=input_1_s3_location)
output_location = response['OutputLocation']

Der folgende Screenshot zeigt die Beispielausgabe nach der Zusammenfassung:
Verbessern Sie die hochwertige Forschung mit Hugging Face und Amazon SageMaker asynchronen Inferenzendpunkten PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Einzelheiten zur API zum Aufrufen eines asynchronen Inferenzendpunkts finden Sie unter Rufen Sie einen asynchronen Inferenzendpunkt auf.

Stellen Sie die Aufrufanforderungen mit benutzerdefinierter Parallelität in eine Warteschlange

Der asynchrone Inferenzendpunkt stellt die Aufrufanforderungen automatisch in die Warteschlange. Dies ist eine vollständig verwaltete Warteschlange mit verschiedenen Überwachungsmetriken und erfordert keine weitere Konfiguration. Es verwendet die MaxConcurrentInvocationsPerInstance -Parameter in der vorherigen Endpunktkonfiguration, um neue Anforderungen aus der Warteschlange zu verarbeiten, nachdem vorherige Anforderungen abgeschlossen sind. MaxConcurrentInvocationsPerInstance ist die maximale Anzahl gleichzeitiger Anforderungen, die vom SageMaker-Client an den Modellcontainer gesendet werden. Wenn kein Wert angegeben wird, wählt SageMaker einen optimalen Wert für Sie aus.

Instanzen mit automatischer Skalierung innerhalb des asynchronen Inferenzendpunkts

Wir legen die Auto Scaling-Richtlinie mit einer Mindestkapazität von null und einer maximalen Kapazität von fünf Instanzen fest. Im Gegensatz zu in Echtzeit gehosteten Endpunkten unterstützen asynchrone Inferenzendpunkte das Herunterskalieren von Instanzen auf null, indem die Mindestkapazität auf null gesetzt wird. Wir nehmen das ApproximateBacklogSizePerInstance Metrik für die Konfiguration der Skalierungsrichtlinie mit einem Zielwarteschlangenrückstand von fünf pro Instanz, um weiter aufzuskalieren. Wir legen die Abklingzeit für fest ScaleInCooldown bis 120 Sekunden und die ScaleOutCooldown bis 120 Sekunden. Der Wert für ApproximateBacklogSizePerInstance wird basierend auf dem Datenverkehr und Ihrer Empfindlichkeit gegenüber der Skalierungsgeschwindigkeit ausgewählt. Je schneller Sie skalieren, desto weniger Kosten entstehen Ihnen, aber desto wahrscheinlicher ist es, dass Sie erneut skalieren müssen, wenn neue Anfragen eingehen. Je langsamer Sie skalieren, desto mehr Kosten entstehen, aber die Wahrscheinlichkeit ist geringer Eine Anfrage kommt herein, wenn Sie unterdimensioniert sind.

client = boto3.client('application-autoscaling') # Common class representing Application Auto Scaling for SageMaker amongst other services resource_id='endpoint/' + endpoint_name + '/variant/' + 'variant1' # This is the format in which application autoscaling references the endpoint response = client.register_scalable_target(
ServiceNamespace='sagemaker', #
ResourceId=resource_id,
ScalableDimension='sagemaker:variant:DesiredInstanceCount',
MinCapacity=0,
MaxCapacity=5
) response = client.put_scaling_policy(
PolicyName='Invocations-ScalingPolicy',
ServiceNamespace='sagemaker', # The namespace of the AWS service that provides the resource.
ResourceId=resource_id, # Endpoint name
ScalableDimension='sagemaker:variant:DesiredInstanceCount', # SageMaker supports only Instance Count
PolicyType='TargetTrackingScaling', # 'StepScaling'|'TargetTrackingScaling'
TargetTrackingScalingPolicyConfiguration={ 'TargetValue': 5.0, # The target value for the metric. 'CustomizedMetricSpecification': { 'MetricName': 'ApproximateBacklogSizePerInstance', 'Namespace': 'AWS/SageMaker', 'Dimensions': [{'Name': 'EndpointName', 'Value': endpoint_name }], 'Statistic': 'Average',
}, 'ScaleInCooldown': 120, # ScaleInCooldown - The amount of time, in seconds, after a scale-in activity completes before another scale in activity can start. 'ScaleOutCooldown': 120 # ScaleOutCooldown - The amount of time, in seconds, after a scale-out activity completes before another scale out activity can start.
# 'DisableScaleIn': True|False - indicates whether scale in by the target tracking policy is disabled.
# If the value is true, scale-in is disabled and the target tracking policy won't remove capacity from the scalable resource.
}
)

Einzelheiten zur API zum automatischen Skalieren eines asynchronen Inferenzendpunkts finden Sie in der Autoskalieren Sie einen asynchronen Inferenzendpunkt.

Konfigurieren Sie Benachrichtigungen vom asynchronen Inferenzendpunkt

Wir erstellen zwei separate SNS-Themen für Erfolgs- und Fehlermeldungen für jedes Endpunktaufrufergebnis:

sns_client = boto3.client('sns')
response = sns_client.create_topic(Name="Async-Demo-ErrorTopic2")
error_topic = response['TopicArn']
response = sns_client.create_topic(Name="Async-Demo-SuccessTopic2")
success_topic = response['TopicArn']

Andere Optionen für Benachrichtigungen umfassen das regelmäßige Überprüfen der Ausgabe des S3-Buckets oder die Verwendung von S3-Bucket-Benachrichtigungen zum Initialisieren einer AWS Lambda Funktion beim Datei-Upload. SNS-Benachrichtigungen sind wie zuvor beschrieben im Endpunktkonfigurationsabschnitt enthalten.

Einzelheiten zum Einrichten von Benachrichtigungen von einem asynchronen Inferenzendpunkt finden Sie unter Vorhersageergebnisse prüfen.

Überwachen Sie den asynchronen Inferenzendpunkt

Wir überwachen den asynchronen Inferenzendpunkt mit integrierten zusätzlichen CloudWatch-Metriken, die spezifisch für asynchrone Inferenz sind. Beispielsweise überwachen wir die Warteschlangenlänge in jedem Fall mit ApproximateBacklogSizePerInstance und Gesamtwarteschlangenlänge mit ApproximateBacklogSize.

Eine vollständige Liste der Metriken finden Sie unter Überwachung asynchroner Inferenzendpunkte.

Wir können die Endpunktkonfiguration optimieren, um die kostengünstigste Instanz mit hoher Leistung zu erhalten. Beispielsweise können wir eine Instanz mit Amazon Elastic Inference oder AWS Inferentia verwenden. Wir können die Gleichzeitigkeitsstufe auch schrittweise bis zur Durchsatzspitze erhöhen, während wir andere Modellserver- und Containerparameter anpassen.

CloudWatch-Diagramme

Wir haben einen Datenverkehr von 10,000 Inferenzanforderungen simuliert, die über einen bestimmten Zeitraum an den asynchronen Inferenzendpunkt fließen, der mit der im vorherigen Abschnitt beschriebenen Auto Scaling-Richtlinie aktiviert wurde.

Der folgende Screenshot zeigt Instanzmetriken, bevor Anfragen eingingen. Wir beginnen mit einem Live-Endpunkt ohne laufende Instanzen:
Verbessern Sie die hochwertige Forschung mit Hugging Face und Amazon SageMaker asynchronen Inferenzendpunkten PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Die folgende Grafik zeigt, wie die BacklogSize und BacklogSizePerInstance Metriken ändern sich, wenn die automatische Skalierung einsetzt und die Last auf dem Endpunkt von mehreren Instanzen geteilt wird, die im Rahmen der automatischen Skalierung bereitgestellt wurden.
Verbessern Sie die hochwertige Forschung mit Hugging Face und Amazon SageMaker asynchronen Inferenzendpunkten PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Wie im folgenden Screenshot gezeigt, stieg die Anzahl der Instanzen mit zunehmender Inferenzanzahl:
Verbessern Sie die hochwertige Forschung mit Hugging Face und Amazon SageMaker asynchronen Inferenzendpunkten PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Der folgende Screenshot zeigt, wie die Skalierung den Endpunkt in den Ausgangszustand von null laufenden Instanzen zurückbringt:
Verbessern Sie die hochwertige Forschung mit Hugging Face und Amazon SageMaker asynchronen Inferenzendpunkten PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Aufräumen

Nachdem alle Anforderungen abgeschlossen sind, können wir den Endpunkt ähnlich wie beim Löschen von in Echtzeit gehosteten Endpunkten löschen. Beachten Sie, dass, wenn wir die Mindestkapazität asynchroner Inferenzendpunkte auf null setzen, keine Instance-Gebühren anfallen, nachdem sie auf null herunterskaliert wurde.

Wenn Sie die automatische Skalierung für Ihren Endpunkt aktiviert haben, stellen Sie sicher, dass Sie den Endpunkt als skalierbares Ziel abmelden, bevor Sie den Endpunkt löschen. Führen Sie dazu den folgenden Code aus:

response = client.deregister_scalable_target(ServiceNamespace='sagemaker',ResourceId='resource_id',ScalableDimension='sagemaker:variant:DesiredInstanceCount')

Denken Sie daran, Ihren Endpunkt nach der Verwendung zu löschen, da Ihnen die in dieser Demo verwendeten Instanzen in Rechnung gestellt werden.

sm_client.delete_endpoint(EndpointName=endpoint_name)

Sie müssen auch die S3-Objekte und SNS-Themen löschen. Wenn Sie andere AWS-Ressourcen erstellt haben, die Sie verwenden und auf die SNS-Benachrichtigungen reagieren möchten, möchten Sie diese möglicherweise auch löschen.

Zusammenfassung

In diesem Beitrag haben wir gezeigt, wie die neue asynchrone Inferenzfunktion von SageMaker verwendet wird, um eine typische große Eingabenutzlast zu verarbeiten, die Teil einer Zusammenfassungsaufgabe ist. Für die Inferenz haben wir ein Modell von Hugging Face verwendet und es auf einem asynchronen Inferenzendpunkt bereitgestellt. Wir haben die allgemeinen Herausforderungen von Burst-Traffic, hohen Modellverarbeitungszeiten und großen Nutzlasten im Zusammenhang mit Forschungsanalysen erläutert. Die inhärente Fähigkeit des asynchronen Inferenzendpunkts, interne Warteschlangen, vordefinierte Gleichzeitigkeitslimits zu verwalten, Antwortbenachrichtigungen zu konfigurieren und automatisch auf null herunterzuskalieren, half uns, diese Herausforderungen zu bewältigen. Der vollständige Code für dieses Beispiel ist unter verfügbar GitHub.

Um mit der asynchronen Inferenz von SageMaker zu beginnen, lesen Sie hier Asynchrone Inferenz.


Über die Autoren

Verbessern Sie die hochwertige Forschung mit Hugging Face und Amazon SageMaker asynchronen Inferenzendpunkten PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.Dinesh Kumar Subramani ist Senior Solutions Architect im UKIR SMB-Team mit Sitz in Edinburgh, Schottland. Er ist spezialisiert auf künstliche Intelligenz und maschinelles Lernen. Dinesh arbeitet gerne mit Kunden aus verschiedenen Branchen zusammen, um ihnen bei der Lösung ihrer Probleme mit AWS-Services zu helfen. Außerhalb der Arbeit verbringt er gerne Zeit mit seiner Familie, spielt Schach und genießt Musik aller Genres.

Verbessern Sie die hochwertige Forschung mit Hugging Face und Amazon SageMaker asynchronen Inferenzendpunkten PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.Raghu Ramesha ist ML Solutions Architect im Amazon SageMaker Service-Team. Er konzentriert sich darauf, Kunden dabei zu helfen, ML-Produktions-Workloads in großem Umfang zu erstellen, bereitzustellen und zu SageMaker zu migrieren. Er ist auf maschinelles Lernen, KI und Computer Vision spezialisiert und hat einen Master-Abschluss in Informatik von der UT Dallas. In seiner Freizeit reist und fotografiert er gerne.

Zeitstempel:

Mehr von AWS Maschinelles Lernen