Erste Schritte - Amazon Nova

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.

Erste Schritte

In diesem Handbuch erfahren Sie, wie Sie maßgeschneiderte Amazon Nova-Modelle auf SageMaker Echtzeit-Endpunkten bereitstellen, Inferenzparameter konfigurieren und Ihre Modelle zu Testzwecken aufrufen.

Voraussetzungen

Die folgenden Voraussetzungen müssen erfüllt sein, um Amazon Nova-Modelle auf Basis von SageMaker Inferenz bereitzustellen:

  • Erstellen Sie ein AWS-Konto — Falls Sie noch keines haben, finden Sie weitere Informationen unter AWS Konto erstellen.

  • Erforderliche IAM-Berechtigungen — Stellen Sie sicher, dass Ihrem IAM-Benutzer oder Ihrer IAM-Rolle die folgenden verwalteten Richtlinien zugeordnet sind:

    • AmazonSageMakerFullAccess

    • AmazonS3FullAccess

  • Erforderliche SDKs/CLI Versionen — Die folgenden SDK-Versionen wurden mit Amazon Nova-Modellen auf SageMaker Inferenz getestet und validiert:

    • SageMaker Python SDK v3.0.0+ (sagemaker>=3.0.0) für ressourcenbasierten API-Ansatz

    • Boto3 Version 1.35.0+ () für direkte API-Aufrufe. boto3>=1.35.0 Die Beispiele in diesem Handbuch verwenden diesen Ansatz.

  • Erhöhung des Servicekontingents — Fordern Sie eine Erhöhung des Amazon SageMaker Service-Kontingents für den ML-Instance-Typ an, den Sie für Ihren SageMaker Inference-Endpunkt verwenden möchten (z. B.ml.p5.48xlarge for endpoint usage). Eine Liste mit unterstützten Instance-Typen finden Sie unter Unterstützte Modelle und Instanzen. Informationen zur Beantragung einer Erhöhung finden Sie unter Eine Erhöhung des Kontingents beantragen. Informationen zu SageMaker Instanzkontingenten finden Sie unter SageMaker Endpunkte und Kontingente.

Schritt 1: Anmeldeinformationen konfigurieren AWS

Konfigurieren Sie Ihre AWS Anmeldeinformationen mit einer der folgenden Methoden:

Option 1: AWS CLI (Empfohlen)

aws configure

Geben Sie Ihren AWS Zugriffsschlüssel, Ihren geheimen Schlüssel und Ihre Standardregion ein, wenn Sie dazu aufgefordert werden.

Option 2: Datei mit den AWS Anmeldeinformationen

Erstellen oder bearbeiten~/.aws/credentials:

[default] aws_access_key_id = YOUR_ACCESS_KEY aws_secret_access_key = YOUR_SECRET_KEY

Option 3: Umgebungsvariablen

export AWS_ACCESS_KEY_ID=your_access_key export AWS_SECRET_ACCESS_KEY=your_secret_key
Anmerkung

Weitere Informationen zu AWS Anmeldeinformationen finden Sie unter Konfiguration und Einstellungen für Anmeldeinformationsdateien.

Clients initialisieren AWS

Erstellen Sie ein Python-Skript oder ein Notizbuch mit dem folgenden Code, um das AWS SDK zu initialisieren und Ihre Anmeldeinformationen zu überprüfen:

import boto3 # AWS Configuration - Update these for your environment REGION = "us-east-1" # Supported regions: us-east-1, us-west-2 AWS_ACCOUNT_ID = "YOUR_ACCOUNT_ID" # Replace with your AWS account ID # Initialize AWS clients using default credential chain sagemaker = boto3.client('sagemaker', region_name=REGION) sts = boto3.client('sts') # Verify credentials try: identity = sts.get_caller_identity() print(f"Successfully authenticated to AWS Account: {identity['Account']}") if identity['Account'] != AWS_ACCOUNT_ID: print(f"Warning: Connected to account {identity['Account']}, expected {AWS_ACCOUNT_ID}") except Exception as e: print(f"Failed to authenticate: {e}") print("Please verify your credentials are configured correctly.")

Wenn die Authentifizierung erfolgreich ist, sollten Sie eine Ausgabe sehen, die Ihre AWS Konto-ID bestätigt.

Schritt 2: Erstellen Sie eine SageMaker Ausführungsrolle

