O blog da AWS
Criação de domínios e perfis de usuário do Amazon SageMaker Studio usando o AWS CloudFormation
Por Qingwei Li, David Ping e Joseph Jegan
O Amazon SageMaker Studio é o primeiro ambiente de desenvolvimento (IDE) totalmente integrado para machine learning (ML). Ele fornece uma única interface visual baseada na Web onde você pode executar todas as etapas de desenvolvimento de ML necessárias para criar, treinar, ajustar, depurar, implantar e monitorar modelos. Nesta publicação, demonstramos como você pode criar um domínio e um perfil de usuário do SageMaker Studio usando o AWS CloudFormation. O AWS CloudFormation oferece uma maneira fácil de modelar uma coleção de recursos relacionados da AWS e de terceiros, provisioná-los de forma rápida e consistente e gerenciá-los durante todo o ciclo de vida tratando a infraestrutura como código.
Como o AWS CloudFormation não está nativamente integrado ao SageMaker Studio no momento da redação, usamos o AWS CloudFormation para provisionar duas funções do AWS Lambda e, em seguida, invocar essas funções para criar, excluir e atualizar o domínio e o perfil de usuário do Studio. No resto desta postagem, percorremos a função do Lambda para criar o domínio Studio (o código para criar um perfil de usuário do Studio funciona de forma semelhante) e, em seguida, o modelo do CloudFormation. Todo o código está disponível no repositório do GitHub.
Função do Lambda para criar, excluir e atualizar um domínio do Studio
Na função do Lambda, o lambda_handler chama uma das três funções, handle_create, handle_update e handle_delete, para criar, atualizar e excluir o domínio do Studio, respectivamente. Como chamamos essa função usando um recurso personalizado do AWS CloudFormation, o tipo de solicitação de recurso personalizado é enviado no campo RequestType do AWS CloudFormation. RequestType determina qual função chamar dentro da função lambda_handler . Por exemplo, quando o AWS CloudFormation detecta quaisquer alterações na seção custom።StudioDomain do nosso modelo do CloudFormation, o requestType é definido como Update by AWS CloudFormation e a função handle_update é chamada. O seguinte é o código lambda_handler :
def handle_create(event, context): print("**Starting running the SageMaker workshop setup code") resource_config = event['ResourceProperties'] print("**Creating studio domain") response_data = create_studio_domain(resource_config) cfnresponse.send(event, context, cfnresponse.SUCCESS, {}, physicalResourceId=response_data['DomainArn'])
As três funções para criar, atualizar e excluir o domínio funcionam de forma semelhante. Para este post, percorremos o código responsável pela criação de um domínio. Ao invocar a função do Lambda por meio de um recurso personalizado do AWS CloudFormation, passamos os principais parâmetros que ajudam a definir nosso domínio Studio por meio das Propriedades do recurso personalizado. Extraímos esses parâmetros da fonte de eventos do AWS CloudFormation na função Lambda. Na função handle_create , os parâmetros são lidos do evento e passados para a função create_studio_domain . Consulte o seguinte código para handle_create:
Usamos um cliente Boto3 SageMaker para criar domínios do Studio. Para esta publicação, definimos o nome de domínio, a VPC e a sub-rede que o Studio usa e a função de execução do SageMaker para o domínio do Studio. Depois que a API create_domain é executada, verificamos o status de criação a cada 5 segundos. Quando a criação estiver concluída, retornamos o Amazon Resource Name (ARN) e o URL do domínio criado. A quantidade de tempo que o Lambda permite que uma função seja executada antes de pará-la é de 3 segundos por padrão. Portanto, certifique-se de que o limite de tempo limite da sua função do Lambda esteja definido adequadamente. Definimos o limite de tempo limite para 900 segundos. O seguinte é o código create_studio_domain (as funções para excluir e atualizar domínios também são implementadas usando boto3 e construídas de forma semelhante):
Finalmente, nós compactamos o script Python, salvá-lo como domain_function.zip e carregá-lo no Amazon Simple Storage Service (Amazon S3).
A função Lambda usada para criar um perfil de usuário é construída de forma semelhante. Para obter mais informações, consulte o script UserProfile_function.py no repositório do GitHub.
Modelo do CloudFormation
No modelo do CloudFormation, criamos uma função de execução para o Lambda, uma função de execução para o SageMaker Studio e a função Lambda usando o código explicado na seção anterior. Chamamos essa função especificando-a como o alvo de um recurso do cliente. Para obter mais informações sobre como invocar uma função do Lambda com o AWS CloudFormation, consulte Uso do AWS Lambda com o AWS CloudFormation.
Role de execução do Lambda
Essa role dá à nossa função Lambda a permissão para criar um fluxo de logs do Amazon CloudWatch e gravar logs no CloudWatch. Como criamos, excluímos e atualizamos domínios do Studio em nossa função, também concedemos a essa função a permissão para fazê-lo. Consulte o seguinte código:
Role de execução do SageMaker
A seguinte role de execução do SageMaker é anexada ao Studio (para fins de demonstração, concedemos esta função SageMakerFullAccess):
Função Lambda
O recurso AWS።Lambda።Function cria uma função do Lambda. Para criar uma função, precisamos de um pacote de implantação e uma role de execução. O pacote de implantação contém nosso código de função (function.zip). A role de execução, que é o LambdaExecutionRole criado a partir da etapa anterior, concede à role permissão para criar uma função do Lambda. Também adicionamos o CFNResponseLayer ao ambiente de execução da nossa função. O CFNResponseLayer permite que a função interaja com um recurso personalizado do AWS CloudFormation. Ele contém um método de envio para enviar respostas do Lambda para o AWS CloudFormation. Consulte o seguinte código:
Invocar a função do Lambda usando um recurso personalizado do AWS CloudFormation
Os recursos personalizados fornecem uma maneira de escrever a lógica de provisionamento personalizada em um modelo do CloudFormation e fazer com que o AWS CloudFormation a execute durante uma operação da stack, como quando você cria, atualiza ou exclui uma stack. Para obter mais informações, consulte Recursos personalizados. Nós obtemos o ARN da função do Lambda criado a partir da etapa anterior e o passamos para o AWS CloudFormation como nosso token de serviço. Isso permite que o AWS CloudFormation execute a função do Lambda. Passamos os parâmetros necessários para criar, atualizar e excluir nosso domínio em Propriedades. Consulte o seguinte código:
Da mesma forma, invocamos a função Lambda para criar um perfil de usuário:
Conclusão
Nesta publicação, percorremos as etapas de criação, exclusão e atualização de domínios do SageMaker Studio usando o AWS CloudFormation e o Lambda. Os arquivos de exemplo estão disponíveis no repositório do GitHub. Para obter informações sobre a criação de domínio do Studio dentro de uma VPC, consulte Protegendo a conectividade do Amazon SageMaker Studio usando uma VPC privada. Para obter mais informações sobre o SageMaker Studio, consulte Introdução ao Amazon SageMaker Studio.
Este artigo foi traduzido do Blog da AWS em Inglês.
Sobre os autores
Qingwei Li é especialista em aprendizado de máquina na Amazon Web Services. Ele recebeu seu Ph.D. em Pesquisa de Operações depois que ele quebrou a conta de bolsa de pesquisa de seu conselheiro e não conseguiu entregar o Prêmio Nobel que ele prometeu. Atualmente, ele ajuda os clientes do setor de serviços financeiros e seguros a criar soluções de machine learning na AWS. Em seu tempo livre, ele gosta de ler e ensinar.
Joseph Jegan é arquiteto de aplicativos em nuvem da Amazon Web Services. Ele ajuda os clientes da AWS a usar os serviços da AWS para projetar aplicativos escaláveis e seguros. Ele tem mais de 20 anos de experiência em desenvolvimento de software antes da AWS, trabalhando no desenvolvimento de plataforma de comércio eletrônico para grandes clientes de varejo. Ele é baseado em Nova York e gosta de aprender tecnologias nativas emergentes em nuvem.
David Ping é um principal arquiteto de soluções de aprendizado de máquina e Gerente Sr. de Arquitetura de soluções de AI/ML na Amazon Web Services. Ele ajuda os clientes corporativos a criar e operar soluções de machine learning na AWS. Em seu tempo livre, David gosta de caminhar e ler os mais recentes artigos de aprendizado de máquina.
Revisor
Evandro Franco é um arquiteto de soluções do time de Startups na Amazon Web Services. Em sua função, ele ajuda as Startups a superar os desafios de negócio utilizando a plataforma da AWS. Ele tem mais de 15 anos de experiência na área de tecnologia. Em seu tempo livre, gosta de correr e passar tempo com sua família.