Optimierung von Modellen mit Adapter-Inferenzkomponenten
Mit Amazon SageMaker AI können Sie vortrainierte Basismodelle hosten, ohne Ihre eigenen Modelle von Grund auf neu erstellen zu müssen. Um jedoch ein universelles Basismodell auf die individuellen Bedürfnisse Ihres Unternehmens zuzuschneiden, müssen Sie eine optimierte Version davon erstellen. Eine kosteneffiziente Optimierungstechnik ist die Low-Rank Adaptation (LoRA). Das Prinzip hinter LoRA ist, dass nur ein kleiner Teil eines großen Basismodells aktualisiert werden muss, um es an neue Aufgaben oder Domains anzupassen. Ein LoRA-Adapter erweitert die Inferenz aus einem Basismodell mit nur wenigen zusätzlichen Adapterschichten.
Wenn Sie Ihr Basismodell mithilfe einer SageMaker-AI-Inferenzkomponente hosten, können Sie dieses Basismodell mit LoRA-Adaptern optimieren, indem Sie Adapter-Inferenzkomponenten erstellen. Beim Erstellen einer Adapter-Inferenzkomponente geben Sie Folgendes an:
-
Die Basis-Inferenzkomponente, die die Adapter-Inferenzkomponente enthalten soll. Die Basis-Inferenzkomponente enthält das Basismodell, das Sie anpassen möchten. Die Adapter-Inferenzkomponente verwendet die Rechenressourcen, die Sie der Basis-Inferenzkomponente zugewiesen haben.
-
Der Speicherort, an dem Sie den LoRA-Adapter in Amazon S3 gespeichert haben.
Nachdem Sie die Adapter-Inferenzkomponente erstellt haben, können Sie sie direkt aufrufen. Wenn Sie dies tun, kombiniert SageMaker AI den Adapter mit dem Basismodell, um die generierte Antwort zu erweitern.
Bevor Sie beginnen
Bevor Sie eine Adapter-Inferenzkomponente erstellen können, müssen Sie die folgenden Voraussetzungen erfüllen:
-
Sie haben eine Basis-Inferenzkomponente, die das anzupassende Basismodell enthält. Sie haben diese Inferenzkomponente auf einem SageMaker-AI-Endpunkt bereitgestellt.
Weitere Informationen zum Bereitstellen von Inferenzkomponenten auf Endpunkten finden Sie unter Modelle für Echtzeit-Inferenzen bereitstellen.
-
Sie haben ein LoRA-Adaptermodell und Sie haben die Modellartefakte als
tar.gz-Datei in Amazon S3 gespeichert. Sie geben den S3-URI der Artefakte an, wenn Sie die Adapter-Inferenzkomponente erstellen.
Die folgenden Beispiele verwenden den SDK for Python (Boto3), um eine Adapter-Inferenzkomponente zu erstellen und aufzurufen.
Beispiel Aufruf von create_inference_component zum Erstellen einer Adapter-Inferenzkomponente
Im folgenden Beispiel wird eine Adapter-Inferenzkomponente erstellt und einer Basis-Inferenzkomponente zugewiesen:
sm_client.create_inference_component( InferenceComponentName =adapter_ic_name, EndpointName =endpoint_name, Specification={ "BaseInferenceComponentName":base_inference_component_name, "Container": { "ArtifactUrl":adapter_s3_uri}, }, )
Wenn Sie dieses Beispiel in Ihrem eigenen Code verwenden, ersetzen Sie die Platzhalterwerte wie folgt:
-
adapter_ic_name– ein eindeutiger Name für Ihre Adapter-Inferenzkomponente -
endpoint_name– der Name des Endpunkts, der die Basis-Inferenzkomponente hostet -
base_inference_component_name– der Name der Basis-Inferenzkomponente, die das anzupassende Basismodell enthält -
adapter_s3_uri– der S3-URI, der dietar.gz-Datei mit Ihren LoRA-Adapterartefakten findet
Sie erstellen eine Adapter-Inferenzkomponente mit Code, der dem Code für eine normale Inferenzkomponente ähnelt. Ein Unterschied besteht darin, dass Sie für den Specification-Parameter den Schlüssel ComputeResourceRequirements weglassen. Wenn Sie eine Adapter-Inferenzkomponente aufrufen, wird sie von der Basis-Inferenzkomponente geladen. Die Adapter-Inferenzkomponente verwendet die Rechenressourcen der Basis-Inferenzkomponente.
Weitere Informationen zum Erstellen und Bereitstellen von Inferenzkomponenten mit dem SDK für Python (Boto3) finden Sie unter Bereitstellen von Modellen mit den Python-SDKs.
Nachdem Sie eine Adapter-Inferenzkomponente erstellt haben, rufen Sie sie auf, indem Sie ihren Namen in einer invoke_endpoint-Anfrage angeben.
Beispiel Aufruf von invoke_endpoint zum Aufrufen einer Adapter-Inferenzkomponente
Im folgenden Beispiel wird eine Adapter-Inferenzkomponente aufgerufen:
response = sm_rt_client.invoke_endpoint( EndpointName =endpoint_name, InferenceComponentName =adapter_ic_name, Body = json.dumps( { "inputs":prompt, "parameters": {"max_new_tokens": 100, "temperature":0.9} } ), ContentType = "application/json", ) adapter_reponse = response["Body"].read().decode("utf8")["generated_text"]
Wenn Sie dieses Beispiel in Ihrem eigenen Code verwenden, ersetzen Sie die Platzhalterwerte wie folgt:
-
endpoint_name– der Name des Endpunkts, der die Basis- und Adapter-Inferenzkomponenten hostet -
adapter_ic_name– der Name der Adapter-Inferenzkomponente -
Prompt– die Aufforderung für die Inferenzanforderung.
Weitere Informationen zum Aufrufen von Inferenzkomponenten mit dem SDK für Python (Boto3) finden Sie unter Aufrufen von Modellen für Echtzeit-Inferenz.