Eine SageMaker Ausführungsrolle ist eine IAM-Rolle, die SageMaker Berechtigungen für den Zugriff auf AWS Ressourcen in Ihrem Namen gewährt, z. B. Amazon S3 S3-Buckets für Modellartefakte und CloudWatch für die Protokollierung.

Die Ausführungsrolle erstellen

Anmerkung

Für die Erstellung von IAM-Rollen sind iam:AttachRolePolicy Berechtigungen iam:CreateRole und Voraussetzungen erforderlich. Stellen Sie sicher, dass Ihr IAM-Benutzer oder Ihre IAM-Rolle über diese Berechtigungen verfügt, bevor Sie fortfahren.

Der folgende Code erstellt eine IAM-Rolle mit den erforderlichen Berechtigungen für die Bereitstellung benutzerdefinierter Amazon Nova-Modelle:

import json # Create SageMaker Execution Role role_name = f"SageMakerInference-ExecutionRole-{AWS_ACCOUNT_ID}" trust_policy = { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": {"Service": "sagemaker.amazonaws.com"}, "Action": "sts:AssumeRole" } ] } iam = boto3.client('iam', region_name=REGION) # Create the role role_response = iam.create_role( RoleName=role_name, AssumeRolePolicyDocument=json.dumps(trust_policy), Description='SageMaker execution role with S3 and SageMaker access' ) # Attach required policies iam.attach_role_policy( RoleName=role_name, PolicyArn='arn:aws:iam::aws:policy/AmazonSageMakerFullAccess' ) iam.attach_role_policy( RoleName=role_name, PolicyArn='arn:aws:iam::aws:policy/AmazonS3FullAccess' ) SAGEMAKER_EXECUTION_ROLE_ARN = role_response['Role']['Arn'] print(f"Created SageMaker execution role: {SAGEMAKER_EXECUTION_ROLE_ARN}")

Verwenden einer vorhandenen Ausführungsrolle (optional)

Wenn Sie bereits über eine SageMaker Ausführungsrolle verfügen, können Sie diese stattdessen verwenden:

# Replace with your existing role ARN SAGEMAKER_EXECUTION_ROLE_ARN = "arn:aws:iam::YOUR_ACCOUNT_ID:role/YOUR_EXISTING_ROLE_NAME"

So finden Sie bestehende SageMaker Rollen in Ihrem Konto:

iam = boto3.client('iam', region_name=REGION) response = iam.list_roles() sagemaker_roles = [role for role in response['Roles'] if 'SageMaker' in role['RoleName']] for role in sagemaker_roles: print(f"{role['RoleName']}: {role['Arn']}")
Wichtig

Die Ausführungsrolle muss über eine Vertrauensbeziehung zu Amazon S3 sagemaker.amazonaws.com und SageMaker Ressourcen verfügen und über Zugriffsberechtigungen verfügen.

Weitere Informationen zu SageMaker Ausführungsrollen finden Sie unter SageMaker Rollen.

Schritt 3: Modellparameter konfigurieren

Konfigurieren Sie die Bereitstellungsparameter für Ihr Amazon Nova-Modell. Diese Einstellungen steuern das Modellverhalten, die Ressourcenzuweisung und die Inferenzmerkmale. Eine Liste der unterstützten Instanztypen und der jeweils unterstützten Werte für CONTEXT_LENGTH und MAX_CONCURRENCY finden Sie unter. Unterstützte Modelle und Instanzen

Erforderliche Parameter

  • IMAGE: Die Docker-Container-Image-URI für den Amazon Nova-Inferenzcontainer. Dies wird bereitgestellt von. AWS

  • CONTEXT_LENGTH: Länge des Modellkontextes.

  • MAX_CONCURRENCY: Maximale Anzahl von Sequenzen pro Iteration; legt die Grenze fest, wie viele einzelne Benutzeranfragen (Eingabeaufforderungen) gleichzeitig innerhalb eines einzelnen Batches auf der GPU verarbeitet werden können. Bereich: Ganzzahl größer als 0.

