Utilice un registro privado de Docker para contenedores de inferencia en tiempo real - Amazon SageMaker

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.

Utilice un registro privado de Docker para contenedores de inferencia en tiempo real

El SageMaker alojamiento de Amazon le permite utilizar imágenes almacenadas en Amazon ECR para crear sus contenedores para su inferencia en tiempo real de forma predeterminada. Si lo desea, puede crear contenedores para realizar inferencias en tiempo real a partir de imágenes en un registro privado de Docker. Debe poder acceder al registro privado desde una VPC de Amazon de su cuenta. Los modelos que cree en función de las imágenes almacenadas en su registro privado de Docker deben configurarse para conectarse a la misma VPC desde la que se puede acceder al registro privado de Docker. Para obtener más información sobre cómo conectarse a una VPC, consulte Ofrezca a los endpoints SageMaker alojados acceso a los recursos de su Amazon VPC.

Su registro de Docker protegerse con un certificado TLS de una autoridad de certificación pública conocida (CA).

nota

Su registro privado de Docker debe permitir el tráfico entrante de los grupos de seguridad que especifique en la configuración de VPC de su modelo, de modo que el SageMaker alojamiento pueda extraer las imágenes del modelo de su registro.

SageMaker puede extraer imágenes de modelos DockerHub si hay una ruta hacia Internet abierta dentro de su VPC.

Almacene las imágenes en un registro de Docker privado que no sea Amazon Elastic Container Registry

Si desea utilizar un registro de Docker privado para almacenar sus imágenes con fines de inferencia SageMaker en tiempo real, cree un registro privado al que pueda acceder desde su Amazon VPC. Para obtener información sobre cómo crear un registro de Docker, consulte Implementar un servidor de registro en la documentación de Docker. El registro de Docker debe cumplir con lo siguiente:

  • El registro debe ser Docker Registry HTTP API V2.

  • Se debe poder acceder al registro de Docker desde la misma VPC que especificó en el parámetro VpcConfig que especificó al crear el modelo.

Utilice una imagen de un registro privado de Docker para contenedores de inferencia en tiempo real

Cuando crea un modelo y lo implementa en el SageMaker alojamiento, puede especificar que utilice una imagen de su registro privado de Docker para crear el contenedor de inferencias. Especifique esto en el objeto ImageConfig del parámetro PrimaryContainer que pase a una llamada a la función create_model.

Para usar una imagen almacenada en su registro privado de Docker como contenedor de inferencias
  1. Cree el objeto de configuración de la imagen y especifique un valor de Vpc para el campo RepositoryAccessMode.

    image_config = { 'RepositoryAccessMode': 'Vpc' }
  2. Si su registro privado de Docker requiere autenticación, debe añadir un objeto RepositoryAuthConfig al objeto de configuración de la imagen. Para el RepositoryCredentialsProviderArn campo del RepositoryAuthConfig objeto, especifique el nombre de recurso de Amazon (ARN) de una AWS Lambda función que proporcione credenciales que permitan SageMaker autenticarse en su Docker Registry privado. Para obtener información acerca de cómo crear la función de Lambda para proporcionar autenticación, consulte Permita SageMaker autenticarse en un registro privado de Docker.

    image_config = { 'RepositoryAccessMode': 'Vpc', 'RepositoryAuthConfig': { 'RepositoryCredentialsProviderArn': 'arn:aws:lambda:Region:Acct:function:FunctionName' } }
  3. Cree el objeto contenedor principal que desee pasar a create_model, utilizando el objeto de configuración de imagen que creó en el paso anterior.

    Proporcione la imagen en forma de resumen. Si proporciona la imagen mediante la :latest etiqueta, existe el riesgo de que SageMaker extraiga una versión de la imagen más reciente de lo previsto. El uso del formulario de resumen garantiza que se SageMaker extraiga la versión de imagen deseada.

    primary_container = { 'ContainerHostname': 'ModelContainer', 'Image': 'myteam.myorg.com/docker-local/my-inference-image:<IMAGE-TAG>', 'ImageConfig': image_config }
  4. Especifique el nombre del modelo y el rol de ejecución que desea pasar a create_model.

    model_name = 'vpc-model' execution_role_arn = 'arn:aws:iam::123456789012:role/SageMakerExecutionRole'
  5. Especifique uno o más grupos de seguridad y subredes para la configuración de VPC de su modelo. Su registro privado de Docker debe permitir el tráfico entrante de los grupos de seguridad que especifique. Las subredes que especifique deben estar en la misma VPC que su registro privado de Docker.

    vpc_config = { 'SecurityGroupIds': ['sg-0123456789abcdef0'], 'Subnets': ['subnet-0123456789abcdef0','subnet-0123456789abcdef1'] }
  6. Obtenga un cliente Boto3 SageMaker .

    import boto3 sm = boto3.client('sagemaker')
  7. Cree el modelo mediante una llamada a create_model, utilizando los valores que especificó en los pasos anteriores para los parámetros PrimaryContainer y VpcConfig.

    try: resp = sm.create_model( ModelName=model_name, PrimaryContainer=primary_container, ExecutionRoleArn=execution_role_arn, VpcConfig=vpc_config, ) except Exception as e: print(f'error calling CreateModel operation: {e}') else: print(resp)
  8. Por último, llame create_endpoint_config y create_endpoint para crear el punto de conexión de alojamiento con el modelo creado en el paso anterior.

    endpoint_config_name = 'my-endpoint-config' sm.create_endpoint_config( EndpointConfigName=endpoint_config_name, ProductionVariants=[ { 'VariantName': 'MyVariant', 'ModelName': model_name, 'InitialInstanceCount': 1, 'InstanceType': 'ml.t2.medium' }, ], ) endpoint_name = 'my-endpoint' sm.create_endpoint( EndpointName=endpoint_name, EndpointConfigName=endpoint_config_name, ) sm.describe_endpoint(EndpointName=endpoint_name)

