Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Implemente modelos personalizados y ajustados de Amazon S3 y Amazon mediante kubectl FSx
Los siguientes pasos muestran cómo implementar modelos almacenados en Amazon S3 o Amazon en un SageMaker HyperPod clúster de Amazon FSx mediante kubectl.
Las siguientes instrucciones contienen celdas de código y comandos diseñados para ejecutarse en un entorno de Jupyter Notebook, como Amazon SageMaker Studio o SageMaker Notebook Instances. Cada bloque de código representa una celda de bloc de notas que debe ejecutarse secuencialmente. Los elementos interactivos, incluidas las tablas de descubrimiento de modelos y los comandos de supervisión del estado, están optimizados para la interfaz del portátil y es posible que no funcionen correctamente en otros entornos. Asegúrese de tener acceso a un entorno de portátil con los AWS permisos necesarios antes de continuar.
Requisitos previos
Compruebe que ha configurado las capacidades de inferencia en sus SageMaker HyperPod clústeres de Amazon. Para obtener más información, consulte Configuración de los clústeres para la implementación de modelos HyperPod .
Ajustes y configuración
Sustituya todos los valores de los marcadores de posición por sus identificadores de recursos reales.
-
Inicialice el nombre de su clúster. Esto identifica el HyperPod clúster en el que se implementará el modelo.
# Specify your hyperpod cluster name here hyperpod_cluster_name="<Hyperpod_cluster_name>" # NOTE: For sample deployment, we use g5.8xlarge for deepseek-r1 1.5b model which has sufficient memory and GPU instance_type="ml.g5.8xlarge"
-
Inicialice el espacio de nombres del clúster. El administrador del clúster ya debería haber creado una cuenta de servicio de inferencia de hiperpodes en tu espacio de nombres.
cluster_namespace="<namespace>"
-
Defina el método auxiliar para crear archivos YAML para su implementación
La siguiente función auxiliar genera los archivos de configuración YAML de Kubernetes necesarios para implementar el modelo. Esta función crea diferentes estructuras de YAML en función de si el modelo está almacenado en Amazon S3 o Amazon FSx, y gestiona automáticamente las configuraciones específicas del almacenamiento. Utilizará esta función en las siguientes secciones para generar los archivos de implementación para el backend de almacenamiento que elija.
def generate_inferenceendpointconfig_yaml(deployment_name, model_id, namespace, instance_type, output_file_path, region, tls_certificate_s3_location, model_location, sagemaker_endpoint_name, fsxFileSystemId="", isFsx=False, s3_bucket=None): """ Generate a InferenceEndpointConfig YAML file for S3 storage with the provided parameters. Args: deployment_name (str): The deployment name model_id (str): The model ID namespace (str): The namespace instance_type (str): The instance type output_file_path (str): Path where the YAML file will be saved region (str): Region where bucket exists tls_certificate_s3_location (str): S3 location for TLS certificate model_location (str): Location of the model sagemaker_endpoint_name (str): Name of the SageMaker endpoint fsxFileSystemId (str): FSx filesystem ID (optional) isFsx (bool): Whether to use FSx storage (optional) s3_bucket (str): S3 bucket where model exists (optional, only needed when isFsx is False) """ # Create the YAML structure model_config = { "apiVersion": "inference.sagemaker.aws.amazon.com/v1alpha1", "kind": "InferenceEndpointConfig", "metadata": { "name": deployment_name, "namespace": namespace }, "spec": { "modelName": model_id, "endpointName": sagemaker_endpoint_name, "invocationEndpoint": "invocations", "instanceType": instance_type, "modelSourceConfig": {}, "worker": { "resources": { "limits": { "nvidia.com/gpu": 1, }, "requests": { "nvidia.com/gpu": 1, "cpu": "30000m", "memory": "100Gi" } }, "image": "763104351884.dkr.ecr.us-east-2.amazonaws.com/huggingface-pytorch-tgi-inference:2.4.0-tgi2.3.1-gpu-py311-cu124-ubuntu22.04-v2.0", "modelInvocationPort": { "containerPort": 8080, "name": "http" }, "modelVolumeMount": { "name": "model-weights", "mountPath": "/opt/ml/model" }, "environmentVariables": [ { "name": "HF_MODEL_ID", "value": "/opt/ml/model" }, { "name": "SAGEMAKER_PROGRAM", "value": "inference.py", }, { "name": "SAGEMAKER_SUBMIT_DIRECTORY", "value": "/opt/ml/model/code", }, { "name": "MODEL_CACHE_ROOT", "value": "/opt/ml/model" }, { "name": "SAGEMAKER_ENV", "value": "1", } ] }, "tlsConfig": { "tlsCertificateOutputS3Uri": tls_certificate_s3_location, } }, } if (not isFsx): if s3_bucket is None: raise ValueError("s3_bucket is required when isFsx is False") model_config["spec"]["modelSourceConfig"] = { "modelSourceType": "s3", "s3Storage": { "bucketName": s3_bucket, "region": region, }, "modelLocation": model_location } else: model_config["spec"]["modelSourceConfig"] = { "modelSourceType": "fsx", "fsxStorage": { "fileSystemId": fsxFileSystemId, }, "modelLocation": model_location } # Write to YAML file with open(output_file_path, 'w') as file: yaml.dump(model_config, file, default_flow_style=False) print(f"YAML file created successfully at: {output_file_path}")
Implemente su modelo desde Amazon S3 o Amazon FSx
Implemente el modelo en su clúster
-
Obtenga el nombre del clúster de Amazon EKS del ARN del HyperPod clúster para la autenticación de kubectl.
cluster_arn = !aws sagemaker describe-cluster --cluster-name $hyperpod_cluster_name --query "Orchestrator.Eks.ClusterArn" --region $region_name cluster_name = cluster_arn[0].strip('"').split('/')[-1] print(cluster_name)
-
Configure kubectl para que se autentique con el clúster EKS de Hyperpod mediante credenciales AWS
!aws eks update-kubeconfig --name $cluster_name --region $region_name
-
InferenceEndpointConfig
Implemente su modelo.!kubectl apply -f $INFERENCE_ENDPOINT_CONFIG_YAML_FILE_PATH
Compruebe el estado de su despliegue
-
Compruebe si el modelo se implementó correctamente.
!kubectl describe InferenceEndpointConfig $deployment_name -n $cluster_namespace
El comando devuelve un resultado similar al siguiente:
Name: deepseek15b-20250624043033 Reason: NativeDeploymentObjectFound Status: Conditions: Last Transition Time: 2025-07-10T18:39:51Z Message: Deployment, ALB Creation or SageMaker endpoint registration creation for model is in progress Reason: InProgress Status: True Type: DeploymentInProgress Last Transition Time: 2025-07-10T18:47:26Z Message: Deployment and SageMaker endpoint registration for model have been created successfully Reason: Success Status: True Type: DeploymentComplete
-
Compruebe que el punto final se haya creado correctamente.
!kubectl describe SageMakerEndpointRegistration $sagemaker_endpoint_name -n $cluster_namespace
El comando devuelve un resultado similar al siguiente:
Name: deepseek15b-20250624043033 Namespace: ns-team-a Kind: SageMakerEndpointRegistration Status: Conditions: Last Transition Time: 2025-06-24T04:33:42Z Message: Endpoint created. Status: True Type: EndpointCreated State: CreationCompleted
-
Pruebe el punto final implementado para comprobar que funciona correctamente. Este paso confirma que el modelo se ha implementado correctamente y que puede procesar las solicitudes de inferencia.
import boto3 prompt = "{\"inputs\": \"How tall is Mt Everest?\"}}" runtime_client = boto3.client('sagemaker-runtime', region_name=region_name, config=boto3_config) response = runtime_client.invoke_endpoint( EndpointName=sagemaker_endpoint_name, ContentType="application/json", Body=prompt ) print(response["Body"].read().decode())
[{"generated_text":"As of the last update in July 2024, Mount Everest stands at a height of **8,850 meters** (29,029 feet) above sea level. The exact elevation can vary slightly due to changes caused by tectonic activity and the melting of ice sheets."}]
Administre su despliegue
Cuando termine de probar la implementación, utilice los siguientes comandos para limpiar los recursos.
nota
Compruebe que ya no necesita el modelo implementado ni los datos almacenados antes de continuar.
Eliminación de sus recursos
-
Elimine el despliegue de inferencia y los recursos de Kubernetes asociados. Esto detiene los contenedores del modelo en ejecución y elimina el punto final. SageMaker
!kubectl delete inferenceendpointconfig.inference.sagemaker.aws.amazon.com/$deployment_name
-
(Opcional) Elimine el FSx volumen.
try: # Delete the file system response = fsx.delete_file_system( FileSystemId=file_system_id ) print(f"Deleting FSx filesystem: {file_system_id}") # Optional: Wait for deletion to complete while True: try: response = fsx.describe_file_systems(FileSystemIds=[file_system_id]) status = response['FileSystems'][0]['Lifecycle'] print(f"Current status: {status}") time.sleep(30) except fsx.exceptions.FileSystemNotFound: print("File system deleted successfully") break except Exception as e: print(f"Error deleting file system: {str(e)}")
-
Compruebe que la limpieza se haya realizado correctamente.
# Check that Kubernetes resources are removed kubectl get pods,svc,deployment,InferenceEndpointConfig,sagemakerendpointregistration -n $cluster_namespace # Verify SageMaker endpoint is deleted (should return error or empty) aws sagemaker describe-endpoint --endpoint-name $sagemaker_endpoint_name --region $region_name
Solución de problemas
-
Comprueba el estado de despliegue de Kubernetes.
!kubectl describe deployment $deployment_name -n $cluster_namespace
-
Compruebe el InferenceEndpointConfig estado para ver el estado del despliegue de alto nivel y cualquier problema de configuración.
kubectl describe InferenceEndpointConfig $deployment_name -n $cluster_namespace
-
Comprueba el estado de todos los objetos de Kubernetes. Obtén una visión completa de todos los recursos de Kubernetes relacionados en tu espacio de nombres. Esto te proporciona una visión general rápida de lo que se está ejecutando y lo que podría faltar.
!kubectl get pods,svc,deployment,InferenceEndpointConfig,sagemakerendpointregistration -n $cluster_namespace