Optionale Generierungsparameter

  • DEFAULT_TEMPERATURE: Steuert die Zufälligkeit bei der Generierung. Bereich: 0,0 bis 2,0 (0,0 = deterministisch, höher = eher zufällig).

  • DEFAULT_TOP_P: Nucleus-Sampling-Schwellenwert für die Token-Auswahl. Bereich: 1e-10 bis 1,0.

  • DEFAULT_TOP_K: Beschränkt die Token-Auswahl auf die Top K der wahrscheinlichsten Tokens. Bereich: Ganzzahl -1 oder größer (-1 = kein Limit).

  • DEFAULT_MAX_NEW_TOKENS: Maximale Anzahl von Token, die als Antwort generiert werden sollen (d. h. maximale Anzahl von Ausgabetoken). Bereich: Ganzzahl 1 oder größer.

  • DEFAULT_LOGPROBS: Anzahl der Log-Wahrscheinlichkeiten, die pro Token zurückgegeben werden sollen. Bereich: Ganzzahl 1 bis 20.

Konfigurieren Sie Ihre Bereitstellung

# AWS Configuration REGION = "us-east-1" # Must match region from Step 1 # ECR Account mapping by region ECR_ACCOUNT_MAP = { "us-east-1": "708977205387", "us-west-2": "176779409107" } # Container Image IMAGE = f"{ECR_ACCOUNT_MAP[REGION]}.dkr.ecr.{REGION}.amazonaws.com/nova-inference-repo:SM-Inference-latest" print(f"IMAGE = {IMAGE}") # Model Parameters CONTEXT_LENGTH = "8000" # Maximum total context length MAX_CONCURRENCY = "16" # Maximum concurrent sequences # Optional: Default generation parameters (uncomment to use) DEFAULT_TEMPERATURE = "0.0" # Deterministic output DEFAULT_TOP_P = "1.0" # Consider all tokens # DEFAULT_TOP_K = "50" # Uncomment to limit to top 50 tokens # DEFAULT_MAX_NEW_TOKENS = "2048" # Uncomment to set max output tokens # DEFAULT_LOGPROBS = "1" # Uncomment to enable log probabilities # Build environment variables for the container environment = { 'CONTEXT_LENGTH': CONTEXT_LENGTH, 'MAX_CONCURRENCY': MAX_CONCURRENCY, } # Add optional parameters if defined if 'DEFAULT_TEMPERATURE' in globals(): environment['DEFAULT_TEMPERATURE'] = DEFAULT_TEMPERATURE if 'DEFAULT_TOP_P' in globals(): environment['DEFAULT_TOP_P'] = DEFAULT_TOP_P if 'DEFAULT_TOP_K' in globals(): environment['DEFAULT_TOP_K'] = DEFAULT_TOP_K if 'DEFAULT_MAX_NEW_TOKENS' in globals(): environment['DEFAULT_MAX_NEW_TOKENS'] = DEFAULT_MAX_NEW_TOKENS if 'DEFAULT_LOGPROBS' in globals(): environment['DEFAULT_LOGPROBS'] = DEFAULT_LOGPROBS print("Environment configuration:") for key, value in environment.items(): print(f" {key}: {value}")

Konfigurieren Sie bereitstellungsspezifische Parameter

Konfigurieren Sie jetzt die spezifischen Parameter für Ihre Amazon Nova-Modellbereitstellung, einschließlich des Standorts der Modellartefakte und der Auswahl des Instance-Typs.

Legen Sie die Bereitstellungs-ID fest

# Deployment identifier - use a descriptive name for your use case JOB_NAME = "my-nova-deployment"

Geben Sie den Speicherort der Modellartefakte

Geben Sie die Amazon S3 S3-URI an, in der Ihre trainierten Amazon Nova-Modellartefakte gespeichert sind. Dies sollte der Ausgabeort für Ihr Modelltraining oder Ihre Feinabstimmung sein.

# S3 location of your trained Nova model artifacts # Replace with your model's S3 URI - must end with / MODEL_S3_LOCATION = "s3://your-bucket-name/path/to/model/artifacts/"

Wählen Sie die Modellvariante und den Instanztyp

# Configure model variant and instance type TESTCASE = { "model": "micro", # Options: micro, lite, lite2 "instance": "ml.g5.12xlarge" # Refer to "Supported models and instances" section } # Generate resource names INSTANCE_TYPE = TESTCASE["instance"] MODEL_NAME = JOB_NAME + "-" + TESTCASE["model"] + "-" + INSTANCE_TYPE.replace(".", "-") ENDPOINT_CONFIG_NAME = MODEL_NAME + "-Config" ENDPOINT_NAME = MODEL_NAME + "-Endpoint" print(f"Model Name: {MODEL_NAME}") print(f"Endpoint Config: {ENDPOINT_CONFIG_NAME}") print(f"Endpoint Name: {ENDPOINT_NAME}")

