As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Implante modelos personalizados e ajustados do Amazon S3 e da Amazon usando kubectl FSx
As etapas a seguir mostram como implantar modelos armazenados no Amazon S3 ou na Amazon em um SageMaker HyperPod cluster da Amazon FSx usando kubectl.
As instruções a seguir contêm células de código e comandos projetados para execução em um ambiente de notebook Jupyter, como Amazon SageMaker Studio ou SageMaker Notebook Instances. Cada bloco de código representa uma célula do notebook que deve ser executada sequencialmente. Os elementos interativos, incluindo tabelas de descoberta de modelos e comandos de monitoramento de status, são otimizados para a interface do notebook e podem não funcionar adequadamente em outros ambientes. Certifique-se de ter acesso a um ambiente de notebook com as AWS permissões necessárias antes de continuar.
Pré-requisitos
Verifique se você configurou recursos de inferência em seus SageMaker HyperPod clusters da Amazon. Para obter mais informações, consulte Configurando seus HyperPod clusters para implantação de modelos.
Definição e configuração
Substitua todos os valores de espaço reservado por seus identificadores de recursos reais.
-
Inicialize o nome do seu cluster. Isso identifica o HyperPod cluster em que seu modelo será implantado.
# 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"
-
Inicialize seu namespace de cluster. Seu administrador de cluster já deve ter criado uma conta de serviço de inferência de hyperpod em seu namespace.
cluster_namespace="<namespace>"
-
Defina o método auxiliar para criar arquivos YAML para implantação
A função auxiliar a seguir gera os arquivos de configuração YAML do Kubernetes necessários para implantar seu modelo. Essa função cria estruturas YAML diferentes, dependendo se seu modelo está armazenado no Amazon S3 ou na FSx Amazon, manipulando automaticamente as configurações específicas do armazenamento. Você usará essa função nas próximas seções para gerar os arquivos de implantação para o back-end de armazenamento escolhido.
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 seu modelo a partir do Amazon S3 ou da Amazon FSx
Implante o modelo em seu cluster
-
Obtenha o nome do cluster Amazon EKS do ARN do HyperPod cluster para autenticação 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 o kubectl para se autenticar com o cluster Hyperpod EKS usando credenciais AWS
!aws eks update-kubeconfig --name $cluster_name --region $region_name
-
Implante seu
InferenceEndpointConfig
modelo.!kubectl apply -f $INFERENCE_ENDPOINT_CONFIG_YAML_FILE_PATH
Verifique o status da sua implantação
-
Verifique se o modelo foi implantado com sucesso.
!kubectl describe InferenceEndpointConfig $deployment_name -n $cluster_namespace
Esse comando retorna uma saída semelhante à seguinte:
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
-
Verifique se o endpoint foi criado com sucesso.
!kubectl describe SageMakerEndpointRegistration $sagemaker_endpoint_name -n $cluster_namespace
Esse comando retorna uma saída semelhante à seguinte:
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
-
Teste o endpoint implantado para verificar se ele está funcionando corretamente. Essa etapa confirma que seu modelo foi implantado com sucesso e pode processar solicitações de inferência.
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."}]
Gerencie sua implantação
Quando terminar de testar sua implantação, use os comandos a seguir para limpar seus recursos.
nota
Verifique se você não precisa mais do modelo implantado ou dos dados armazenados antes de continuar.
Limpe os seus recursos
-
Exclua a implantação de inferência e os recursos associados do Kubernetes. Isso interrompe a execução dos contêineres do modelo e remove o SageMaker endpoint.
!kubectl delete inferenceendpointconfig.inference.sagemaker.aws.amazon.com/$deployment_name
-
(Opcional) Exclua o FSx volume.
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)}")
-
Verifique se a limpeza foi feita com sucesso.
# 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
Solução de problemas
-
Verifique o status de implantação do Kubernetes.
!kubectl describe deployment $deployment_name -n $cluster_namespace
-
Verifique o InferenceEndpointConfig status para ver o estado de implantação de alto nível e quaisquer problemas de configuração.
kubectl describe InferenceEndpointConfig $deployment_name -n $cluster_namespace
-
Verifique o status de todos os objetos do Kubernetes. Tenha uma visão abrangente de todos os recursos relacionados do Kubernetes em seu namespace. Isso fornece uma visão geral rápida do que está em execução e do que pode estar faltando.
!kubectl get pods,svc,deployment,InferenceEndpointConfig,sagemakerendpointregistration -n $cluster_namespace