1. Introdução
As instâncias de notebooks gerenciados pelo usuário do Vertex AI Workbench permitem criar e gerenciar instâncias de máquina virtual (VM) de aprendizado profundo pré-empacotadas com o JupyterLab.
As instâncias de notebooks gerenciados pelo usuário têm um conjunto pré-instalado de pacotes de aprendizado profundo, incluindo suporte para os frameworks do TensorFlow e do PyTorch. É possível configurar instâncias ativadas para GPU ou somente CPU.
O que você vai criar
Neste tutorial, descrevemos o processo de implantação de um notebook seguro gerenciado pelo usuário com base nas práticas recomendadas de Rede e segurança. As etapas a seguir são necessárias:
- Criar uma VPC
- Criar um Cloud Router e um Cloud NAT
- Configure a instância de notebook com as configurações de segurança apropriadas
Neste tutorial, fornecemos instruções detalhadas para cada etapa. Ele também inclui dicas e práticas recomendadas para proteger notebooks gerenciados pelo usuário. A Figura 1 é uma ilustração da implantação usando uma VPC independente.
Figura 1.
O que você vai aprender
- Como determinar se uma VPC compartilhada ou independente é a melhor para sua organização
- Como criar uma VPC independente
- Como criar um Cloud Router e um Cloud NAT
- Como criar um notebook gerenciado pelo usuário
- Como acessar um notebook gerenciado pelo usuário
- Como monitorar a integridade do notebook gerenciado pelo usuário
- Como criar e aplicar uma programação de instâncias
O que é necessário
- Projeto do Google Cloud
Permissões IAM
- Administrador de rede do Compute
- Administrador de segurança do Compute
- Administrador da instância do Compute
- Administrador de notebooks
- Administrador do Storage
- Administrador de projetos do IAM
- Administrador da conta de serviço
- Usuário da conta de serviço
- Leitor de objetos do Storage (aplicado à conta de serviço)
- Usuário da Vertex AI (aplicado à conta de serviço)
2. Rede VPC
Pense em uma rede VPC da mesma forma que você pensaria em uma rede física, só que virtualizada dentro do Google Cloud. Uma rede VPC é um recurso global que consiste em sub-redes regionais. As redes VPC são isoladas logicamente umas das outras no Google Cloud.
VPC independente
A Figura 2 é um exemplo de VPC global independente que consiste em uma sub-rede regional (us-central1), além do Cloud Router e do Cloud NAT usados para permitir que o notebook gerenciado pelo usuário estabeleça conectividade com segurança com a Internet.
Figura 2.
VPC compartilhada
A VPC compartilhada permite exportar sub-redes de uma rede VPC em um projeto host para projetos de serviço na mesma organização. O projeto host contém recursos de rede que são compartilhados com o projeto de serviço, como sub-redes, cloud NAT e regras de firewall. O projeto de serviço contém recursos no nível do aplicativo que aproveitam os recursos de rede no projeto host.
A Figura 3 é a ilustração de uma VPC compartilhada global, em que a infraestrutura de rede e segurança é implantada no projeto host, enquanto as cargas de trabalho são implantadas no projeto de serviço.
Figura 3.
VPC independente x VPC compartilhada
Uma única rede VPC é suficiente para muitos casos de uso simples, porque é mais fácil de criar, manter e entender do que alternativas mais complexas. A VPC compartilhada é uma ferramenta eficaz para organizações com várias equipes, porque permite que elas estendam a simplicidade arquitetônica de uma única rede VPC em vários grupos de trabalho usando projetos de serviço.
Práticas recomendadas da VPC usadas no tutorial
- Ative o Cloud NAT para acessar o notebook.
- Ative o Acesso privado do Google ao criar sub-redes.
- Crie regras de firewall prescritivas para reduzir o tráfego não solicitado.Por exemplo, não use 0.0.0.0/0 tcp em vez disso defina os endereços IP exatos de sub-redes ou hosts.
- Use políticas de firewall para aprofundar o escopo das regras de entrada, como localizações geográficas, listas de inteligência contra ameaças, nomes de domínio de origem etc.
3. Práticas recomendadas para notebooks
Dimensionar as instâncias corretamente
- Interromper e/ou excluir instâncias não usadas
- Use uma instância inicial menor e itere com dados de amostra menores
- Escalonar instâncias conforme necessário
- Teste conjuntos de dados menores
Selecionar os tipos de máquina certos
- VMs com custo otimizado
- Aproveitar melhor os recursos de hardware para reduzir os custos
- Até 31% de economia em comparação com o N1
- Economia extra (20 a 50%) para compromissos de um ou três anos
- Aumentar o tamanho da máquina ou adicionar GPUs pode ajudar no desempenho e na superação de erros de limitação de memória
Programar o encerramento das instâncias
- Desativação de instâncias quando elas estiverem ociosas (pague apenas pelo armazenamento em disco)
- Programar o encerramento e a inicialização das instâncias de VM do notebook em horários específicos
Monitorar o status de integridade do notebook
- As instâncias de notebooks gerenciados pelo usuário têm uma ferramenta de diagnóstico integrada que pode ajudar a monitorar a integridade das instâncias.
Considerações sobre segurança
Veja a seguir as considerações de segurança recomendadas ao criar um notebook gerenciado pelo usuário:
- Selecione a opção "Somente um usuário". acesso ao notebook. Se o usuário especificado não for o criador da instância, conceda a ele o papel de usuário da conta de serviço (roles/iam.serviceAccountUser) na conta de serviço da instância.
- Desative as seguintes opções:
- acesso raiz
- nbconvert
- download de arquivo na interface do JupyterLab
- O Cloud NAT será usado em vez de atribuir um endereço IP externo ao notebook gerenciado pelo usuário.
- Selecione as seguintes opções de computação:
- Inicialização segura
- Módulo de plataforma confiável e virtual (vTPM)
- Monitoramento da integridade
4. Antes de começar
Atualizar o projeto para ser compatível com o tutorial
Neste tutorial, usamos as variáveis $variables para ajudar na implementação da configuração da gcloud no Cloud Shell.
No Cloud Shell, faça o seguinte:
gcloud config list project
gcloud config set project [your-project-name]
projectid=your-project-name
echo $projectid
5. Configuração da VPC
Crie a VPC independente
No Cloud Shell, faça o seguinte:
gcloud compute networks create securevertex-vpc --project=$projectid --subnet-mode=custom
Crie a sub-rede de notebook gerenciada pelo usuário
No Cloud Shell, faça o seguinte:
gcloud compute networks subnets create securevertex-subnet-a --project=$projectid --range=10.10.10.0/28 --network=securevertex-vpc --region=us-central1 --enable-private-ip-google-access
Configuração do Cloud Router e NAT
O Cloud NAT é usado no tutorial para downloads de pacotes de software de notebook porque a instância de notebook gerenciada pelo usuário não tem um endereço IP externo. O Cloud NAT também oferece recursos de saída de NAT, o que significa que os hosts da Internet não têm permissão para iniciar a comunicação com um notebook gerenciado pelo usuário, o que o torna mais seguro.
No Cloud Shell, crie o roteador de nuvem regional.
gcloud compute routers create cloud-router-us-central1 --network securevertex-vpc --region us-central1
No Cloud Shell, crie o gateway cloud nat regional.
gcloud compute routers nats create cloud-nat-us-central1 --router=cloud-router-us-central1 --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1
6. Criar um bucket de armazenamento
Os buckets de armazenamento oferecem upload/recuperação de arquivos seguros. No tutorial, o armazenamento em nuvem vai conter um script pós-inicialização para instalar pacotes de IA generativa nos notebooks gerenciados pelo usuário.
Crie um bucket do Cloud Storage e substitua BUCKET_NAME por um nome globalmente exclusivo de sua preferência.
No Cloud Shell, crie um bucket de armazenamento exclusivo.
gsutil mb -l us-central1 -b on gs://BUCKET_NAME
Armazenar "BUCKET_NAME" durante o laboratório
BUCKET_NAME=YOUR BUCKET NAME
echo $BUCKET_NAME
7. Criar um script pós-inicialização
Para ativar o download dos pacotes de IA generativa, crie um script de pós-inicialização no Cloud Shell usando o vi ou o editor nano e salve-o como poststartup.sh.
#! /bin/bash
echo "Current user: id" >> /tmp/notebook_config.log 2>&1
echo "Changing dir to /home/jupyter" >> /tmp/notebook_config.log 2>&1
cd /home/jupyter
echo "Cloning generative-ai from github" >> /tmp/notebook_config.log 2>&1
su - jupyter -c "git clone https://github.com/GoogleCloudPlatform/generative-ai.git" >> /tmp/notebook_config.log 2>&1
echo "Current user: id" >> /tmp/notebook_config.log 2>&1
echo "Installing python packages" >> /tmp/notebook_config.log 2&1
su - jupyter -c "pip install --upgrade --no-warn-conflicts --no-warn-script-location --user \
google-cloud-bigquery \
google-cloud-pipeline-components \
google-cloud-aiplatform \
seaborn \
kfp" >> /tmp/notebook_config.log 2>&1
Exemplo:
vpc_admin@cloudshell$ more poststartup.sh
#! /bin/bash
echo "Current user: id" >> /tmp/notebook_config.log 2>&1
echo "Changing dir to /home/jupyter" >> /tmp/notebook_config.log 2>&1
cd /home/jupyter
echo "Cloning generative-ai from github" >> /tmp/notebook_config.log 2>&1
su - jupyter -c "git clone https://github.com/GoogleCloudPlatform/generative-ai.git" >> /tmp/notebook_config.log 2>&1
echo "Current user: id" >> /tmp/notebook_config.log 2>&1
echo "Installing python packages" >> /tmp/notebook_config.log 2&1
su - jupyter -c "pip install --upgrade --no-warn-conflicts --no-warn-script-location --user \
google-cloud-bigquery \
google-cloud-pipeline-components \
google-cloud-aiplatform \
seaborn \
kfp" >> /tmp/notebook_config.log 2>&1
Faça upload do script pós-inicialização para o bucket de armazenamento do Cloud Shell usando gsutil
gsutil cp poststartup.sh gs://$BUCKET_NAME
8. Criar uma conta de serviço
Para fornecer um bom nível de controle do notebook gerenciado pelo usuário, é necessário ter uma conta de serviço. Depois de geradas, as permissões da conta de serviço podem ser modificadas com base nos requisitos comerciais. No tutorial, a conta de serviço terá as seguintes regras aplicadas:
a API Service Account antes de continuar.
No Cloud Shell, crie a conta de serviço.
gcloud iam service-accounts create user-managed-notebook-sa \
--display-name="user-managed-notebook-sa"
No Cloud Shell, atualize a conta de serviço com o papel Leitor de objetos do Storage.
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/storage.objectViewer"
No Cloud Shell, atualize a conta de serviço com o papel de Usuário da Vertex AI.
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/aiplatform.user"
No Cloud Shell, liste a conta de serviço e anote o endereço de e-mail que será usado ao criar o notebook gerenciado pelo usuário.
gcloud iam service-accounts list
Exemplo:
$ gcloud iam service-accounts list
DISPLAY NAME: user-managed-notebook-sa
EMAIL: user-managed-notebook-sa@my-project-id.iam.gserviceaccount.com
DISABLED: False
9. Criar um notebook gerenciado pelo usuário seguro
Uma instância de notebooks gerenciados pelo usuário é uma instância de máquina virtual de aprendizado profundo com as bibliotecas mais recentes de machine learning e ciência de dados pré-instaladas. Também é possível incluir GPUs Nvidia para aceleração de hardware.
Ativar APIs de consumidor
Criar o notebook gerenciado pelo usuário
- Acesse o Workbench.
- Selecione Notebooks gerenciados pelo usuário e, em seguida, Criar notebook. A página "Criar um notebook gerenciado pelo usuário" é aberta.
- Se houver um notebook implantado, selecione Notebooks gerenciados pelo usuário → Novo notebook → Personalizar
- Na página "Criar um notebook gerenciado pelo usuário", na seção "Detalhes", forneça as seguintes informações para a nova instância:
- Nome: forneça um nome para a nova instância.
- Região e zona: este tutorial usará a região us-central1 e a zona us-central1-a.
Escolha a opção Continuar.
- Na seção Ambiente, forneça as seguintes informações:
- Sistema operacional: selecione o sistema operacional que você quer usar.
- Selecione o ambiente que você quer usar.
- Versão: selecione a versão que você quer usar.
- Script de pós-inicialização (Opcional,use o script de IA generativa criado anteriormente) selecione "Procurar" para selecionar um script a ser executado após o início da instância.
- Metadados: (opcional) forneça chaves de metadados personalizadas para a instância.
Escolha a opção Continuar.
- Na seção "Tipo de máquina", forneça as seguintes informações:
- Tipo de máquina: selecione o número de CPUs e a quantidade de RAM para a nova instância. O Vertex AI Workbench oferece estimativas de custo mensais para cada tipo de máquina selecionado.
- Tipo de GPU: selecione o tipo e o número de GPUs da nova instância. Para mais informações sobre as diferentes GPUs, consulte GPUs no Compute Engine.
- Marque a caixa de seleção Instalar driver de GPU NVIDIA automaticamente para mim.
VM protegida
- Ativar a inicialização segura
- Ativar o vTPM
- Ativar o monitoramento de integridade
Escolha a opção Continuar.
- Na seção "Discos", forneça o seguinte:
- Discos: (opcional) para alterar as configurações padrão do disco de inicialização ou de dados, selecione o tipo de disco de inicialização, o tamanho do disco de inicialização em GB, o tipo de disco de dados e o tamanho do disco de dados em GB. Para mais informações sobre os tipos de discos, consulte Opções de armazenamento.
- Excluir para a lixeira (opcional): marque essa caixa de seleção para usar o comportamento padrão de lixeira do sistema operacional. Se você usa o comportamento padrão, os arquivos excluídos na interface do JupyterLab podem ser recuperados, mas os arquivos excluídos ocupam espaço em disco.
- Backup (opcional): para sincronizar um local do Cloud Storage com o disco de dados da instância, selecione "Procurar" e especifique o local. Para saber mais sobre os custos de armazenamento, consulte Preços do Cloud Storage.
- Criptografia: chave de criptografia gerenciada pelo Google
Escolha a opção Continuar.
- Na seção "Rede", informe o seguinte:
- Rede: selecione "Redes neste projeto" ou "Redes compartilhadas comigo". Se você estiver usando uma VPC compartilhada no projeto host, também precisará conceder o papel de usuário da rede do Compute (roles/compute.networkUser) ao Agente de serviço do Notebooks do projeto de serviço.
- No campo Rede, selecione a rede desejada. O tutorial está usando a rede securevertex-vpc. Você pode selecionar uma rede VPC, desde que ela tenha o Acesso privado do Google ativado ou possa acessar a Internet. No campo "Sub-rede", selecione a sub-rede que você quer. No tutorial, a sub-rede securevertex-subnet-a vai ser usada.
- Desmarque a opção "Atribuir endereço IP externo"
- Selecionar "Permitir acesso por proxy"
Escolha a opção Continuar.
- Na seção "IAM e segurança", informe o seguinte:
- Selecione Usuário único e, no campo "E-mail do usuário", digite a conta de usuário a que você quer conceder acesso. Se o usuário especificado não for o criador da instância, conceda a ele o papel de usuário da conta de serviço (roles/iam.serviceAccountUser) na conta de serviço da instância.
- Desmarque a opção "Usar a conta de serviço padrão do Compute Engine na VM" para chamar as APIs do Google Cloud
- Digite o endereço de e-mail da conta de serviço recém-criado, por exemplo: user-managed-notebook-sa@my-project-id.iam.gserviceaccount.com
Opções de segurança
- Desmarcar a ativação do acesso raiz à instância
- Desmarcar a opção de ativar nbconvert
- Desmarcar a opção "Ativar o download de arquivos da interface do JupyterLab"
- Ativar terminal (Desmarcar para ambientes de produção)
Escolha a opção Continuar.
- Na seção "Integridade do sistema", forneça as seguintes informações:
Upgrade do ambiente e integridade do sistema
- Marque a caixa de seleção "Ativar upgrade automático do ambiente".
- Escolha se quer atualizar seu notebook Semanal ou Mensalmente.
Em "Relatórios e integridade do sistema", marque ou desmarque as seguintes caixas de seleção:
- Ativar relatório de integridade do sistema
- Relatar métricas personalizadas para o Cloud Monitoring
- Instalar agente do Cloud Monitoring
Selecione Criar.
10. Validação
O Vertex AI Workbench cria uma instância de notebooks gerenciados pelo usuário com base nas propriedades especificadas e inicia a instância automaticamente. Quando a instância estiver pronta para uso, o Vertex AI Workbench ativará um link Abrir o JupyterLab, que permite que o usuário final acesse o notebook.
11. Observabilidade
Monitorar as métricas do sistema e do aplicativo com o Monitoring
Para instâncias de notebooks gerenciados pelo usuário com o Monitoring instalado, é possível monitorar as métricas do sistema e do aplicativo usando o console do Google Cloud:
- No console do Google Cloud, acesse a página Notebooks gerenciados pelo usuário.
- Clique no nome da instância com as métricas do sistema e do aplicativo que você quer conferir.
- Na página Detalhes do notebook, clique na guia Monitoramento. Analise as métricas do sistema e do aplicativo da sua instância.
12. Criar uma programação de notebook
As programações de instância permitem que você inicie e interrompa instâncias de máquina virtual (VM) automaticamente. O uso de programações de instâncias para automatizar a implantação das instâncias de VM pode ajudar você a otimizar custos e gerenciar as instâncias de VM com mais eficiência. É possível usar programações de instâncias para cargas de trabalho recorrentes e únicas. Por exemplo, use programações de instâncias para executar instâncias de VM somente durante o horário de trabalho ou para fornecer capacidade para um evento único.
Para usar programações de instâncias, crie uma política de recursos detalhando o comportamento de inicialização e parada e, em seguida, anexe a política a uma ou mais instâncias de VM.
O tutorial mostra como criar uma programação de instâncias que vai ligar seu notebook às 7h e desligá-lo às 18h.
Para criar a programação de instâncias, você vai precisar das permissões compute.instances.start e compute.instances.stop. Portanto, recomenda-se um papel personalizado, criado pelo administrador que você recebeu.
Depois de criado, o papel personalizado será atribuído à conta de serviço padrão do Compute Engine no projeto, o que permitirá que a programação da instância inicie e pare seu notebook.
Criar uma função personalizada
No Cloud Shell, crie um papel personalizado, VmScheduler, e inclua as permissões necessárias.
gcloud iam roles create Vm_Scheduler --project=$projectid \
--title=vm-scheduler-notebooks \
--permissions="compute.instances.start,compute.instances.stop" --stage=ga
Descrever o papel personalizado do Cloud Shell.
gcloud iam roles describe Vm_Scheduler --project=$projectid
Exemplo:
$ gcloud iam roles describe Vm_Scheduler --project=$projectid
etag: BwX991B0_kg=
includedPermissions:
- compute.instances.start
- compute.instances.stop
name: projects/$projectid/roles/Vm_Scheduler
stage: GA
title: vm-scheduler-notebooks
Atualizar a conta de serviço padrão
Na seção a seguir, você identificará e atualizará a conta de serviço padrão que consiste no formato: PROJECT_NUMBER-compute@developer.gserviceaccount.com
No Cloud Shell, identifique o número do projeto atual.
gcloud projects list --filter=$projectid
No Cloud Shell, armazene o número do projeto como uma variável.
project_number=your_project_number
echo $project_number
No Cloud Shell, atualize a conta de serviço padrão do Compute com o papel personalizado VM_Scheduler.
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:$project_number-compute@developer.gserviceaccount.com" --role="projects/$projectid/roles/Vm_Scheduler"
Criar a programação de instâncias
No Cloud Shell, crie a programação de início e parada.
gcloud compute resource-policies create instance-schedule optimize-notebooks \
--region=us-central1 \
--vm-start-schedule='0 7 * * *' \
--vm-stop-schedule='0 18 * * *' \
--timezone=America/Chicago
No Cloud Shell, armazene o nome do notebook.
gcloud compute instances list
notebook_vm=your_notebookvm_name
echo $notebook_vm
É possível anexar uma programação de instância a qualquer instância de VM localizada na mesma região dela.
No Cloud Shell, associe a programação ao seu notebook.
gcloud compute instances add-resource-policies $notebook_vm \
--resource-policies=optimize-notebooks \
--zone=us-central1-a
13. Limpar
Excluir o notebook gerenciado pelo usuário no console, acessar Vertex AI → Workbench, selecionar e excluir o notebook.
Exclua os componentes da VPC no Cloud Shell.
gcloud compute routers delete cloud-router-us-central1 --region=us-central1 --quiet
gcloud compute routers nats delete cloud-nat-us-central1 --region=us-central1 --router=cloud-router-us-central1 --quiet
gcloud compute instances remove-resource-policies $notebook_vm \
--resource-policies=optimize-notebooks \
--zone=us-central1-a --quiet
gcloud compute resource-policies delete optimize-notebooks --region=us-central1 --quiet
gcloud compute instances delete $notebook_vm --zone=us-central1-a --quiet
gcloud compute networks subnets delete securevertex-subnet-a --region=us-central1 --quiet
gcloud iam service-accounts delete user-managed-notebook-sa@$projectid.iam.gserviceaccount.com --quiet
gcloud projects remove-iam-policy-binding $projectid --member="serviceAccount:$project_number-compute@developer.gserviceaccount.com" --role="projects/$projectid/roles/Vm_Scheduler"
gcloud iam roles delete Vm_Scheduler --project=$projectid
gcloud compute networks delete securevertex-vpc --quiet
14. Parabéns
Muito bem! Você configurou e validou um notebook seguro gerenciado pelo usuário criando uma VPC independente personalizada usando as práticas recomendadas de aumento da proteção de segurança para notebooks gerenciados e implementou uma programação de instâncias para otimizar os gastos.
Qual é a próxima etapa?
Confira alguns desses tutoriais...
- Introdução ao Vertex Pipelines
- Job de treinamento personalizado e previsão com o conjunto de dados gerenciado
Leia mais e Vídeos
- Introdução aos Notebooks para machine learning
- Como começar a usar a Vertex AI
- Introdução à IA generativa
Documentos de referência
- Introdução ao Vertex AI Workbench
- Introdução aos notebooks gerenciados pelo usuário
- Use uma instância de notebooks gerenciados pelo usuário em um perímetro de serviço
- Crie uma conta de serviço
- Como programar uma instância de VM para iniciar e interromper