Benennungskonventionen

Der Code generiert automatisch konsistente Namen für AWS Ressourcen:

  • Modellname: {JOB_NAME}-{model}-{instance-type}

  • Endpunktkonfiguration: {MODEL_NAME}-Config

  • Name des Endpunkts: {MODEL_NAME}-Endpoint

Schritt 4: SageMaker Modell und Endpunktkonfiguration erstellen

In diesem Schritt erstellen Sie zwei wichtige Ressourcen: ein SageMaker Modellobjekt, das auf Ihre Amazon Nova-Modellartefakte verweist, und eine Endpunktkonfiguration, die definiert, wie das Modell bereitgestellt wird.

SageMaker Modell: Ein Modellobjekt, das das Inferenzcontainer-Image, den Speicherort der Modellartefakte und die Umgebungskonfiguration verpackt. Dies ist eine wiederverwendbare Ressource, die auf mehreren Endpunkten bereitgestellt werden kann.

Endpunktkonfiguration: Definiert die Infrastruktureinstellungen für die Bereitstellung, einschließlich Instanztyp, Anzahl der Instanzen und Modellvarianten. Auf diese Weise können Sie die Bereitstellungseinstellungen getrennt vom Modell selbst verwalten.

Erstellen Sie das SageMaker Modell

Der folgende Code erstellt ein SageMaker Modell, das auf Ihre Amazon Nova-Modellartefakte verweist:

try: model_response = sagemaker.create_model( ModelName=MODEL_NAME, PrimaryContainer={ 'Image': IMAGE, 'ModelDataSource': { 'S3DataSource': { 'S3Uri': MODEL_S3_LOCATION, 'S3DataType': 'S3Prefix', 'CompressionType': 'None' } }, 'Environment': environment }, ExecutionRoleArn=SAGEMAKER_EXECUTION_ROLE_ARN, EnableNetworkIsolation=True ) print("Model created successfully!") print(f"Model ARN: {model_response['ModelArn']}") except sagemaker.exceptions.ClientError as e: print(f"Error creating model: {e}")

Hauptparameter:

  • ModelName: Eindeutiger Bezeichner für Ihr Modell

  • Image: Docker-Container-Image-URI für Amazon Nova-Inferenz

  • ModelDataSource: Amazon S3 S3-Standort Ihrer Modellartefakte

  • Environment: In Schritt 3 konfigurierte Umgebungsvariablen

  • ExecutionRoleArn: IAM-Rolle aus Schritt 2

  • EnableNetworkIsolation: Aus Sicherheitsgründen auf True setzen (verhindert, dass der Container ausgehende Netzwerkanrufe tätigt)

Erstellen Sie die Endpunktkonfiguration

Erstellen Sie als Nächstes eine Endpunktkonfiguration, die Ihre Bereitstellungsinfrastruktur definiert:

# Create Endpoint Configuration try: production_variant = { 'VariantName': 'primary', 'ModelName': MODEL_NAME, 'InitialInstanceCount': 1, 'InstanceType': INSTANCE_TYPE, } config_response = sagemaker.create_endpoint_config( EndpointConfigName=ENDPOINT_CONFIG_NAME, ProductionVariants=[production_variant] ) print("Endpoint configuration created successfully!") print(f"Config ARN: {config_response['EndpointConfigArn']}") except sagemaker.exceptions.ClientError as e: print(f"Error creating endpoint configuration: {e}")

Hauptparameter:

  • VariantName: Identifier für diese Modellvariante (verwenden Sie „primary“ für Implementierungen mit nur einem Modell)

  • ModelName: Verweist auf das oben erstellte Modell

  • InitialInstanceCount: Anzahl der bereitzustellenden Instanzen (beginnen Sie mit 1, skalieren Sie bei Bedarf später)

  • InstanceType: In Schritt 3 ausgewählter ML-Instanztyp

Überprüfen Sie die Ressourcenerstellung

Sie können überprüfen, ob Ihre Ressourcen erfolgreich erstellt wurden:

