Introducción
Esta guía le muestra cómo implementar modelos personalizados de Amazon Nova en puntos de conexión en tiempo real de SageMaker, configurar los parámetros de inferencia e invocar sus modelos para realizar pruebas.
Requisitos previos
Los siguientes son requisitos previos para implementar modelos de Amazon Nova en Inferencias de SageMaker:
-
Cree una Cuenta de AWS: si aún no tiene una, consulte Creating an AWS account.
-
Permisos de IAM necesarios: asegúrese de que su usuario o rol de IAM tenga adjuntas las políticas de administración siguientes:
-
AmazonSageMakerFullAccess -
AmazonS3FullAccess
-
-
Versiones del SDK y de la CLI requeridas: las siguientes versiones de SDK se han probado y validado con modelos de Amazon Nova en Inferencias de SageMaker.
-
Versión 3.0.0 o superior del SDK de SageMaker para Python (
sagemaker>=3.0.0) para un enfoque de API basado en recursos. -
Versión 1.35.0 o superior de Boto3 (
boto3>=1.35.0) para llamadas directas a la API. Los ejemplos de esta guía utilizan este enfoque.
-
Paso 1: configure las credenciales de AWS
Configure las credenciales de AWS con uno de los siguientes métodos:
Opción 1: AWS CLI (recomendado)
aws configure
Ingrese la clave de acceso de AWS, la clave secreta y el nombre de la región predeterminada cuando se le solicite.
Opción 2: archivo de credenciales AWS
Cree o edite ~/.aws/credentials:
[default] aws_access_key_id = YOUR_ACCESS_KEY aws_secret_access_key = YOUR_SECRET_KEY
Opción 3: variables de entorno
export AWS_ACCESS_KEY_ID=your_access_key export AWS_SECRET_ACCESS_KEY=your_secret_key
nota
Para obtener más información sobre las credenciales de AWS, consulte Opciones de los archivos de configuración y credenciales en la AWS CLI.
Initialización de clientes de AWS
Cree un script o cuaderno de Python con el siguiente código para inicializar el SDK de AWS y verificar sus credenciales:
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.")
Si la autenticación se realiza correctamente, debería ver una salida que confirma el ID de su cuenta de AWS.
Paso 2: cree un rol de puesta en marcha de SageMaker AI
Un rol de puesta en marcha de SageMaker es un rol de IAM que concede permisos a SageMaker para acceder a los recursos de AWS en su nombre, como los buckets de Amazon S3 para artefactos de modelos y CloudWatch para el registro.
Creación del rol de puesta en marcha
nota
La creación de roles de IAM requiere los permisos iam:CreateRole y iam:AttachRolePolicy. Asegúrese de que el usuario o el rol de IAM tenga estos permisos antes de continuar.
El código siguiente crea un rol de IAM con los permisos necesarios para implementar modelos personalizados de Amazon Nova:
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}")
Uso de un rol de puesta en marcha existente (opcional)
Si ya tiene un rol de puesta en marcha de SageMaker, puede usarlo en su lugar:
# Replace with your existing role ARN SAGEMAKER_EXECUTION_ROLE_ARN = "arn:aws:iam::YOUR_ACCOUNT_ID:role/YOUR_EXISTING_ROLE_NAME"
Para buscar los roles de SageMaker existentes en su cuenta:
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']}")
importante
El rol de puesta en marcha debe tener una relación de confianza con sagemaker.amazonaws.com y permisos para acceder a los recursos de Amazon S3 y SageMaker.
Para obtener más información sobre los roles de puesta en marcha de SageMaker, consulte SageMaker Roles.
Paso 3: configure los parámetros del modelo
Configure los parámetros de implementación de su modelo de Amazon Nova. Estos ajustes controlan el comportamiento del modelo, la asignación de recursos y las características de inferencia.
Parámetros requeridos
-
IMAGE: el URI de imagen del contenedor de Docker para el contenedor de inferencias de Amazon Nova. Lo proporcionará AWS. -
CONTEXT_LENGTH: longitud del contexto del modelo. -
MAX_CONCURRENCY: número máximo de secuencias por iteración; establece el límite de cuántas solicitudes de usuarios individuales (peticiones) se pueden procesar simultáneamente en un solo lote en la GPU. Rango: valor entero mayor que 0.
Parámetros de generación opcionales
-
DEFAULT_TEMPERATURE: controla la asignación al azar en la generación. Rango: de 0,0 a 2,0 (0.0 = determinista, más alto = asignación al azar mayor). -
DEFAULT_TOP_P: umbral de muestreo del núcleo para la selección de tokens. Rango: del 1e-10 al 1,0. -
DEFAULT_TOP_K: limita la selección de tokens a los K más probables. Rango: número entero -1 o mayor (-1 = sin límite). -
DEFAULT_MAX_NEW_TOKENS: número máximo de tokens que se generarán en respuesta (es decir, número máximo de tokens de salida). Rango: número entero 1 o mayor. -
DEFAULT_LOGPROBS: número de probabilidades logarítmicas que se devolverán por token. Rango: número entero del 1 al 20.
Configurar su implementación
# 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 - Replace with the image URI provided by your AWS contact # Two image tags are available (both point to the same image): IMAGE_LATEST = f"{ECR_ACCOUNT_MAP[REGION]}.dkr.ecr.{REGION}.amazonaws.com/nova-inference-repo:SM-Inference-latest" IMAGE_VERSIONED = f"{ECR_ACCOUNT_MAP[REGION]}.dkr.ecr.{REGION}.amazonaws.com/nova-inference-repo:v1.0.0" # Use the versioned tag for production deployments (recommended) IMAGE = IMAGE_VERSIONED print(f"IMAGE = {IMAGE}") print(f"Available tags:") print(f" Latest: {IMAGE_LATEST}") print(f" Versioned: {IMAGE_VERSIONED}") # 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}")
Configuración de los parámetros específicos de la implementación
Ahora configure los parámetros específicos de la implementación de su modelo de Amazon Nova, como la ubicación de los artefactos del modelo y la selección del tipo de instancia.
Definición del identificador de la implementación
# Deployment identifier - use a descriptive name for your use case JOB_NAME = "my-nova-deployment"
Definición de la ubicación de los artefactos del modelo
Proporcione el URI de Amazon S3 en el que se almacenan los artefactos de los modelos entrenados de Amazon Nova. Esta debe ser la ubicación de salida de su trabajo de entrenamiento o refinamiento del modelo.
# 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/"
Selección de la variante del modelo y del tipo de instancia
# 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}")
Convenciones de nomenclatura
El código genera automáticamente nombres consistentes para los recursos de AWS:
-
Nombre del modelo:
{JOB_NAME}-{model}-{instance-type} -
Configuración del punto de conexión:
{MODEL_NAME}-Config -
Nombre del punto de conexión:
{MODEL_NAME}-Endpoint
Paso 4: cree la configuración del modelo y del punto de conexión de SageMaker
En este paso, creará dos recursos esenciales: un objeto de modelo de SageMaker que haga referencia a los artefactos del modelo de Amazon Nova y una configuración de punto de conexión que defina cómo se implementará el modelo.
Modelo de SageMaker: objeto de modelo que empaqueta la imagen del contenedor de inferencia, la ubicación de los artefactos del modelo y la configuración del entorno. Se trata de un recurso reutilizable que se puede implementar en varios puntos de conexión.
Configuración de punto de conexión: define la configuración de la infraestructura de la implementación, como el tipo de instancia, el número de instancias y las variantes del modelo. Esto le permite administrar la configuración de implementación de forma independiente del propio modelo.
Cree el modelo de SageMaker
El siguiente código crea un modelo de SageMaker que hace referencia a los artefactos del modelo de Amazon Nova:
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}")
Parámetros clave:
-
ModelName: identificador único para su modelo -
Image: URI de imagen del contenedor de Docker para las inferencias de Amazon Nova -
ModelDataSource: ubicación en Amazon S3 de los artefactos de su modelo -
Environment: variables de entorno configuradas en el paso 3 -
ExecutionRoleArn: rol de IAM del paso 2 -
EnableNetworkIsolation: establezca el valor en True para mejorar la seguridad (evita que el contenedor haga llamadas salientes a la red)
Creación de la configuración de punto de conexión
A continuación, cree una configuración de punto de conexión que defina la infraestructura de la implementación:
# 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}")
Parámetros clave:
-
VariantName: identificador de esta variante del modelo (utilice “principal” para las implementaciones de un solo modelo) -
ModelName: hace referencia al modelo creado anteriormente -
InitialInstanceCount: número de instancias que se van a implementar (comience con 1 y escale más adelante si es necesario) -
InstanceType: tipo de instancia de ML seleccionado en el paso 3
Verificación de la creación de recursos
Puede verificar que los recursos se crearon correctamente:
# 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")
Paso 5: implemente el punto de conexión
El siguiente paso consiste en implementar su modelo de Amazon Nova mediante la creación de un punto de conexión en tiempo real de SageMaker. Este punto de conexión alojará su modelo y proporcionará un punto de conexión HTTPS seguro para realizar solicitudes de inferencia.
La creación del punto de conexión suele tardar entre 15 y 30 minutos, ya que AWS aprovisiona la infraestructura, descarga los artefactos del modelo e inicializa el contenedor de inferencias.
Cree el punto de conexión
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}")
Supervisión de la creación de puntos de conexión
El siguiente código sondea el estado del punto de conexión hasta que se complete la implementación:
# 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
Comprobación de que el punto de conexión esté listo
Cuando el punto de conexión esté en en funcionamiento, puede verificar su configuración:
# 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
Solución de problemas de creación de puntos de conexión
Motivos de error comunes:
-
Capacidad insuficiente: el tipo de instancia solicitado no está disponible en su región.
-
Solución: pruebe un tipo de instancia diferente o solicite un aumento de cuota
-
-
Permisos de IAM: el rol de puesta en marcha carece de los permisos necesarios.
-
Solución: compruebe que el rol tenga acceso a los artefactos del modelo de Amazon S3 y a los permisos de SageMaker necesarios
-
-
No se encontraron los artefactos del modelo: el URI de Amazon S3 es incorrecto o no se puede acceder a él.
-
Solución: compruebe el URI de Amazon S3 y los permisos del bucket, y asegúrese de que se encuentra en la región correcta.
-
-
Límites de recursos: se han superado los límites de las cuentas para los puntos de conexión o las instancias.
-
Solución: solicite un aumento de la cuota de servicio a través de Service Quotas o AWS Support.
-
nota
Si tiene que eliminar un punto de conexión defectuoso y empezar de nuevo, haga lo siguiente:
sagemaker.delete_endpoint(EndpointName=ENDPOINT_NAME)
Paso 6: invoque el punto de conexión
Cuando el punto de conexión esté en funcionamiento, puede enviar solicitudes de inferencia para generar predicciones a partir de su modelo de Amazon Nova. SageMaker admite puntos de conexión síncronos (en tiempo real con modos de transmisión o sin transmisión) y puntos de conexión asíncronos (basados en Amazon S3 para el procesamiento por lotes).
Configuración del cliente de tiempo de ejecución
Cree un cliente de tiempo de ejecución de SageMaker con la configuración de tiempo de espera adecuada:
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)
Creación de una función de inferencia universal
La siguiente función gestiona las solicitudes de transmisión y de no transmisión:
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)}")
Ejemplo 1: finalización de un chat sin transmisión
Use el formato de chat para las interacciones conversacionales:
# 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)
Ejemplo 2: finalización de texto simple
Use el formato de finalización para generar texto simple:
# 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)
Ejemplo 3: finalización de un chat con transmisión
# 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)
Ejemplo 4: finalización de un chat multimodal
Use el formato multimodal para la entrada de imágenes y texto:
# 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)
Paso 7 (opcional): elimine recursos
Para evitar incurrir en gastos innecesarios, elimine los recursos de AWS que creó durante este tutorial. Los puntos de conexión de SageMaker incurren en cargos mientras están en funcionamiento, incluso si no realiza activamente solicitudes de inferencia.
importante
La eliminación de los recursos es permanente y no se puede deshacer. Asegúrese de que ya no necesite estos recursos antes de continuar.
Eliminación del punto de conexión
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}")
nota
La eliminación de puntos de conexión es asíncrona. Puede supervisar el estado de la eliminación:
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
Eliminación de la configuración de punto de conexión
Una vez eliminado el punto de conexión, elimine su configuración.
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}")
Eliminación del modelo
Elimine el objeto de modelo de SageMaker:
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}")