Permita SageMaker autenticarse en un registro privado de Docker

Para extraer una imagen de inferencia de un registro de Docker privado que requiera autenticación, cree una AWS Lambda función que proporcione credenciales y proporcione el nombre de recurso de Amazon (ARN) de la función Lambda cuando llame a create_model. Cuando SageMaker se ejecutacreate_model, llama a la función Lambda que especificó para obtener las credenciales necesarias para autenticarse en el registro de Docker.

Crear la función de Lambda

Cree una AWS Lambda función que devuelva una respuesta con el siguiente formulario:

def handler(event, context): response = { "Credentials": {"Username": "username", "Password": "password"} } return response

Según cómo configure la autenticación para su registro privado de Docker, las credenciales que devuelva la función de Lambda pueden significar alguna de las siguientes opciones:

  • Si configura su registro privado de Docker para usar la autenticación básica, proporcione las credenciales de inicio de sesión para autenticarse en el registro.

  • Si configura su registro privado de Docker para usar la autenticación con token de portador, las credenciales de inicio de sesión se envían a su servidor de autorización, que devuelve un token de portador que luego se puede usar para autenticarse en el registro privado de Docker.

Conceder permiso de rol de ejecución a Lambda

La función de ejecución que utilice para llamar create_model debe tener permisos para llamar a AWS Lambda funciones. Agregue los siguientes permisos como una política en línea al rol de IAM de ejecución de tareas.

{ "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": [ "arn:aws:lambda:*:*:function:*myLambdaFunction*" ] }

¿Dónde myLambdaFunctionestá el nombre de la función Lambda? Para obtener más información acerca de cómo editar la política de permisos, consulte Modificación de una política de permisos de rol (consola) en la Guía del usuario de AWS Identity and Access Management .

nota

Un rol de ejecución con la política AmazonSageMakerFullAccess gestionada adjunta tiene permiso para llamar a cualquier función de Lambda que tenga SageMakeren su nombre.

Crear un punto de conexión de VPC de la interfaz para Lambda

Cree un punto de conexión de interfaz para que su VPC de Amazon pueda comunicarse con su función AWS Lambda sin enviar tráfico a través de Internet. Para obtener más información sobre cómo hacerlo, consulte Conexión de puntos de conexión de VPC de la interfaz de entrada para Lambda en la AWS Lambda Guía para desarrolladores.

SageMaker hosting envía una solicitud a través de tu VPC alambda.region.amazonaws.com, para llamar a tu función Lambda. Si elige un nombre de DNS privado al crear el punto de conexión de la interfaz, Amazon Route 53 dirige la llamada al punto de conexión de la interfaz Lambda. Si utiliza un proveedor de DNS diferente, asegúrese de asignar lambda.region.amazonaws.com al punto de conexión de la interfaz Lambda.