# Describe the model model_info = sagemaker.describe_model(ModelName=MODEL_NAME) print(f"Model Status: {model_info['ModelName']} created") # Describe the endpoint configuration config_info = sagemaker.describe_endpoint_config(EndpointConfigName=ENDPOINT_CONFIG_NAME) print(f"Endpoint Config Status: {config_info['EndpointConfigName']} created")

Schritt 5: Stellen Sie den Endpunkt bereit

Der nächste Schritt besteht darin, Ihr Amazon Nova-Modell bereitzustellen, indem Sie einen SageMaker Echtzeit-Endpunkt erstellen. Dieser Endpunkt hostet Ihr Modell und bietet einen sicheren HTTPS-Endpunkt für Inferenzanfragen.

Die Erstellung von Endpunkten dauert in der Regel 15 bis 30 Minuten, AWS da die Infrastruktur bereitgestellt, Ihre Modellartefakte heruntergeladen und der Inferenzcontainer initialisiert wird.

Endpunkt erstellen

import time try: endpoint_response = sagemaker.create_endpoint( EndpointName=ENDPOINT_NAME, EndpointConfigName=ENDPOINT_CONFIG_NAME ) print("Endpoint creation initiated successfully!") print(f"Endpoint ARN: {endpoint_response['EndpointArn']}") except Exception as e: print(f"Error creating endpoint: {e}")

Überwachung der Endpunkterstellung

Der folgende Code fragt den Endpunktstatus ab, bis die Bereitstellung abgeschlossen ist:

# Monitor endpoint creation progress print("Waiting for endpoint creation to complete...") print("This typically takes 15-30 minutes...\n") while True: try: response = sagemaker.describe_endpoint(EndpointName=ENDPOINT_NAME) status = response['EndpointStatus'] if status == 'Creating': print(f"⏳ Status: {status} - Provisioning infrastructure and loading model...") elif status == 'InService': print(f"✅ Status: {status}") print("\nEndpoint creation completed successfully!") print(f"Endpoint Name: {ENDPOINT_NAME}") print(f"Endpoint ARN: {response['EndpointArn']}") break elif status == 'Failed': print(f"❌ Status: {status}") print(f"Failure Reason: {response.get('FailureReason', 'Unknown')}") print("\nFull response:") print(response) break else: print(f"Status: {status}") except Exception as e: print(f"Error checking endpoint status: {e}") break time.sleep(30) # Check every 30 seconds

Überprüfen Sie, ob der Endpunkt bereit ist

Sobald der Endpunkt fertig ist InService, können Sie seine Konfiguration überprüfen:

# Get detailed endpoint information endpoint_info = sagemaker.describe_endpoint(EndpointName=ENDPOINT_NAME) print("\n=== Endpoint Details ===") print(f"Endpoint Name: {endpoint_info['EndpointName']}") print(f"Endpoint ARN: {endpoint_info['EndpointArn']}") print(f"Status: {endpoint_info['EndpointStatus']}") print(f"Creation Time: {endpoint_info['CreationTime']}") print(f"Last Modified: {endpoint_info['LastModifiedTime']}") # Get endpoint config for instance type details endpoint_config_name = endpoint_info['EndpointConfigName'] endpoint_config = sagemaker.describe_endpoint_config(EndpointConfigName=endpoint_config_name) # Display production variant details for variant in endpoint_info['ProductionVariants']: print(f"\nProduction Variant: {variant['VariantName']}") print(f" Current Instance Count: {variant['CurrentInstanceCount']}") print(f" Desired Instance Count: {variant['DesiredInstanceCount']}") # Get instance type from endpoint config for config_variant in endpoint_config['ProductionVariants']: if config_variant['VariantName'] == variant['VariantName']: print(f" Instance Type: {config_variant['InstanceType']}") break

Behebung von Fehlern bei der Endpunkterstellung

