Use um registro privado do Docker para contêineres de inferência em tempo real - Amazon SageMaker

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á.

Use um registro privado do Docker para contêineres de inferência em tempo real

A SageMaker hospedagem da Amazon permite que você use imagens armazenadas no Amazon ECR para criar seus contêineres para inferência em tempo real por padrão. Opcionalmente, você pode criar contêineres para inferência em tempo real a partir de imagens em um registro privado do Docker. O registro privado deve ser acessível a partir de uma Amazon VPC na sua conta. Os modelos que você cria com base nas imagens armazenadas no seu registro privado do Docker devem ser configurados para se conectar à mesma VPC em que o registro privado do Docker está acessível. Para obter mais informações sobre como conectar seu modelo a uma VPC, consulte Conceda aos endpoints SageMaker hospedados acesso aos recursos em sua Amazon VPC.

Seu registro do Docker deve ser protegido com um certificado TLS de uma autoridade de certificação (CA) pública conhecida.

nota

Seu registro privado do Docker deve permitir o tráfego de entrada dos grupos de segurança que você especifica na configuração da VPC para seu modelo, para que a SageMaker hospedagem possa extrair imagens do modelo do seu registro.

SageMaker pode extrair imagens de modelos DockerHub se houver um caminho para a Internet aberta dentro de sua VPC.

Armazene imagens em um registro privado do Docker que não seja o registro de contêiner do Amazon Elastic

Para usar um registro privado do Docker para armazenar suas imagens para inferência SageMaker em tempo real, crie um registro privado que seja acessível a partir da sua Amazon VPC. Para obter informações sobre como criar um registro do Docker, consulte Implantar um servidor de registro na documentação do Docker. O registro do Docker deve estar em conformidade com o seguinte:

  • O registro deve ser um registro da API HTTP V2 do registro do Docker.

  • O registro do Docker deve estar acessível a partir da mesma VPC que você especificar no parâmetro VpcConfig que você especificou ao criar seu modelo.

Use uma imagem de um registro privado do Docker para inferência em tempo real

Ao criar um modelo e implantá-lo SageMaker na hospedagem, você pode especificar que ele use uma imagem do seu registro privado do Docker para criar o contêiner de inferência. Especifique isso no objeto ImageConfig no parâmetro PrimaryContainer que você passa para uma chamada para a função create_model.

Usando uma imagem armazenada no seu registro privado do Docker para seu contêiner de inferência
  1. Crie o objeto de configuração de imagem e especifique um valor de Vpc para o campo RepositoryAccessMode.

    image_config = { 'RepositoryAccessMode': 'Vpc' }
  2. Se o seu registro privado do Docker exigir autenticação, adicione um objeto RepositoryAuthConfig ao objeto de configuração de imagem. Para o RepositoryCredentialsProviderArn campo do RepositoryAuthConfig objeto, especifique o Amazon Resource Name (ARN) de uma AWS Lambda função que fornece credenciais que permitem SageMaker a autenticação em seu Docker Registry privado. Para obter informações sobre como criar a função do Lambda para fornecer autenticação, consulte Permitir SageMaker a autenticação em um registro Docker privado.

    image_config = { 'RepositoryAccessMode': 'Vpc', 'RepositoryAuthConfig': { 'RepositoryCredentialsProviderArn': 'arn:aws:lambda:Region:Acct:function:FunctionName' } }
  3. Crie o objeto de contêiner primário que você deseja passar para create_model, usando o objeto de configuração de imagem que você criou na etapa anterior.

    Forneça sua imagem em formato de resumo. Se você fornecer sua imagem usando a :latest tag, existe o risco de SageMaker extrair uma versão mais recente da imagem do que a pretendida. O uso do formulário de resumo garante que ele SageMaker extraia a versão de imagem pretendida.

    primary_container = { 'ContainerHostname': 'ModelContainer', 'Image': 'myteam.myorg.com/docker-local/my-inference-image:<IMAGE-TAG>', 'ImageConfig': image_config }
  4. Especifique o nome do modelo e o perfil de execução para o qual você quer passar para create_model.

    model_name = 'vpc-model' execution_role_arn = 'arn:aws:iam::123456789012:role/SageMakerExecutionRole'
  5. Especifique um ou mais grupos de segurança e sub-redes para a configuração da VPC do seu modelo. Seu registro particular do Docker deve permitir o tráfego de entrada dos grupos de segurança que você especifica. As sub-redes que você especifica devem estar na mesma VPC do seu registro particular do Docker.

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

    import boto3 sm = boto3.client('sagemaker')
  7. Crie o modelo chamando create_model, usando os valores que você especificou nas etapas anteriores para os parâmetros PrimaryContainer e 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 fim, chame create_endpoint_config e create_endpoint para criar o endpoint de hospedagem, usando o modelo que você criou na etapa 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)

Permitir SageMaker a autenticação em um registro Docker privado

Para extrair uma imagem de inferência de um registro privado do Docker que requer autenticação, crie uma AWS Lambda função que forneça credenciais e forneça o Amazon Resource Name (ARN) da função Lambda ao chamar create_model. Quando SageMaker executadocreate_model, ele chama a função Lambda que você especificou para obter credenciais para se autenticar no seu registro do Docker.

Criar a função do Lambda

Crie uma AWS Lambda função que retorne uma resposta com o seguinte formato:

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

Dependendo de como você configura a autenticação para seu registro privado do Docker, as credenciais que sua função Lambda retorna podem significar uma das seguintes opções:

  • Se você configurar seu registro privado do Docker para usar a autenticação básica, forneça as credenciais de login para se autenticar no registro.

  • Se você configurar seu registro privado do Docker para usar a autenticação do token do portador, as credenciais de login serão enviadas ao seu servidor de autorização, que retornará um token do portador que pode ser usado para autenticar no registro privado do Docker.

Dê permissão ao seu perfil de execução para o Lambda

A função de execução que você usa para chamar create_model deve ter permissões para chamar AWS Lambda funções. Adicione as políticas de permissões a seguir como o seu ao perfil de execução.

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

Onde myLambdaFunctionestá o nome da sua função Lambda. Para saber mais sobre como editar a política de permissões de uma função, consulte Modificar a política de permissões de um perfil (console) no Guia do usuário do IAM AWS Identity and Access Management .

nota

Uma função de execução com a política AmazonSageMakerFullAccess gerenciada anexada a ela tem permissão para chamar qualquer função Lambda com SageMakerseu nome.

Criar um endpoint de interface da VPC para o Lambda

Crie um endpoint de interface para que sua Amazon VPC possa se comunicar com sua função AWS Lambda sem enviar tráfego pela Internet. Para obter mais informações sobre como fazer isso, consulte Configurar endpoints da VPC da interface para o Lambda no Guia do desenvolvedor AWS Lambda .

SageMaker a hospedagem envia uma solicitação por meio de sua VPC paralambda.region.amazonaws.com, para chamar sua função Lambda. Se você escolher o nome DNS privado ao criar seu endpoint de interface, o Amazon Route 53 roteará a chamada para o endpoint da interface Lambda. Se você usa um provedor de DNS diferente, certifique-se de mapear lambda.region.amazonaws.com para o seu endpoint da interface Lambda.