Bootcamp 3 (Sistemas Inteligentes) do curso de Pós-Graduação em Engenharia de Dados e Inteligência Artificial nas Faculdades da Industria
Ao final de curso você estará apto(a) a desenvolver e implementar um modelo de Machine Learning usando as ferramentas disponíveis na AWS. Vamos começar 🚀
-
Use esse link para criar sua conta e incluir um método de pagamento aws.amazon.com/free
-
Ao logar na conta da Amazon clique no nome do seu usuário no canto superior direito e depois em configurações (Settings)
-
Em Localização e região padrão (Localization and default Region) clique em editar e defina Language: English (US) e Default Region: US East (N. Virginia) us-east-1
- Em Services, no canto superior esquerdo procure por S3
- Clique em Create bucket no canto superior direito
- Defina Bucket name: aula-deploy-modelos-seu-nome (O nome do bucket precisar ser único na AWS, por isso altere para o seu nome)
- Deixe todas as outras configurações com o padrão, inclusive "Block all public access"
- Clique em Create bucket no canto inferior direito
- Em Services, no canto superior esquerdo procure por Elastic Container Registry
- Em Create a repository clique em Get Started e defina os parâmetros abaixo:
- Visibility settings: Private
- Repository name: aula-deploy-modelos
- Deixe todas as outras configurações com o padrão
- Clique em Create repository
- Clique no nome do repositório que acabou de ser criado em Repository name
- Clique em View push commands
- Deixe a aba macOS / Linux aberta, pois os comando 1 ao 4 serão usado no próximo passo: Cloud9
- Em Services, no canto superior esquerdo procure por Cloud9
- Clique em Create environment no canto superior direito
- Defina Name: aula-deploy-modelos, Description : aula-deploy-modelos
- Clique em Next Step e defina todos os parâmetros abaixo
- Environment type: Create a new EC2 instance for environment (direct access)
- Instance type: m5.large (8 GiB RAM + 2 vCPU)
- Platform: Amazon Linux 2 (recommended)
- Cost-saving setting: After 30 minutes (default)
- Network settings (advanced)
- Network (VPC): default
- Subnet: us-east-1c
- Clique em Next Step e Create environment
- Clonar o repositório do git digitando a linha de comando abaixo no terminal do Cloud9 (ec2-user:~/environment $): git clone https://github.com/maxreis86/FIEP-Modelos-de-Aprendizado-e-Arquiteturas-Cloud.git
- Entrar na pasta da aula usando o comando: cd FIEP-Modelos-de-Aprendizado-e-Arquiteturas-Cloud/sagemaker-custom-image
- Criar uma branch com seu nome e sobrenome sem acento ou espaco usando: git checkout -b nome_sobrenome
- Precisamos aumentar o espaço em disco dessa máquina virtual usando o comando: bash resize.sh
- Executar os comandos 1 ao 4 conforme orientação da página Push commands for aula-deploy-modelos visto anteriormente:
- aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 702113447940.dkr.ecr.us-east-1.amazonaws.com
- docker build -t aula-deploy-modelos .
- docker tag aula-deploy-modelos:latest 702113447940.dkr.ecr.us-east-1.amazonaws.com/aula-deploy-modelos:latest
- docker push 702113447940.dkr.ecr.us-east-1.amazonaws.com/aula-deploy-modelos:latest
- Após criar a imagem usando Docker, desligue a instância do Cloud9 executando o comando: sudo shutdown
- Feche o Cloud9
- Em Services, no canto superior esquerdo procure por Amazon SageMaker
- Abrir > Images > Create image siga os próximos passos preenchendos todos os parâmeros abaixo
- Em Image source copiar o Image URI da imagem aula-deploy-modelos criada no Elastic Container Registry clicando em Copy URI: 702113447940.dkr.ecr.us-east-1.amazonaws.com/aula-deploy-modelos:latest
- Image name: aula-deploy-modelos
- Image display name: aula-deploy-modelos
- Description: aula-deploy-modelos
- IAM role: Create a new role
- S3 buckets you specify - optional: Any S3 bucket
- Create role
- Advanced configuration. User ID (UID) - optional: 0 e Group ID (GUID) - optional: 0
- Image type: SageMaker Studio image
- Submit
- Control panel
- Setup SageMaker Domain: Quick setup (1 min)
- User profile > Name: aula-deploy-modelos
- Default execution role: deixo o Default e clique em Submit e aguarde quando aparecer Preparing SageMaker Domain
- Em Amazon SageMaker > Control Panel > Images clique em Attach image e siga os passos abaixo
- Image source: Existing image
- Select an existing image from the SageMaker Image store: aula-deploy-modelos
- Available image versions: aula-deploy-modelos / Version 1
- Clique em Next
- Em Advanced configuration, preencha com 0 em User ID (UID) e Group ID (GUID). (Muito importante colocar 0 para evitar erro na hora de iniciar a instância no SageMaker)
- Image type: SageMaker Studio image
- Preencher o Kernel name sem espaços: Python3
- Kernel display name - optional: Python3
- Deixa todas as outras opções como default e clique em Submit
- Em *Amazon SageMaker > Control Panel > Users > aula-deploy-modelos clique em Lounch App > Studio
- Após abrir o Amazon SageMaker Studio clique em File > New > Terminal
- Clonar novamente o diretório do git com o comando no terminal na parte de baixo da tela (sagemaker-user@studio$): git clone https://github.com/maxreis86/FIEP-Modelos-de-Aprendizado-e-Arquiteturas-Cloud.git
- Entrar na pasta da aula usando o comando: cd FIEP-Modelos-de-Aprendizado-e-Arquiteturas-Cloud
- Criar uma branch com seu nome e sobrenome sem acento ou espaco usando: git checkout -b nome_sobrenome
- Em File Browser, no canto superior esquerdo abra a pasta FIEP-Modelos-de-Aprendizado-e-Arquiteturas-Cloud
- Abra o arquivo 1_Data_Prep.ipynb
- Vai aparecer a tela: Set up environment for "1_Data_Prep.ipynb". Selecione as opções abaixo
- Image: Custom Image aula-deploy-modelos - v1
- Kernel: Python3
- Start-up script: No script
- No canto superior direito clique em Unknown
- Em Instance Type selecione: ml.t3.medium
- Clique em Save and continue
- Executar todos os códigos do notebook e seguir as instruções nos arquivos 1_Data_Prep.ipynb, 2_Fast_Machine_Learning.ipynb, 3_Explaining_Model.ipynb e 4_Deploy_Model.ipynb
- Colar o conteúdo da função def lambda_handler no arquivo handler.py
- Remover o prefix ./output_model/models/best/ que aparece duas vezes no código handler.py e deixar somente o nome do arquivo sem o caminho completo
- Confirmar se as bibliotecas pandas, awswrangler e h2o foram incluídas no arquivo requirements.txt (OBS: Sempre inclua a versão da biblioteca para evitar que seu código pare de funcionar quando uma nova versão for publicada)
- Altere o nome "StackedEnsemble_BestOfFamily_4_AutoML_1_20221011_230015.zip" para o nome do melhor modelo no arquivo Dockerfile
- Conferir todas as configurações do arquivo serverless.yml, principalmente o parâmetro "querystrings" onde você deve informar todos os campos que serão obrigatórios na chamada da API
- Clique em File > New > Terminal e digite o comandos comandos abaixo:
- cd FIEP-Modelos-de-Aprendizado-e-Arquiteturas-Cloud
- cp ./output_model/models/best/*.zip ./deploy/
- cp ./output_model/models/best/h2o-genmodel.jar ./deploy/h2o-genmodel.jar
- git rm -rf --cached .
- git add .
- git commit -m "deploy do melhor modelo"
- git config --global --add --bool push.autoSetupRemote true
- git config credential.helper store
- git push
- Informe seu usário do Github
- Informe seu token pessoal. Se você não tem um token siga esse passo-a-passo
- Se aparecer uma mensagem informando que você não tem acesso, envie uma mensagem para o professor informando seu usuário do github, pois é necessário liberar o seu acesso para gravar nesse repositório
- Vamos recriar uma instância no Cloud9. Para isso repita os passos somente do 1 ao 12 na sessão Cloud9
- Agora execute os comandos abaixo
- Clonar o repositório do git digitando a linha de comando abaixo no terminal do Cloud9, mas antes mude nome_sobrenome e coloque seu nome (ec2-user:~/environment $): git clone --branch nome_sobrenome https://github.com/maxreis86/FIEP-Modelos-de-Aprendizado-e-Arquiteturas-Cloud.git
- Entrar na pasta da aula usando o comando: cd FIEP-Modelos-de-Aprendizado-e-Arquiteturas-Cloud/sagemaker-custom-image
- Precisamos aumentar o espaço em disco dessa máquina virtual usando o comando: bash resize.sh
- cd ..
- cd deploy
- npm install -g serverless
- bash deploy.sh
- Copie o endereço do endpoint a partir do http e cole no arquivo 5_Test_Endpoint.ipynb substituindo o endereço de exemplo
- Execute todos os passos do código 5_Test_Endpoint.ipynb
- Se você receber a mensagem "Prediction executed successfully", seu deploy foi concluído com sucesso. Parabéns!!!
- Na pasta ./titanic_web_app/js/ abra o arquivo "app.js"
- Altere a constante "predictEndpoint" e coloque o mesmo endpoint testado no arquivo 5_Test_Endpoint.ipynb no lugar do endereço atual, mas deixar o ponto de interrogação no final como nesse exemplo: 'https://5a51rpxvrj.execute-api.us-east-1.amazonaws.com/prod/get-predict?'
- Clique em File > New > Terminal e digite o comandos comandos abaixo:
- cd FIEP-Modelos-de-Aprendizado-e-Arquiteturas-Cloud
- git switch nome_sobrenome (altere e coloque o seu nome)
- git rm -rf --cached .
- git add .
- git commit -m "deploy do melhor modelo"
- git config --global --add --bool push.autoSetupRemote true
- git config credential.helper store
- git push
- Abre o repositório no Github: https://github.com/maxreis86/FIEP-Modelos-de-Aprendizado-e-Arquiteturas-Cloud
- No canto superior direito, clique em Fork
- Em "Owner" deixei o seu username e em "Repository name" deixe o nome que foi preencido como sugestão.
- Desmarque a opção "Copy the main branch only"
- Clique em Create Fork
- Volte para a AWS e em Services, no canto superior esquerdo procure por AWS Amplify
- Procure por "Amplify Hosting" no canto inferior direito e clique em Get started
- Escolha a opção Github e clique em Continue
- Se aparecer a tela "Sign in to GitHub to continue to AWS Amplify (us-east-1)" entre com seu usuário e senha do Github
- Clique em "Authorize AWS Amplify (us-east-1)"
- Na tela "Install & Authorize AWS Amplify (us-east-1)". Selecione "Only select repositories" e escolhe o repositório "FIEP-Modelos-de-Aprendizado-e-Arquiteturas-Cloud"
- Clique em "Install & Autohrize"
- Na opção "Recently updated repositories" escolha o repositório "FIEP-Modelos-de-Aprendizado-e-Arquiteturas-Cloud"
- Na opção "Branch: Select a branch from your repository" escolha a branch com seu nome (nome_sobrenome)
- Marque a opção "Connecting a monorepo? Pick a folder"
- Digite no nome da pasta: titanic_web_app
- Clique em Next
- No campo "App name" preencha com "titanic_web_app"
- Marque a opção: "Allow AWS Amplify to automatically deploy all files hosted in your project root directory"
- Clique em Next
- Clique em "Save and deploy"
- Aguarde a conclusão dos steps Provision, Build, Deploy e Verify
- Abra a aplicação titanic_web_app e clique no botão "Predict" para testar o seu modelo
- Seguir as instruções do arquivos 6_Deploy_Model_DynamoDB.ipynb
- Depois de executar o código no arquivo 6_Deploy_Model_DynamoDB.ipynb, você vai ter que refazer o deploy do modelo. Para isso você deve seguir novamente as instruções no step "AWS Cloudformation: Deploy usando Serverless", mas tenha atenção porque algumas coisas poidem ser diferentes, pois agora você precisa fazer o deploy do novo código gerado no arquivo 6 ao inves do arquivo 5.
- As alterações principais que você precisa fazer serão no arquivo handler.py
- Após repetir o deploy faça o teste do endpoint novamente no arquivo 5_Test_Endpoint.ipynb e veja se ficou mais rápido
- Se apresentar o erro tente descobrir o problema olhando o log da Lambda
- Após analisar o erro tente executar novamente tirando o comentário do código "Definição dos inputs para a versão com o DynamoDB"
- Parabéns você concluiu mais um deploy com sucesso \o/
- Antes de começar usar o Glue, vamos entender como o spark funciona. Veja o diagrama abaixo:
- Seguir as instruções do arquivos 7_Deploy_Model_Glue.ipynb
- git fetch origin
- git merge origin/main
- git status
- Analisar todos os arquivos listados em vermelho no git status, localizando, abrindo esses arquivos e procurando pela palavra HEAD onde indica as linhas com conflitos. Analise e corrija os conflitos
- git add .
- git commit -m "conflitos corrigidos"
- git config credential.helper store
- git push