Häufige Fehlerursachen:

  • Unzureichende Kapazität: Der angeforderte Instance-Typ ist in Ihrer Region nicht verfügbar

    • Lösung: Probieren Sie einen anderen Instance-Typ aus oder fordern Sie eine Erhöhung des Kontingents an

  • IAM-Berechtigungen: Der Ausführungsrolle fehlen die erforderlichen Berechtigungen

    • Lösung: Stellen Sie sicher, dass die Rolle Zugriff auf Amazon S3 S3-Modellartefakte und die erforderlichen SageMaker Berechtigungen hat

  • Modellartefakte wurden nicht gefunden: Die Amazon S3 S3-URI ist falsch oder es kann nicht darauf zugegriffen werden

    • Lösung: Überprüfen Sie die Amazon S3 S3-URI und überprüfen Sie die Bucket-Berechtigungen. Stellen Sie sicher, dass Sie sich in der richtigen Region befinden

  • Ressourcenlimits: Die Kontolimits für Endpunkte oder Instances wurden überschritten

    • Lösung: Beantragen Sie eine Erhöhung des Servicekontingents über Service Quotas oder AWS Support

Anmerkung

Wenn Sie einen ausgefallenen Endpunkt löschen und von vorne beginnen müssen:

sagemaker.delete_endpoint(EndpointName=ENDPOINT_NAME)

Schritt 6: Rufen Sie den Endpunkt auf

Sobald Ihr Endpunkt da ist InService, können Sie Inferenzanfragen senden, um Prognosen aus Ihrem Amazon Nova-Modell zu generieren. SageMaker unterstützt synchrone Endpunkte (Echtzeit mit Streaming-/Nicht-Streaming-Modi) und asynchrone Endpunkte (Amazon S3-basiert für Batch-Verarbeitung).

Richten Sie den Runtime-Client ein

Erstellen Sie einen SageMaker Runtime-Client mit den entsprechenden Timeout-Einstellungen:

import json import boto3 import botocore from botocore.exceptions import ClientError # Configure client with appropriate timeouts config = botocore.config.Config( read_timeout=120, # Maximum time to wait for response connect_timeout=10, # Maximum time to establish connection retries={'max_attempts': 3} # Number of retry attempts ) # Create SageMaker Runtime client runtime_client = boto3.client('sagemaker-runtime', config=config, region_name=REGION)

Erstellen Sie eine universelle Inferenzfunktion

Die folgende Funktion verarbeitet sowohl Streaming- als auch Nicht-Streaming-Anfragen:

def invoke_nova_endpoint(request_body): """ Invoke Nova endpoint with automatic streaming detection. Args: request_body (dict): Request payload containing prompt and parameters Returns: dict: Response from the model (for non-streaming requests) None: For streaming requests (prints output directly) """ body = json.dumps(request_body) is_streaming = request_body.get("stream", False) try: print(f"Invoking endpoint ({'streaming' if is_streaming else 'non-streaming'})...") if is_streaming: response = runtime_client.invoke_endpoint_with_response_stream( EndpointName=ENDPOINT_NAME, ContentType='application/json', Body=body ) event_stream = response['Body'] for event in event_stream: if 'PayloadPart' in event: chunk = event['PayloadPart'] if 'Bytes' in chunk: data = chunk['Bytes'].decode() print("Chunk:", data) else: # Non-streaming inference response = runtime_client.invoke_endpoint( EndpointName=ENDPOINT_NAME, ContentType='application/json', Accept='application/json', Body=body ) response_body = response['Body'].read().decode('utf-8') result = json.loads(response_body) print("✅ Response received successfully") return result except ClientError as e: error_code = e.response['Error']['Code'] error_message = e.response['Error']['Message'] print(f"❌ AWS Error: {error_code} - {error_message}") except Exception as e: print(f"❌ Unexpected error: {str(e)}")

Beispiel 1: Abschluss eines Chats ohne Streaming

Verwenden Sie das Chat-Format für Konversationsinteraktionen:

# Non-streaming chat request chat_request = { "messages": [ {"role": "user", "content": "Hello! How are you?"} ], "max_tokens": 100, "max_completion_tokens": 100, # Alternative to max_tokens "stream": False, "temperature": 0.7, "top_p": 0.9, "top_k": 50, "logprobs": True, "top_logprobs": 3, "allowed_token_ids": None, # List of allowed token IDs "truncate_prompt_tokens": None, # Truncate prompt to this many tokens "stream_options": None } response = invoke_nova_endpoint(chat_request)

Beispielantwort:

{ "id": "chatcmpl-123456", "object": "chat.completion", "created": 1234567890, "model": "default", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "Hello! I'm doing well, thank you for asking. I'm here and ready to help you with any questions or tasks you might have. How can I assist you today?" }, "logprobs": { "content": [ { "token": "Hello", "logprob": -0.123, "top_logprobs": [ {"token": "Hello", "logprob": -0.123}, {"token": "Hi", "logprob": -2.456}, {"token": "Hey", "logprob": -3.789} ] } # Additional tokens... ] }, "finish_reason": "stop" } ], "usage": { "prompt_tokens": 12, "completion_tokens": 28, "total_tokens": 40 } }

Beispiel 2: Einfache Textvervollständigung

Verwenden Sie das Vervollständigungsformat für die einfache Textgenerierung:

# Simple completion request completion_request = { "prompt": "The capital of France is", "max_tokens": 50, "stream": False, "temperature": 0.0, "top_p": 1.0, "top_k": -1, # -1 means no limit "logprobs": 3, # Number of log probabilities to return "allowed_token_ids": None, # List of allowed token IDs "truncate_prompt_tokens": None, # Truncate prompt to this many tokens "stream_options": None } response = invoke_nova_endpoint(completion_request)

Beispielantwort:

{ "id": "cmpl-789012", "object": "text_completion", "created": 1234567890, "model": "default", "choices": [ { "text": " Paris.", "index": 0, "logprobs": { "tokens": [" Paris", "."], "token_logprobs": [-0.001, -0.002], "top_logprobs": [ {" Paris": -0.001, " London": -5.234, " Rome": -6.789}, {".": -0.002, ",": -4.567, "!": -7.890} ] }, "finish_reason": "stop" } ], "usage": { "prompt_tokens": 6, "completion_tokens": 2, "total_tokens": 8 } }

Beispiel 3: Abschluss des Streaming-Chats

# Streaming chat request streaming_request = { "messages": [ {"role": "user", "content": "Tell me a short story about a robot"} ], "max_tokens": 200, "stream": True, "temperature": 0.7, "top_p": 0.95, "top_k": 40, "logprobs": True, "top_logprobs": 2, "stream_options": {"include_usage": True} } invoke_nova_endpoint(streaming_request)

Beispiel für eine Streaming-Ausgabe:

Chunk: data: {"id":"chatcmpl-029ca032-fa01-4868-80b7-c4cb1af90fb9","object":"chat.completion.chunk","created":1772060532,"model":"default","choices":[{"index":0,"delta":{"role":"assistant","content":""},"logprobs":null,"finish_reason":null}],"prompt_token_ids":null} Chunk: data: {"id":"chatcmpl-029ca032-fa01-4868-80b7-c4cb1af90fb9","object":"chat.completion.chunk","created":1772060532,"model":"default","choices":[{"index":0,"delta":{"content":" Once"},"logprobs":{"content":[{"token":"\u2581Once","logprob":-0.6078429222106934,"bytes":[226,150,129,79,110,99,101],"top_logprobs":[{"token":"\u2581Once","logprob":-0.6078429222106934,"bytes":[226,150,129,79,110,99,101]},{"token":"\u2581In","logprob":-0.7864127159118652,"bytes":[226,150,129,73,110]}]}]},"finish_reason":null,"token_ids":null}]} Chunk: data: {"id":"chatcmpl-029ca032-fa01-4868-80b7-c4cb1af90fb9","object":"chat.completion.chunk","created":1772060532,"model":"default","choices":[{"index":0,"delta":{"content":" upon"},"logprobs":{"content":[{"token":"\u2581upon","logprob":-0.0012345,"bytes":[226,150,129,117,112,111,110],"top_logprobs":[{"token":"\u2581upon","logprob":-0.0012345,"bytes":[226,150,129,117,112,111,110]},{"token":"\u2581a","logprob":-6.789,"bytes":[226,150,129,97]}]}]},"finish_reason":null,"token_ids":null}]} Chunk: data: {"id":"chatcmpl-029ca032-fa01-4868-80b7-c4cb1af90fb9","object":"chat.completion.chunk","created":1772060532,"model":"default","choices":[{"index":0,"delta":{"content":" a"},"logprobs":{"content":[{"token":"\u2581a","logprob":-0.0001234,"bytes":[226,150,129,97],"top_logprobs":[{"token":"\u2581a","logprob":-0.0001234,"bytes":[226,150,129,97]},{"token":"\u2581time","logprob":-9.123,"bytes":[226,150,129,116,105,109,101]}]}]},"finish_reason":null,"token_ids":null}]} Chunk: data: {"id":"chatcmpl-029ca032-fa01-4868-80b7-c4cb1af90fb9","object":"chat.completion.chunk","created":1772060532,"model":"default","choices":[{"index":0,"delta":{"content":" time"},"logprobs":{"content":[{"token":"\u2581time","logprob":-0.0023456,"bytes":[226,150,129,116,105,109,101],"top_logprobs":[{"token":"\u2581time","logprob":-0.0023456,"bytes":[226,150,129,116,105,109,101]},{"token":",","logprob":-6.012,"bytes":[44]}]}]},"finish_reason":null,"token_ids":null}]} # Additional chunks... Chunk: data: {"id":"chatcmpl-029ca032-fa01-4868-80b7-c4cb1af90fb9","object":"chat.completion.chunk","created":1772060532,"model":"default","choices":[{"index":0,"delta":{},"logprobs":null,"finish_reason":"stop"}],"usage":{"prompt_tokens":15,"completion_tokens":87,"total_tokens":102}} Chunk: data: [DONE]

Beispiel 4: Abschluss eines multimodalen Chats

Verwenden Sie das multimodale Format für Bild- und Texteingaben:

# Multimodal chat request (if supported by your model) multimodal_request = { "messages": [ { "role": "user", "content": [ {"type": "text", "text": "What's in this image?"}, {"type": "image_url", "image_url": {"url": "data:image/jpeg;base64,..."}} ] } ], "max_tokens": 150, "temperature": 0.3, "top_p": 0.8, "stream": False } response = invoke_nova_endpoint(multimodal_request)

Beispielantwort:

{ "id": "chatcmpl-345678", "object": "chat.completion", "created": 1234567890, "model": "default", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "The image shows..." }, "finish_reason": "stop" } ], "usage": { "prompt_tokens": 1250, "completion_tokens": 45, "total_tokens": 1295 } }

Schritt 7: Ressourcen bereinigen (optional)

Um unnötige Kosten zu vermeiden, löschen Sie die AWS Ressourcen, die Sie in diesem Tutorial erstellt haben. SageMaker Bei Endpunkten fallen Gebühren an, während sie laufen, auch wenn Sie nicht aktiv Inferenzanfragen stellen.

Wichtig

Das Löschen von Ressourcen ist dauerhaft und kann nicht rückgängig gemacht werden. Stellen Sie sicher, dass Sie diese Ressourcen nicht mehr benötigen, bevor Sie fortfahren.

Löschen Sie den Endpunkt

import boto3 # Initialize SageMaker client sagemaker = boto3.client('sagemaker', region_name=REGION) try: print("Deleting endpoint...") sagemaker.delete_endpoint(EndpointName=ENDPOINT_NAME) print(f"✅ Endpoint '{ENDPOINT_NAME}' deletion initiated") print("Charges will stop once deletion completes (typically 2-5 minutes)") except Exception as e: print(f"❌ Error deleting endpoint: {e}")
Anmerkung

Das Löschen des Endpunkts erfolgt asynchron. Sie können den Löschstatus überwachen:

import time print("Monitoring endpoint deletion...") while True: try: response = sagemaker.describe_endpoint(EndpointName=ENDPOINT_NAME) status = response['EndpointStatus'] print(f"Status: {status}") time.sleep(10) except sagemaker.exceptions.ClientError as e: if e.response['Error']['Code'] == 'ValidationException': print("✅ Endpoint successfully deleted") break else: print(f"Error: {e}") break

Löschen Sie die Endpunktkonfiguration

Nachdem der Endpunkt gelöscht wurde, entfernen Sie die Endpunktkonfiguration:

try: print("Deleting endpoint configuration...") sagemaker.delete_endpoint_config(EndpointConfigName=ENDPOINT_CONFIG_NAME) print(f"✅ Endpoint configuration '{ENDPOINT_CONFIG_NAME}' deleted") except Exception as e: print(f"❌ Error deleting endpoint configuration: {e}")

Löschen Sie das Modell

Entfernen Sie das SageMaker Modellobjekt:

try: print("Deleting model...") sagemaker.delete_model(ModelName=MODEL_NAME) print(f"✅ Model '{MODEL_NAME}' deleted") except Exception as e: print(f"❌ Error deleting model: {e}")