O Vertex AI Pipelines é um serviço gerido que ajuda a criar, implementar e gerir fluxos de trabalho de aprendizagem automática (ML) completos na Google Cloud Platform. Oferece um ambiente sem servidores para executar os seus pipelines, para que não tenha de se preocupar com a gestão da infraestrutura.
Neste tutorial, vai usar o Vertex AI Pipelines para executar uma tarefa de preparação personalizada e implementar o modelo preparado no Vertex AI, num ambiente de rede híbrida.
Todo o processo demora duas a três horas a concluir, incluindo cerca de 50 minutos para a execução do pipeline.
Este tutorial destina-se a administradores de redes empresariais, cientistas de dados e investigadores que estão familiarizados com o Vertex AI, a nuvem virtual privada (VPC), a Google Cloud consola e oCloud Shell. A familiaridade com o Vertex AI Workbench é útil, mas não obrigatória.
Objetivos
- Crie duas redes da nuvem virtual privada (VPC):
- Uma (
vertex-networking-vpc
) destina-se a usar a API Vertex AI Pipelines para criar e alojar um modelo de pipeline para preparar um modelo de aprendizagem automática e implementá-lo num ponto final. - O outro (
onprem-dataservice-vpc
) representa uma rede nas instalações.
- Uma (
- Associe as duas redes de VPC da seguinte forma:
- Implemente gateways de VPN de alta disponibilidade, túneis de Cloud VPN e Cloud Routers para ligar
vertex-networking-vpc
eonprem-dataservice-vpc
. - Crie um ponto final do Private Service Connect (PSC) para encaminhar pedidos privados para a API REST Vertex AI Pipelines.
- Configure um anúncio de rota personalizada do Cloud Router em
vertex-networking-vpc
para anunciar rotas para o ponto final do Private Service Connect paraonprem-dataservice-vpc
.
- Implemente gateways de VPN de alta disponibilidade, túneis de Cloud VPN e Cloud Routers para ligar
- Crie uma instância do Filestore na rede
onprem-dataservice-vpc
VPC e adicione-lhe dados de preparação numa partilha NFS. - Crie uma aplicação de pacote Python para a tarefa de preparação.
- Crie um modelo de tarefa do Vertex AI Pipelines para fazer o seguinte:
- Crie e execute a tarefa de preparação nos dados da partilha NFS.
- Importe o modelo preparado e carregue-o para o Registo de modelos Vertex AI.
- Crie um ponto final do Vertex AI para previsões online.
- Implemente o modelo no ponto final.
- Carregue o modelo de pipeline para um repositório do Artifact Registry.
- Use a API REST Vertex AI Pipelines para acionar uma execução de pipeline a partir de um anfitrião de serviço de dados no local (
on-prem-dataservice-host
).
Custos
Neste documento, usa os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custos com base na sua utilização projetada,
use a calculadora de preços.
Quando terminar as tarefas descritas neste documento, pode evitar a faturação contínua eliminando os recursos que criou. Para mais informações, consulte o artigo Limpe.
Antes de começar
-
In the Google Cloud console, go to the project selector page.
-
Select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
- Abra o Cloud Shell para executar os comandos indicados neste tutorial. O Cloud Shell é um ambiente de shell interativo para Google Cloud que lhe permite gerir os seus projetos e recursos a partir do navegador de Internet.
- No Cloud Shell, defina o projeto atual para o seu
Google Cloud ID do projeto e armazene o mesmo
ID do projeto na variável do shell
projectid
: Substitua PROJECT_ID pelo ID do seu projeto. Se necessário, pode localizar o ID do projeto na Google Cloud consola. Para mais informações, consulte o artigo Encontre o ID do seu projeto.projectid="PROJECT_ID" gcloud config set project ${projectid}
- Se não for o proprietário do projeto, peça-lhe que lhe conceda a função
Project IAM Admin (
roles/resourcemanager.projectIamAdmin
). Tem de ter esta função para conceder funções da IAM no passo seguinte. -
Make sure that you have the following role or roles on the project: roles/artifactregistry.admin, roles/artifactregistry.repoAdmin, roles/compute.instanceAdmin.v1, roles/compute.networkAdmin, roles/compute.securityAdmin, roles/dns.admin, roles/file.editor, roles/logging.viewer, roles/logging.admin, roles/notebooks.admin, roles/iam.serviceAccountAdmin, roles/iam.serviceAccountUser, roles/servicedirectory.editor, roles/servicemanagement.quotaAdmin, roles/serviceusage.serviceUsageAdmin, roles/storage.admin, roles/storage.objectAdmin, roles/aiplatform.admin, roles/aiplatform.user, roles/aiplatform.viewer, roles/iap.admin, roles/iap.tunnelResourceAccessor, roles/resourcemanager.projectIamAdmin
Check for the roles
-
In the Google Cloud console, go to the IAM page.
Go to IAM - Select the project.
-
In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.
- For all rows that specify or include you, check the Role column to see whether the list of roles includes the required roles.
Grant the roles
-
In the Google Cloud console, go to the IAM page.
Aceder ao IAM - Selecione o projeto.
- Clique em Conceder acesso.
-
No campo Novos responsáveis, introduza o identificador do utilizador. Normalmente, este é o endereço de email de uma Conta Google.
- Na lista Selecionar uma função, selecione uma função.
- Para conceder funções adicionais, clique em Adicionar outra função e adicione cada função adicional.
- Clique em Guardar.
Enable the DNS, Artifact Registry, IAM, Compute Engine, Cloud Logging, Network Connectivity, Notebooks, Cloud Filestore, Service Networking, Service Usage, and Vertex AI APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. -
Crie as redes VPC
Nesta secção, cria duas redes VPC: uma para aceder às APIs Google para o Vertex AI Pipelines e outra para simular uma rede no local. Em cada uma das duas redes VPC, cria um Cloud Router e um gateway Cloud NAT. Um gateway Cloud NAT oferece conetividade de saída para instâncias de máquinas virtuais (VM) do Compute Engine sem endereços IP externos.
No Cloud Shell, execute os seguintes comandos, substituindo PROJECT_ID pelo ID do seu projeto:
projectid=PROJECT_ID gcloud config set project ${projectid}
Crie a
vertex-networking-vpc
rede de VPC:gcloud compute networks create vertex-networking-vpc \ --subnet-mode custom
Na rede
vertex-networking-vpc
, crie uma sub-rede denominadapipeline-networking-subnet1
com um intervalo IPv4 principal de10.0.0.0/24
:gcloud compute networks subnets create pipeline-networking-subnet1 \ --range=10.0.0.0/24 \ --network=vertex-networking-vpc \ --region=us-central1 \ --enable-private-ip-google-access
Crie a rede VPC para simular a rede no local (
onprem-dataservice-vpc
):gcloud compute networks create onprem-dataservice-vpc \ --subnet-mode custom
Na rede
onprem-dataservice-vpc
, crie uma sub-rede denominadaonprem-dataservice-vpc-subnet1
com um intervalo IPv4 principal de172.16.10.0/24
:gcloud compute networks subnets create onprem-dataservice-vpc-subnet1 \ --network onprem-dataservice-vpc \ --range 172.16.10.0/24 \ --region us-central1 \ --enable-private-ip-google-access
Verifique se as redes VPC estão configuradas corretamente
Na Google Cloud consola, aceda ao separador Redes no projeto atual na página Redes de VPC.
Na lista de redes VPC, verifique se as duas redes foram criadas:
vertex-networking-vpc
eonprem-dataservice-vpc
.Clique no separador Sub-redes no projeto atual.
Na lista de sub-redes da VPC, verifique se as sub-redes
pipeline-networking-subnet1
eonprem-dataservice-vpc-subnet1
foram criadas.
Configure a conetividade híbrida
Nesta secção, cria dois gateways de VPN de alta disponibilidade que estão ligados entre si. Uma reside na
vertex-networking-vpc
rede VPC. O outro reside na rede VPC onprem-dataservice-vpc
. Cada gateway contém um Cloud Router e um par de túneis VPN.
Crie os gateways de VPN de alta disponibilidade
No Cloud Shell, crie o gateway de VPN de alta disponibilidade para a rede VPC
vertex-networking-vpc
:gcloud compute vpn-gateways create vertex-networking-vpn-gw1 \ --network vertex-networking-vpc \ --region us-central1
Crie o gateway de VPN de alta disponibilidade para a rede VPC:
onprem-dataservice-vpc
gcloud compute vpn-gateways create onprem-vpn-gw1 \ --network onprem-dataservice-vpc \ --region us-central1
Na Google Cloud consola, aceda ao separador Gateways de VPN do Cloud na página VPN.
Verifique se os dois gateways (
vertex-networking-vpn-gw1
eonprem-vpn-gw1
) foram criados e se cada gateway tem dois endereços IP de interface.
Crie routers do Cloud Router e gateways do Cloud NAT
Em cada uma das duas redes VPC, cria dois Cloud Routers: um para usar com o Cloud NAT e outro para gerir sessões BGP para a VPN de HA.
No Cloud Shell, crie um Cloud Router para a
vertex-networking-vpc
rede VPC que vai ser usada para a VPN:gcloud compute routers create vertex-networking-vpc-router1 \ --region us-central1 \ --network vertex-networking-vpc \ --asn 65001
Crie um Cloud Router para a rede
onprem-dataservice-vpc
VPC que vai ser usada para a VPN:gcloud compute routers create onprem-dataservice-vpc-router1 \ --region us-central1 \ --network onprem-dataservice-vpc \ --asn 65002
Crie um Cloud Router para a
vertex-networking-vpc
rede VPC que vai ser usada para o Cloud NAT:gcloud compute routers create cloud-router-us-central1-vertex-nat \ --network vertex-networking-vpc \ --region us-central1
Configure uma gateway do Cloud NAT no Cloud Router:
gcloud compute routers nats create cloud-nat-us-central1 \ --router=cloud-router-us-central1-vertex-nat \ --auto-allocate-nat-external-ips \ --nat-all-subnet-ip-ranges \ --region us-central1
Crie um Cloud Router para a rede
onprem-dataservice-vpc
VPC que vai ser usada para o Cloud NAT:gcloud compute routers create cloud-router-us-central1-onprem-nat \ --network onprem-dataservice-vpc \ --region us-central1
Configure uma gateway do Cloud NAT no Cloud Router:
gcloud compute routers nats create cloud-nat-us-central1-on-prem \ --router=cloud-router-us-central1-onprem-nat \ --auto-allocate-nat-external-ips \ --nat-all-subnet-ip-ranges \ --region us-central1
Na Google Cloud consola, aceda à página Routers na nuvem.
Na lista Routers do Cloud Router, verifique se os seguintes routers foram criados:
cloud-router-us-central1-onprem-nat
cloud-router-us-central1-vertex-nat
onprem-dataservice-vpc-router1
vertex-networking-vpc-router1
Pode ter de atualizar o separador do navegador da Google Cloud consola para ver os novos valores.
Na lista de routers do Cloud Router, clique em
cloud-router-us-central1-vertex-nat
.Na página Detalhes do router, verifique se o gateway
cloud-nat-us-central1
Cloud NAT foi criado.Clique na
seta de retrocesso para regressar à página Cloud Routers.Na lista de routers do Cloud Router, clique em
cloud-router-us-central1-onprem-nat
.Na página Detalhes do router, verifique se o gateway do Cloud NAT foi criado.
cloud-nat-us-central1-on-prem
Crie túneis de VPN
No Cloud Shell, na rede
vertex-networking-vpc
, crie um túnel de VPN denominadovertex-networking-vpc-tunnel0
:gcloud compute vpn-tunnels create vertex-networking-vpc-tunnel0 \ --peer-gcp-gateway onprem-vpn-gw1 \ --region us-central1 \ --ike-version 2 \ --shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \ --router vertex-networking-vpc-router1 \ --vpn-gateway vertex-networking-vpn-gw1 \ --interface 0
Na rede
vertex-networking-vpc
, crie um túnel de VPN denominadovertex-networking-vpc-tunnel1
:gcloud compute vpn-tunnels create vertex-networking-vpc-tunnel1 \ --peer-gcp-gateway onprem-vpn-gw1 \ --region us-central1 \ --ike-version 2 \ --shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \ --router vertex-networking-vpc-router1 \ --vpn-gateway vertex-networking-vpn-gw1 \ --interface 1
Na rede
onprem-dataservice-vpc
, crie um túnel de VPN denominadoonprem-dataservice-vpc-tunnel0
:gcloud compute vpn-tunnels create onprem-dataservice-vpc-tunnel0 \ --peer-gcp-gateway vertex-networking-vpn-gw1 \ --region us-central1\ --ike-version 2 \ --shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \ --router onprem-dataservice-vpc-router1 \ --vpn-gateway onprem-vpn-gw1 \ --interface 0
Na rede
onprem-dataservice-vpc
, crie um túnel de VPN denominadoonprem-dataservice-vpc-tunnel1
:gcloud compute vpn-tunnels create onprem-dataservice-vpc-tunnel1 \ --peer-gcp-gateway vertex-networking-vpn-gw1 \ --region us-central1\ --ike-version 2 \ --shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \ --router onprem-dataservice-vpc-router1 \ --vpn-gateway onprem-vpn-gw1 \ --interface 1
Na Google Cloud consola, aceda à página VPN.
Na lista de túneis VPN, verifique se os quatro túneis VPN foram criados.
Estabeleça sessões de BGP
O Cloud Router usa o protocolo de gateway de fronteira (BGP) para trocar rotas entre a sua rede VPC (neste caso, vertex-networking-vpc
) e a sua rede nas instalações (representada por onprem-dataservice-vpc
). No Cloud Router, configura uma interface e um par BGP para o seu router nas instalações.
A interface e a configuração do par BGP formam em conjunto uma sessão de BGP.
Nesta secção, cria duas sessões BGP para vertex-networking-vpc
e duas para onprem-dataservice-vpc
.
Depois de configurar as interfaces e os pares BGP entre os routers, estes começam automaticamente a trocar rotas.
Estabeleça sessões de BGP para vertex-networking-vpc
No Cloud Shell, na rede
vertex-networking-vpc
, crie uma interface BGP paravertex-networking-vpc-tunnel0
:gcloud compute routers add-interface vertex-networking-vpc-router1 \ --interface-name if-tunnel0-to-onprem \ --ip-address 169.254.0.1 \ --mask-length 30 \ --vpn-tunnel vertex-networking-vpc-tunnel0 \ --region us-central1
Na rede
vertex-networking-vpc
, crie um par BGP parabgp-onprem-tunnel0
:gcloud compute routers add-bgp-peer vertex-networking-vpc-router1 \ --peer-name bgp-onprem-tunnel0 \ --interface if-tunnel0-to-onprem \ --peer-ip-address 169.254.0.2 \ --peer-asn 65002 \ --region us-central1
Na rede
vertex-networking-vpc
, crie uma interface BGP paravertex-networking-vpc-tunnel1
:gcloud compute routers add-interface vertex-networking-vpc-router1 \ --interface-name if-tunnel1-to-onprem \ --ip-address 169.254.1.1 \ --mask-length 30 \ --vpn-tunnel vertex-networking-vpc-tunnel1 \ --region us-central1
Na rede
vertex-networking-vpc
, crie um par BGP parabgp-onprem-tunnel1
:gcloud compute routers add-bgp-peer vertex-networking-vpc-router1 \ --peer-name bgp-onprem-tunnel1 \ --interface if-tunnel1-to-onprem \ --peer-ip-address 169.254.1.2 \ --peer-asn 65002 \ --region us-central1
Estabeleça sessões de BGP para onprem-dataservice-vpc
Na rede
onprem-dataservice-vpc
, crie uma interface BGP paraonprem-dataservice-vpc-tunnel0
:gcloud compute routers add-interface onprem-dataservice-vpc-router1 \ --interface-name if-tunnel0-to-vertex-networking-vpc \ --ip-address 169.254.0.2 \ --mask-length 30 \ --vpn-tunnel onprem-dataservice-vpc-tunnel0 \ --region us-central1
Na rede
onprem-dataservice-vpc
, crie um par BGP parabgp-vertex-networking-vpc-tunnel0
:gcloud compute routers add-bgp-peer onprem-dataservice-vpc-router1 \ --peer-name bgp-vertex-networking-vpc-tunnel0 \ --interface if-tunnel0-to-vertex-networking-vpc \ --peer-ip-address 169.254.0.1 \ --peer-asn 65001 \ --region us-central1
Na rede
onprem-dataservice-vpc
, crie uma interface BGP paraonprem-dataservice-vpc-tunnel1
:gcloud compute routers add-interface onprem-dataservice-vpc-router1 \ --interface-name if-tunnel1-to-vertex-networking-vpc \ --ip-address 169.254.1.2 \ --mask-length 30 \ --vpn-tunnel onprem-dataservice-vpc-tunnel1 \ --region us-central1
Na rede
onprem-dataservice-vpc
, crie um par BGP parabgp-vertex-networking-vpc-tunnel1
:gcloud compute routers add-bgp-peer onprem-dataservice-vpc-router1 \ --peer-name bgp-vertex-networking-vpc-tunnel1 \ --interface if-tunnel1-to-vertex-networking-vpc \ --peer-ip-address 169.254.1.1 \ --peer-asn 65001 \ --region us-central1
Valide a criação da sessão de BGP
Na Google Cloud consola, aceda à página VPN.
Na lista de túneis VPN, verifique se o valor na coluna Estado da sessão de BGP de cada um dos túneis mudou de Configurar sessão de BGP para BGP estabelecido. Pode ter de atualizar o separador do navegador da consola para ver os novos valores. Google Cloud
Valide os onprem-dataservice-vpc
trajetos aprendidos
Na Google Cloud consola, aceda à página Redes VPC.
Na lista de redes de VPC, clique em
onprem-dataservice-vpc
.Clique no separador Rotas.
Selecione us-central1 (Iowa) na lista Região e clique em Ver.
Na coluna Intervalo de IPs de destino, verifique se o intervalo de IPs da sub-rede
pipeline-networking-subnet1
(10.0.0.0/24
) aparece duas vezes.Pode ter de atualizar o separador do navegador da Google Cloud consola para ver ambas as entradas.
Valide os vertex-networking-vpc
trajetos aprendidos
Clique na seta de retrocesso para regressar à página Redes de VPC.
Na lista de redes de VPC, clique em
vertex-networking-vpc
.Clique no separador Rotas.
Selecione us-central1 (Iowa) na lista Região e clique em Ver.
Na coluna Intervalo IP de destino, verifique se o intervalo IP da sub-rede (
172.16.10.0/24
) aparece duas vezes.onprem-dataservice-vpc-subnet1
Crie um ponto final do Private Service Connect para as APIs Google
Nesta secção, vai criar um ponto final do Private Service Connect para as APIs Google que vai usar para aceder à API REST Vertex AI Pipelines a partir da sua rede no local.
No Cloud Shell, reserve um endereço IP do ponto final do consumidor que vai ser usado para aceder às APIs Google:
gcloud compute addresses create psc-googleapi-ip \ --global \ --purpose=PRIVATE_SERVICE_CONNECT \ --addresses=192.168.0.1 \ --network=vertex-networking-vpc
Crie uma regra de encaminhamento para ligar o ponto final às APIs e aos serviços Google.
gcloud compute forwarding-rules create pscvertex \ --global \ --network=vertex-networking-vpc \ --address=psc-googleapi-ip \ --target-google-apis-bundle=all-apis
Crie anúncios de rotas personalizadas para vertex-networking-vpc
Nesta secção, cria um
anúncio de rota personalizado
para vertex-networking-vpc-router1
(o Cloud Router para
vertex-networking-vpc
) anunciar o endereço IP do ponto final do PSC
à rede VPC onprem-dataservice-vpc
.
Na Google Cloud consola, aceda à página Routers na nuvem.
Na lista do Cloud Router, clique em
vertex-networking-vpc-router1
.Na página Detalhes do router, clique em
Editar.Na secção Rotas anunciadas, para Rotas, selecione Criar rotas personalizadas.
Selecione a caixa de verificação Anunciar todas as sub-redes visíveis para o Cloud Router para continuar a anunciar as sub-redes disponíveis para o Cloud Router. A ativação desta opção imita o comportamento do Cloud Router no modo de anúncio predefinido.
Clique em Adicionar um trajeto personalizado.
Para Origem, selecione Intervalo de IPs personalizado.
Para o Intervalo de endereços IP, introduza o seguinte endereço IP:
192.168.0.1
Em Descrição, introduza o seguinte texto:
Custom route to advertise Private Service Connect endpoint IP address
Clique em Concluído e, de seguida, clique em Guardar.
Valide se onprem-dataservice-vpc
aprendeu os trajetos anunciados
Na Google Cloud consola, aceda à página Rotas.
No separador Rotas eficazes, faça o seguinte:
- Para Rede, escolha
onprem-dataservice-vpc
. - Para Região, escolha
us-central1 (Iowa)
. - Clique em Ver.
Na lista de trajetos, verifique se existem duas entradas cujos nomes começam com
onprem-dataservice-vpc-router1-bgp-vertex-networking-vpc-tunnel0
e duas que começam comonprem-dataservice-vpc-router1-bgp-vertex-networking-vpc-tunnel1
.Se estas entradas não aparecerem imediatamente, aguarde alguns minutos e, em seguida, atualize o separador do navegador da consola Google Cloud .
Verifique se duas das entradas têm um Intervalo de IPs de destino de
192.168.0.1/32
e duas têm um Intervalo de IPs de destino de10.0.0.0/24
.
- Para Rede, escolha
Crie uma instância de VM em onprem-dataservice-vpc
Nesta secção, cria uma instância de VM que simula um anfitrião de serviço de dados no local. Seguindo as práticas recomendadas do Compute Engine e do IAM, esta VM usa uma conta de serviço gerida pelo utilizador em vez da conta de serviço predefinida do Compute Engine.
Crie a conta de serviço gerida pelo utilizador para a instância de VM
No Cloud Shell, execute os seguintes comandos, substituindo PROJECT_ID pelo ID do seu projeto:
projectid=PROJECT_ID gcloud config set project ${projectid}
Crie uma conta de serviço com o nome
onprem-user-managed-sa
:gcloud iam service-accounts create onprem-user-managed-sa \ --display-name="onprem-user-managed-sa"
Atribua a função Utilizador do Vertex AI (
roles/aiplatform.user
) à conta de serviço:gcloud projects add-iam-policy-binding $projectid \ --member="serviceAccount:onprem-user-managed-sa@$projectid.iam.gserviceaccount.com" \ --role="roles/aiplatform.user"
Atribua a função Visitante do Vertex AI (
roles/aiplatform.viewer
):gcloud projects add-iam-policy-binding $projectid \ --member="serviceAccount:onprem-user-managed-sa@$projectid.iam.gserviceaccount.com" \ --role="roles/aiplatform.viewer"
Atribua a função Editor do Filestore (
roles/file.editor
):gcloud projects add-iam-policy-binding $projectid \ --member="serviceAccount:onprem-user-managed-sa@$projectid.iam.gserviceaccount.com" \ --role="roles/file.editor"
Atribua a função Administrador da conta de serviço (
roles/iam.serviceAccountAdmin
):gcloud projects add-iam-policy-binding $projectid \ --member="serviceAccount:onprem-user-managed-sa@$projectid.iam.gserviceaccount.com" \ --role="roles/iam.serviceAccountAdmin"
Atribua a função Utilizador da conta de serviço (
roles/iam.serviceAccountUser
):gcloud projects add-iam-policy-binding $projectid \ --member="serviceAccount:onprem-user-managed-sa@$projectid.iam.gserviceaccount.com" \ --role="roles/iam.serviceAccountUser"
Atribua a função Leitor do Artifact Registry (
roles/artifactregistry.reader
):gcloud projects add-iam-policy-binding $projectid \ --member="serviceAccount:onprem-user-managed-sa@$projectid.iam.gserviceaccount.com" \ --role="roles/artifactregistry.reader"
Atribua a função Administrador de objetos de armazenamento (
roles/storage.objectAdmin
):gcloud projects add-iam-policy-binding $projectid \ --member="serviceAccount:onprem-user-managed-sa@$projectid.iam.gserviceaccount.com" \ --role="roles/storage.objectAdmin"
Atribua a função de administrador de registos (
roles/logging.admin
):gcloud projects add-iam-policy-binding $projectid \ --member="serviceAccount:onprem-user-managed-sa@$projectid.iam.gserviceaccount.com" \ --role="roles/logging.admin"
Crie a instância de VM on-prem-dataservice-host
A instância de VM que criar não tem um endereço IP externo e não permite o acesso direto através da Internet. Para ativar o acesso administrativo à VM, usa o encaminhamento TCP do Identity-Aware Proxy (IAP).
No Cloud Shell, crie a instância de VM
on-prem-dataservice-host
:gcloud compute instances create on-prem-dataservice-host \ --zone=us-central1-a \ --image-family=debian-11 \ --image-project=debian-cloud \ --subnet=onprem-dataservice-vpc-subnet1 \ --scopes=https://www.googleapis.com/auth/cloud-platform \ --no-address \ --shielded-secure-boot \ --service-account=onprem-user-managed-sa@$projectid.iam.gserviceaccount.com \ --metadata startup-script="#! /bin/bash sudo apt-get update sudo apt-get install tcpdump dnsutils -y"
Crie uma regra de firewall para permitir que o IAP se ligue à sua instância de VM:
gcloud compute firewall-rules create ssh-iap-on-prem-vpc \ --network onprem-dataservice-vpc \ --allow tcp:22 \ --source-ranges=35.235.240.0/20
Atualize o ficheiro /etc/hosts
para apontar para o ponto final do PSC
Nesta secção, adiciona uma linha ao ficheiro /etc/hosts
que faz com que os pedidos
enviados para o ponto final do serviço público (us-central1-aiplatform.googleapis.com
)
sejam redirecionados para o ponto final do PSC (192.168.0.1
).
No Cloud Shell, inicie sessão na instância de VM através do IAP:
on-prem-dataservice-host
gcloud compute ssh on-prem-dataservice-host \ --zone=us-central1-a \ --tunnel-through-iap
Na instância de VM, use um editor de texto, como o
vim
ou onano
para abrir o ficheiro/etc/hosts
, por exemplo:on-prem-dataservice-host
sudo vim /etc/hosts
Adicione a seguinte linha ao ficheiro:
192.168.0.1 us-central1-aiplatform.googleapis.com
Esta linha atribui o endereço IP do ponto final do PSC (
192.168.0.1
) ao nome de domínio totalmente qualificado para a API Google Vertex AI (us-central1-aiplatform.googleapis.com
).O ficheiro editado deve ter o seguinte aspeto:
127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters 192.168.0.1 us-central1-aiplatform.googleapis.com # Added by you 172.16.10.6 on-prem-dataservice-host.us-central1-a.c.PROJECT_ID.internal on-prem-dataservice-host # Added by Google 169.254.169.254 metadata.google.internal # Added by Google
Guarde o ficheiro da seguinte forma:
- Se estiver a usar o
vim
, prima a teclaEsc
e, de seguida, escreva:wq
para guardar o ficheiro e sair. - Se estiver a usar o
nano
, escrevaControl+O
e primaEnter
para guardar o ficheiro e, de seguida, escrevaControl+X
para sair.
- Se estiver a usar o
Envie um ping para o ponto final da API Vertex AI da seguinte forma:
ping us-central1-aiplatform.googleapis.com
O comando
ping
deve devolver o seguinte resultado.192.168.0.1
é o endereço IP do ponto final do PSC:PING us-central1-aiplatform.googleapis.com (192.168.0.1) 56(84) bytes of data.
Escreva
Control+C
para sair deping
.Introduza
exit
para sair da instância de VMon-prem-dataservice-host
e regressar ao comando do Cloud Shell.
Configure a rede para uma instância do Filestore
Nesta secção, ativa o acesso a serviços privados para a sua rede da VPC, em preparação para criar uma instância do Filestore e montá-la como uma partilha do sistema de ficheiros de rede (NFS). Para compreender o que está a fazer nesta secção e na seguinte, consulte os artigos Monte uma partilha NFS para a preparação personalizada e Configure o peering de rede VPC.
Ative o acesso a serviços privados numa rede VPC
Nesta secção, cria uma ligação de rede de serviços e usa-a para ativar o acesso a serviços privados à rede da VPC através do intercâmbio da rede da VPC.onprem-dataservice-vpc
No Cloud Shell, defina um intervalo de endereços IP reservados com o comando
gcloud compute addresses create
:gcloud compute addresses create filestore-subnet \ --global \ --purpose=VPC_PEERING \ --addresses=10.243.208.0 \ --prefix-length=24 \ --description="filestore subnet" \ --network=onprem-dataservice-vpc
Estabeleça uma ligação de peering entre a rede
onprem-dataservice-vpc
VPC e a rede de serviços da Google, através degcloud services vpc-peerings connect
:gcloud services vpc-peerings connect \ --service=servicenetworking.googleapis.com \ --ranges=filestore-subnet \ --network=onprem-dataservice-vpc
Atualize o peering de rede VPC para ativar a importação e a exportação de encaminhamentos aprendidos personalizados:
gcloud compute networks peerings update servicenetworking-googleapis-com \ --network=onprem-dataservice-vpc \ --import-custom-routes \ --export-custom-routes
Na Google Cloud consola, aceda à página Interligação de redes VPC.
Na lista de intercâmbios da VPC, verifique se existe uma entrada para o intercâmbio entre
servicenetworking.googleapis.com
e a rede da VPConprem-dataservice-vpc
.
Crie anúncios de rotas personalizadas para filestore-subnet
Na Google Cloud consola, aceda à página Routers na nuvem.
Na lista do Cloud Router, clique em
onprem-dataservice-vpc-router1
.Na página Detalhes do router, clique em
Editar.Na secção Rotas anunciadas, para Rotas, selecione Criar rotas personalizadas.
Selecione a caixa de verificação Anunciar todas as sub-redes visíveis para o Cloud Router para continuar a anunciar as sub-redes disponíveis para o Cloud Router. A ativação desta opção imita o comportamento do Cloud Router no modo de anúncio predefinido.
Clique em Adicionar um trajeto personalizado.
Para Origem, selecione Intervalo de IPs personalizado.
Para o Intervalo de endereços IP, introduza o seguinte intervalo de endereços IP:
10.243.208.0/24
Em Descrição, introduza o seguinte texto:
Filestore reserved IP address range
Clique em Concluído e, de seguida, clique em Guardar.
Crie a instância do Filestore na rede onprem-dataservice-vpc
Depois de ativar o acesso a serviços privados para a sua rede VPC, crie uma instância do Filestore e monte a instância como uma partilha NFS para a sua tarefa de preparação personalizada. Isto permite que as suas tarefas de preparação acedam a ficheiros remotos como se fossem locais, o que permite um elevado débito e uma baixa latência.
Crie a instância do Filestore
Na Google Cloud consola, aceda à página Instâncias do Filestore.
Clique em Criar instância e configure a instância da seguinte forma:
Defina o ID da instância para o seguinte:
image-data-instance
Defina o Tipo de instância como Básico.
Defina o Tipo de armazenamento como HDD.
Defina Allocate capacity como 1
TiB
.Defina a região como us-central1 e a zona como us-central1-c.
Defina a rede de VPC como
onprem-dataservice-vpc
.Defina Intervalo de IPs atribuídos como Usar um intervalo de IPs atribuídos existente e escolha
filestore-subnet
.Defina o Nome da partilha de ficheiros para o seguinte:
vol1
Defina os controlos de acesso como Conceder acesso a todos os clientes na rede VPC.
Clique em Criar.
Tome nota do endereço IP da nova instância do Filestore. Pode ter de atualizar o separador do navegador da consola para ver a nova instância. Google Cloud
Monte a partilha de ficheiros do Filestore
No Cloud Shell, execute os seguintes comandos, substituindo PROJECT_ID pelo ID do seu projeto:
projectid=PROJECT_ID gcloud config set project ${projectid}
Inicie sessão na instância de VM
on-prem-dataservice-host
:gcloud compute ssh on-prem-dataservice-host \ --zone=us-central1-a \ --tunnel-through-iap
Instale o pacote NFS na instância de VM:
sudo apt-get update -y sudo apt-get -y install nfs-common
Crie um diretório de montagem para a partilha de ficheiros do Filestore:
sudo mkdir -p /mnt/nfs
Monte a partilha de ficheiros, substituindo FILESTORE_INSTANCE_IP pelo endereço IP da sua instância do Filestore:
sudo mount FILESTORE_INSTANCE_IP:/vol1 /mnt/nfs
Se a ligação expirar, verifique se está a fornecer o endereço IP correto da instância do Filestore.
Valide se a montagem do NFS foi bem-sucedida executando o seguinte comando:
df -h
Verifique se a partilha de ficheiros
/mnt/nfs
aparece no resultado:Filesystem Size Used Avail Use% Mounted on udev 1.8G 0 1.8G 0% /dev tmpfs 368M 396K 368M 1% /run /dev/sda1 9.7G 1.9G 7.3G 21% / tmpfs 1.8G 0 1.8G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock /dev/sda15 124M 11M 114M 9% /boot/efi tmpfs 368M 0 368M 0% /run/user 10.243.208.2:/vol1 1007G 0 956G 0% /mnt/nfs
Altere as autorizações para tornar a partilha de ficheiros acessível:
sudo chmod go+rw /mnt/nfs
Transfira o conjunto de dados para a partilha de ficheiros
Na instância de VM
on-prem-dataservice-host
, transfira o conjunto de dados para a partilha de ficheiros:gcloud storage cp gs://cloud-samples-data/vertex-ai/dataset-management/datasets/fungi_dataset /mnt/nfs/ --recursive
A transferência demora vários minutos.
Confirme que o conjunto de dados foi copiado com êxito executando o seguinte comando:
sudo du -sh /mnt/nfs
O resultado esperado é:
104M /mnt/nfs
Introduza
exit
para sair da instância de VMon-prem-dataservice-host
e regressar ao comando do Cloud Shell.
Crie um contentor de preparação para o seu pipeline
O Vertex AI Pipelines armazena os artefactos das execuções de pipelines através do Cloud Storage. Antes de executar o pipeline, tem de criar um contentor do Cloud Storage para a preparação das execuções do pipeline.
No Cloud Shell, crie um contentor do Cloud Storage:
gcloud storage buckets create gs://pipelines-staging-bucket-$projectid --location=us-central1
Crie uma conta de serviço gerida pelo utilizador para o Vertex AI Workbench
No Cloud Shell, crie uma conta de serviço:
gcloud iam service-accounts create workbench-sa \ --display-name="workbench-sa"
Atribua a função Utilizador do Vertex AI (
roles/aiplatform.user
) à conta de serviço:gcloud projects add-iam-policy-binding $projectid \ --member="serviceAccount:workbench-sa@$projectid.iam.gserviceaccount.com" \ --role="roles/aiplatform.user"
Atribua a função Administrador do Artifact Registry (
artifactregistry.admin
):gcloud projects add-iam-policy-binding $projectid \ --member="serviceAccount:workbench-sa@$projectid.iam.gserviceaccount.com" \ --role="roles/artifactregistry.admin"
Atribua a função de administrador de armazenamento (
storage.admin
):gcloud projects add-iam-policy-binding $projectid \ --member="serviceAccount:workbench-sa@$projectid.iam.gserviceaccount.com" \ --role="roles/storage.admin"
Crie a aplicação de preparação em Python
Nesta secção, cria uma instância do Vertex AI Workbench e usa-a para criar um pacote de aplicação de preparação personalizado em Python.
Crie uma instância do Vertex AI Workbench
Na Google Cloud consola, aceda ao separador Instâncias na página Vertex AI Workbench.
Clique em
Criar novo e, de seguida, clique em Opções avançadas.É apresentada a página Nova instância.
Na página Nova instância, na secção Detalhes, faculte as seguintes informações para a nova instância e, de seguida, clique em Continuar:
Nome: introduza o seguinte, substituindo PROJECT_ID pelo ID do projeto:
pipeline-tutorial-PROJECT_ID
Região: selecione us-central1.
Zona: selecione us-central1-a.
Desmarque a caixa de verificação Ativar sessões interativas sem servidor do Dataproc.
Na secção Ambiente, clique em Continuar.
Na secção Tipo de máquina, indique o seguinte e, de seguida, clique em Continuar:
- Tipo de máquina: escolha N1 e, de seguida, selecione
n1-standard-4
no menu Tipo de máquina. VM protegida: selecione as seguintes caixas de verificação:
- Arranque seguro
- Trusted Platform Module virtual (vTPM)
- Monitorização da integridade
- Tipo de máquina: escolha N1 e, de seguida, selecione
Na secção Discos, certifique-se de que Google-managed encryption key está selecionado e, de seguida, clique em Continuar:
Na secção Rede, indique o seguinte e, de seguida, clique em Continuar:
Redes: selecione Rede neste projeto e conclua os seguintes passos:
No campo Rede, selecione vertex-networking-vpc.
No campo Sub-rede, selecione pipeline-networking-subnet1.
Desmarque a caixa de verificação Atribuir endereço IP externo. A não atribuição de um endereço IP externo impede que a instância receba comunicação não solicitada da Internet ou de outras redes de VPC.
Selecione a caixa de verificação Permitir acesso por proxy.
Na secção IAM e segurança, indique o seguinte e, de seguida, clique em Continuar:
IAM e segurança: para conceder a um único utilizador acesso à interface do JupyterLab da instância, conclua os seguintes passos:
- Selecione Conta de serviço.
- Desmarque a caixa de verificação Usar conta de serviço predefinida do Compute Engine.
Este passo é importante porque a conta de serviço predefinida do Compute Engine (e, por conseguinte, o único utilizador que acabou de especificar) pode ter a função de editor (
roles/editor
) no seu projeto. No campo Email da conta de serviço, introduza o seguinte, substituindo PROJECT_ID pelo ID do projeto:
workbench-sa@PROJECT_ID.iam.gserviceaccount.com
(Este é o endereço de email da conta de serviço personalizado que criou anteriormente.) Esta conta de serviço tem autorizações limitadas.
Para saber como conceder acesso, consulte o artigo Faça a gestão do acesso à interface do JupyterLab de uma instância do Vertex AI Workbench.
Opções de segurança: desmarque a seguinte caixa de verificação:
- Acesso root à instância
Selecione a seguinte caixa de verificação:
- nbconvert:
nbconvert
permite aos utilizadores exportar e transferir um ficheiro de bloco de notas como um tipo de ficheiro diferente, como HTML, PDF ou LaTeX. Esta definição é necessária para alguns dos blocos de notas no repositório do GitHub de Google Cloud IA generativa.
Desmarque a seguinte caixa de verificação:
- Transferência de ficheiros
Selecione a seguinte caixa de verificação, a menos que esteja num ambiente de produção:
- Acesso ao terminal: isto permite o acesso ao terminal à sua instância a partir da interface do utilizador do JupyterLab.
Na secção Estado de funcionamento do sistema, desmarque a opção Atualização automática do ambiente e faculte o seguinte:
Em Relatórios, selecione as seguintes caixas de verificação:
- Comunique o estado do sistema
- Comunique métricas personalizadas ao Cloud Monitoring
- Instale o Cloud Monitoring
- Comunique o estado do DNS para domínios Google necessários
Clique em Criar e aguarde alguns minutos para que a instância do Vertex AI Workbench seja criada.
Execute a aplicação de preparação na instância do Vertex AI Workbench
Na Google Cloud consola, aceda ao separador Instâncias na página Vertex AI Workbench.
Junto ao nome da instância do Vertex AI Workbench (
pipeline-tutorial-PROJECT_ID
), onde PROJECT_ID é o ID do projeto, clique em Abrir JupyterLab.A sua instância do Vertex AI Workbench é aberta no JupyterLab.
Selecione Ficheiro > Novo > Terminal.
No terminal do JupyterLab (não no Cloud Shell), defina uma variável de ambiente para o seu projeto. Substitua PROJECT_ID pelo ID do seu projeto:
projectid=PROJECT_ID
Crie os diretórios principais para a aplicação de preparação (ainda no terminal do JupyterLab):
mkdir fungi_training_package mkdir fungi_training_package/trainer
No
explorador de ficheiros, clique duas vezes na pastafungi_training_package
e, em seguida, clique duas vezes na pastatrainer
.No
explorador de ficheiros, clique com o botão direito do rato na lista de ficheiros vazia (abaixo do cabeçalho Nome) e selecione Novo ficheiro.Clique com o botão direito do rato no novo ficheiro e selecione Mudar o nome do ficheiro.
Mude o nome do ficheiro de
untitled.txt
paratask.py
.Clique duas vezes no ficheiro
task.py
para o abrir.Copie o código seguinte para
task.py
:# Import the libraries import tensorflow as tf from tensorflow.python.client import device_lib import argparse import os import sys # add parser arguments parser = argparse.ArgumentParser() parser.add_argument('--data-dir', dest='dataset_dir', type=str, help='Dir to access dataset.') parser.add_argument('--model-dir', dest='model_dir', default=os.getenv("AIP_MODEL_DIR"), type=str, help='Dir to save the model.') parser.add_argument('--epochs', dest='epochs', default=10, type=int, help='Number of epochs.') parser.add_argument('--batch-size', dest='batch_size', default=32, type=int, help='Number of images per batch.') parser.add_argument('--distribute', dest='distribute', default='single', type=str, help='distributed training strategy.') args = parser.parse_args() # print the tf version and config print('Python Version = {}'.format(sys.version)) print('TensorFlow Version = {}'.format(tf.__version__)) print('TF_CONFIG = {}'.format(os.environ.get('TF_CONFIG', 'Not found'))) print('DEVICES', device_lib.list_local_devices()) # Single Machine, single compute device if args.distribute == 'single': if tf.test.is_gpu_available(): strategy = tf.distribute.OneDeviceStrategy(device="/gpu:0") else: strategy = tf.distribute.OneDeviceStrategy(device="/cpu:0") # Single Machine, multiple compute device elif args.distribute == 'mirror': strategy = tf.distribute.MirroredStrategy() # Multiple Machine, multiple compute device elif args.distribute == 'multi': strategy = tf.distribute.experimental.MultiWorkerMirroredStrategy() # Multi-worker configuration print('num_replicas_in_sync = {}'.format(strategy.num_replicas_in_sync)) # Preparing dataset BUFFER_SIZE = 1000 IMG_HEIGHT = 224 IMG_WIDTH = 224 def make_datasets_batched(dataset_path, global_batch_size): # Configure the training data generator train_data_dir = os.path.join(dataset_path,"train/") train_ds = tf.keras.utils.image_dataset_from_directory( train_data_dir, seed=36, image_size=(IMG_HEIGHT, IMG_WIDTH), batch_size=global_batch_size ) # Configure the validation data generator val_data_dir = os.path.join(dataset_path,"valid/") val_ds = tf.keras.utils.image_dataset_from_directory( val_data_dir, seed=36, image_size=(IMG_HEIGHT, IMG_WIDTH), batch_size=global_batch_size ) # get the number of classes in the data num_classes = len(train_ds.class_names) # Configure the dataset for performance AUTOTUNE = tf.data.AUTOTUNE train_ds = train_ds.cache().shuffle(BUFFER_SIZE).prefetch(buffer_size=AUTOTUNE) val_ds = val_ds.cache().prefetch(buffer_size=AUTOTUNE) return train_ds, val_ds, num_classes # Build the Keras model def build_and_compile_cnn_model(num_classes): # build a CNN model model = tf.keras.models.Sequential([ tf.keras.layers.Rescaling(1./255, input_shape=(IMG_HEIGHT, IMG_WIDTH, 3)), tf.keras.layers.Conv2D(16, 3, padding='same', activation='relu'), tf.keras.layers.MaxPooling2D(), tf.keras.layers.Conv2D(32, 3, padding='same', activation='relu'), tf.keras.layers.MaxPooling2D(), tf.keras.layers.Conv2D(64, 3, padding='same', activation='relu'), tf.keras.layers.MaxPooling2D(), tf.keras.layers.Flatten(), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dense(num_classes) ]) # compile the CNN model model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), metrics=['accuracy']) return model # Get the strategy data NUM_WORKERS = strategy.num_replicas_in_sync # Here the batch size scales up by number of workers GLOBAL_BATCH_SIZE = args.batch_size * NUM_WORKERS # Create dataset generator objects train_ds, val_ds, num_classes = make_datasets_batched(args.dataset_dir, GLOBAL_BATCH_SIZE) # Compile the model with strategy.scope(): # Creation of dataset, and model building/compiling need to be within # `strategy.scope()`. model = build_and_compile_cnn_model(num_classes) # fit the model on the data history = model.fit(train_ds, validation_data=val_ds, epochs=args.epochs) # save the model to the output dir model.save(args.model_dir)
Selecione Ficheiro > Guardar ficheiro Python.
No terminal do JupyterLab, crie um ficheiro
__init__.py
em cada subdiretório para o tornar um pacote:touch fungi_training_package/__init__.py touch fungi_training_package/trainer/__init__.py
No
explorador de ficheiros, clique duas vezes na pastafungi_training_package
.Selecione Ficheiro > Novo > Ficheiro Python.
Clique com o botão direito do rato no novo ficheiro e selecione Mudar o nome do ficheiro.
Mude o nome do ficheiro de
untitled.py
parasetup.py
.Clique duas vezes no ficheiro
setup.py
para o abrir.Copie o código seguinte para
setup.py
:from setuptools import find_packages from setuptools import setup setup( name='trainer', version='0.1', packages=find_packages(), include_package_data=True, description='Training application package for fungi-classification.' )
Selecione Ficheiro > Guardar ficheiro Python.
No terminal, navegue para o diretório
fungi_training_package
:cd fungi_training_package
Use o comando
sdist
para criar a distribuição de origem da aplicação de preparação:python setup.py sdist --formats=gztar
Navegue para o diretório principal:
cd ..
Verifique se está no diretório correto:
pwd
O resultado tem o seguinte aspeto:
/home/jupyter
Copie o pacote Python para o contentor de preparação:
gcloud storage cp fungi_training_package/dist/trainer-0.1.tar.gz gs://pipelines-staging-bucket-$projectid/training_package/
Verifique se o contentor de preparação contém o pacote:
gcloud storage ls gs://pipelines-staging-bucket-$projectid/training_package
O resultado é:
gs://pipelines-staging-bucket-PROJECT_ID/training_package/trainer-0.1.tar.gz
Crie a ligação de rede de serviços para o Vertex AI Pipelines
Nesta secção, cria uma ligação de rede de serviços que é usada para estabelecer serviços de produtor ligados à rede VPC vertex-networking-vpc
através do peering de redes VPC. Para mais informações, consulte o artigo
Intercâmbio da rede da VPC.
No Cloud Shell, execute os seguintes comandos, substituindo PROJECT_ID pelo ID do seu projeto:
projectid=PROJECT_ID gcloud config set project ${projectid}
Defina um intervalo de endereços IP reservados através de
gcloud compute addresses create
:gcloud compute addresses create vertex-pipeline-subnet \ --global \ --purpose=VPC_PEERING \ --addresses=192.168.10.0 \ --prefix-length=24 \ --description="pipeline subnet" \ --network=vertex-networking-vpc
Estabeleça uma ligação de peering entre a rede
vertex-networking-vpc
VPC e a rede de serviços da Google, através degcloud services vpc-peerings connect
:gcloud services vpc-peerings connect \ --service=servicenetworking.googleapis.com \ --ranges=vertex-pipeline-subnet \ --network=vertex-networking-vpc
Atualize a ligação de peering de VPC para ativar a importação e a exportação de encaminhamentos aprendidos personalizados:
gcloud compute networks peerings update servicenetworking-googleapis-com \ --network=vertex-networking-vpc \ --import-custom-routes \ --export-custom-routes
Anuncie a sub-rede do pipeline a partir do pipeline-networking
Cloud Router
Na Google Cloud consola, aceda à página Cloud Router.
Na lista do Cloud Router, clique em
vertex-networking-vpc-router1
.Na página Detalhes do router, clique em
Editar.Clique em Adicionar um trajeto personalizado.
Para Origem, selecione Intervalo de IPs personalizado.
Para o Intervalo de endereços IP, introduza o seguinte intervalo de endereços IP:
192.168.10.0/24
Em Descrição, introduza o seguinte texto:
Vertex AI Pipelines reserved subnet
Clique em Concluído e, de seguida, clique em Guardar.
Crie um modelo de pipeline e carregue-o no Artifact Registry
Nesta secção, cria e carrega um modelo de pipeline do Kubeflow Pipelines (KFP). Este modelo contém uma definição de fluxo de trabalho que pode ser reutilizada várias vezes, por um único utilizador ou por vários utilizadores.
Defina e compile a pipeline
No Jupyterlab, no
explorador de ficheiros, clique duas vezes na pasta de nível superior.Selecione Ficheiro > Novo > Bloco de notas.
No menu Selecionar kernel, selecione
Python 3 (ipykernel)
e clique em Selecionar.Numa nova célula do bloco de notas, execute o seguinte comando para garantir que tem a versão mais recente do
pip
:!python -m pip install --upgrade pip
Execute o seguinte comando para instalar o Google Cloud SDK de componentes de pipeline a partir do índice de pacotes Python (PyPI):
!pip install --upgrade google-cloud-pipeline-components
Quando a instalação estiver concluída, selecione Kernel > Reiniciar kernel para reiniciar o kernel e garantir que a biblioteca está disponível para importação.
Execute o seguinte código numa nova célula do bloco de notas para definir o pipeline:
from kfp import dsl # define the train-deploy pipeline @dsl.pipeline(name="custom-image-classification-pipeline") def custom_image_classification_pipeline( project: str, training_job_display_name: str, worker_pool_specs: list, base_output_dir: str, model_artifact_uri: str, prediction_container_uri: str, model_display_name: str, endpoint_display_name: str, network: str = '', location: str="us-central1", serving_machine_type: str="n1-standard-4", serving_min_replica_count: int=1, serving_max_replica_count: int=1 ): from google_cloud_pipeline_components.types import artifact_types from google_cloud_pipeline_components.v1.custom_job import CustomTrainingJobOp from google_cloud_pipeline_components.v1.model import ModelUploadOp from google_cloud_pipeline_components.v1.endpoint import (EndpointCreateOp, ModelDeployOp) from kfp.dsl import importer # Train the model task custom_job_task = CustomTrainingJobOp( project=project, display_name=training_job_display_name, worker_pool_specs=worker_pool_specs, base_output_directory=base_output_dir, location=location, network=network ) # Import the model task import_unmanaged_model_task = importer( artifact_uri=model_artifact_uri, artifact_class=artifact_types.UnmanagedContainerModel, metadata={ "containerSpec": { "imageUri": prediction_container_uri, }, }, ).after(custom_job_task) # Model upload task model_upload_op = ModelUploadOp( project=project, display_name=model_display_name, unmanaged_container_model=import_unmanaged_model_task.outputs["artifact"], ) model_upload_op.after(import_unmanaged_model_task) # Create Endpoint task endpoint_create_op = EndpointCreateOp( project=project, display_name=endpoint_display_name, ) # Deploy the model to the endpoint ModelDeployOp( endpoint=endpoint_create_op.outputs["endpoint"], model=model_upload_op.outputs["model"], dedicated_resources_machine_type=serving_machine_type, dedicated_resources_min_replica_count=serving_min_replica_count, dedicated_resources_max_replica_count=serving_max_replica_count, )
Execute o seguinte código numa nova célula do bloco de notas para compilar a definição do pipeline:
from kfp import compiler PIPELINE_FILE = "pipeline_config.yaml" compiler.Compiler().compile( pipeline_func=custom_image_classification_pipeline, package_path=PIPELINE_FILE, )
No
navegador de ficheiros, é apresentado um ficheiro denominadopipeline_config.yaml
na lista de ficheiros.
Crie um repositório do Artifact Registry
Execute o seguinte código numa nova célula do notebook para criar um repositório de artefactos do tipo KFP:
REPO_NAME="fungi-repo" REGION="us-central1" !gcloud artifacts repositories create $REPO_NAME --location=$REGION --repository-format=KFP
Carregue o modelo de pipeline para o Artifact Registry
Nesta secção, configura um cliente de registo do SDK do Kubeflow Pipelines e carrega o modelo de pipeline compilado para o Artifact Registry a partir do bloco de notas do JupyterLab.
No bloco de notas do JupyterLab, execute o seguinte código para carregar o modelo de pipeline, substituindo PROJECT_ID pelo ID do seu projeto:
PROJECT_ID = "PROJECT_ID" from kfp.registry import RegistryClient host = f"https://{REGION}-kfp.pkg.dev/{PROJECT_ID}/{REPO_NAME}" client = RegistryClient(host=host) TEMPLATE_NAME, VERSION_NAME = client.upload_pipeline( file_name=PIPELINE_FILE, tags=["v1", "latest"], extra_headers={"description":"This is an example pipeline template."})
Na Google Cloud consola, para verificar se o modelo foi carregado, aceda a Modelos de pipelines do Vertex AI.
Para abrir o painel Selecionar repositório, clique em Selecionar repositório.
Na lista de repositórios, clique no repositório que criou (
fungi-repo
) e, de seguida, clique em Selecionar.Verifique se o seu pipeline (
custom-image-classification-pipeline
) aparece na lista.
Acione uma execução de pipeline a partir de um local
Nesta secção, agora que o modelo de pipeline e o pacote de preparação estão prontos, vai usar o cURL para acionar uma execução de pipeline a partir da sua aplicação no local.
Forneça os parâmetros da conduta
No bloco de notas do JupyterLab, execute o seguinte comando para validar o nome do modelo de pipeline:
print (TEMPLATE_NAME)
O nome do modelo devolvido é:
custom-image-classification-pipeline
Execute o seguinte comando para obter a versão do modelo de pipeline:
print (VERSION_NAME)
O nome da versão do modelo de pipeline devolvido tem o seguinte aspeto:
sha256:41eea21e0d890460b6e6333c8070d7d23d314afd9c7314c165efd41cddff86c7
Tome nota da string do nome da versão completa.
No Cloud Shell, execute os seguintes comandos, substituindo PROJECT_ID pelo ID do seu projeto:
projectid=PROJECT_ID gcloud config set project ${projectid}
Inicie sessão na instância de VM
on-prem-dataservice-host
:gcloud compute ssh on-prem-dataservice-host \ --zone=us-central1-a \ --tunnel-through-iap
Na instância da VM
on-prem-dataservice-host
, use um editor de texto, como ovim
ou onano
para criar o ficheirorequest_body.json
, por exemplo:sudo vim request_body.json
Adicione o seguinte texto ao ficheiro
request_body.json
:{ "displayName": "fungi-image-pipeline-job", "serviceAccount": "onprem-user-managed-sa@PROJECT_ID.iam.gserviceaccount.com", "runtimeConfig":{ "gcsOutputDirectory":"gs://pipelines-staging-bucket-PROJECT_ID/pipeline_root/", "parameterValues": { "project": "PROJECT_ID", "training_job_display_name": "fungi-image-training-job", "worker_pool_specs": [{ "machine_spec": { "machine_type": "n1-standard-4" }, "replica_count": 1, "python_package_spec":{ "executor_image_uri":"us-docker.pkg.dev/vertex-ai/training/tf-cpu.2-8.py310:latest", "package_uris": ["gs://pipelines-staging-bucket-PROJECT_ID/training_package/trainer-0.1.tar.gz"], "python_module": "trainer.task", "args": ["--data-dir","/mnt/nfs/fungi_dataset/", "--epochs", "10"], "env": [{"name": "AIP_MODEL_DIR", "value": "gs://pipelines-staging-bucket-PROJECT_ID/model/"}] }, "nfs_mounts": [{ "server": "FILESTORE_INSTANCE_IP", "path": "/vol1", "mount_point": "/mnt/nfs/" }] }], "base_output_dir":"gs://pipelines-staging-bucket-PROJECT_ID", "model_artifact_uri":"gs://pipelines-staging-bucket-PROJECT_ID/model/", "prediction_container_uri":"us-docker.pkg.dev/vertex-ai/prediction/tf2-cpu.2-8:latest", "model_display_name":"fungi-image-model", "endpoint_display_name":"fungi-image-endpoint", "location": "us-central1", "serving_machine_type":"n1-standard-4", "network":"projects/PROJECT_NUMBER/global/networks/vertex-networking-vpc" } }, "templateUri": "https://us-central1-kfp.pkg.dev/PROJECT_ID/fungi-repo/custom-image-classification-pipeline/latest", "templateMetadata": { "version":"VERSION_NAME" } }
Substitua os seguintes valores:
- PROJECT_ID: o ID do seu projeto
- PROJECT_NUMBER: o número do projeto. Isto é diferente do ID do projeto. Pode encontrar o número do projeto na página Definições do projeto do projeto na Google Cloud consola.
- FILESTORE_INSTANCE_IP: o endereço IP da instância do Filestore,
por exemplo,
10.243.208.2
. Pode encontrar esta informação na página de instâncias do Filestore da sua instância. - VERSION_NAME: o nome da versão do modelo de pipeline (
sha256:...
) que anotou no passo 2.
Guarde o ficheiro da seguinte forma:
- Se estiver a usar o
vim
, prima a teclaEsc
e, de seguida, escreva:wq
para guardar o ficheiro e sair. - Se estiver a usar o
nano
, escrevaControl+O
e primaEnter
para guardar o ficheiro e, de seguida, escrevaControl+X
para sair.
- Se estiver a usar o
Envie uma execução do pipeline a partir do seu modelo
Na instância de VM, execute o seguinte comando, substituindo PROJECT_ID pelo ID do seu projeto:
on-prem-dataservice-host
curl -v -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d @request_body.json \ https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/pipelineJobs
O resultado apresentado é extenso, mas o principal que tem de procurar é a seguinte linha, que indica que o serviço está a preparar-se para executar o pipeline:
"state": "PIPELINE_STATE_PENDING"
A execução de todo o pipeline demora cerca de 45 a 50 minutos.
Na Google Cloud consola, na secção Vertex AI, aceda ao separador Execuções na página Pipelines.
Clique no nome de execução da sua execução do pipeline (
custom-image-classification-pipeline
).É apresentada a página de execução do pipeline, que mostra o gráfico de tempo de execução do pipeline. O resumo do pipeline é apresentado no painel Análise da execução do pipeline.
Para obter ajuda na compreensão das informações apresentadas no gráfico de tempo de execução, incluindo como ver registos e usar o Vertex ML Metadata para saber mais sobre os artefactos do seu pipeline, consulte o artigo Visualize e analise os resultados do pipeline.
Limpar
Para evitar incorrer em custos na sua Google Cloud conta pelos recursos usados neste tutorial, pode eliminar o projeto que contém os recursos ou manter o projeto e eliminar os recursos individuais.
Pode eliminar os recursos individuais no projeto da seguinte forma:
Elimine todas as execuções de pipelines da seguinte forma:
Na Google Cloud consola, na secção Vertex AI, aceda ao separador Execuções na página Pipelines.
Selecione as execuções de pipelines a eliminar e clique em
Eliminar.
Elimine o modelo de pipeline da seguinte forma:
Na secção Vertex AI, aceda ao separador Os seus modelos na página Pipelines.
Junto ao modelo de pipeline
custom-image-classification-pipeline
, clique em Ações e selecione Eliminar.
Elimine o repositório do Artifact Registry da seguinte forma:
Na página Artifact Registry, aceda ao separador Repositórios.
Selecione o repositório
fungi-repo
e clique em Eliminar.
Anule a implementação do modelo no ponto final da seguinte forma:
Na secção Vertex AI, aceda ao separador Pontos finais na página Previsões online.
Clique em
fungi-image-endpoint
para aceder à página de detalhes do ponto final.Na linha do seu modelo,
fungi-image-model
, clique em Ações e selecione Anular implementação do modelo a partir do ponto final.Na caixa de diálogo Anular implementação do modelo a partir do ponto final, clique em Anular implementação.
Elimine o ponto final da seguinte forma:
Na secção Vertex AI, aceda ao separador Pontos finais na página Previsões online.
Selecione
fungi-image-endpoint
e clique em Eliminar.
Elimine o modelo da seguinte forma:
Aceda à página Registo de modelos.
Na linha do seu modelo,
fungi-image-model
, clique em Ações e selecione Eliminar modelo.
Elimine o contentor de preparação da seguinte forma:
Aceda à página do Cloud Storage.
Selecione
pipelines-staging-bucket-PROJECT_ID
, onde PROJECT_ID é o ID do projeto, e clique em Eliminar.
Elimine a instância do Vertex AI Workbench da seguinte forma:
Na secção Vertex AI, aceda ao separador Instâncias na página Workbench.
Selecione a
pipeline-tutorial-PROJECT_ID
instância do Vertex AI Workbench, onde PROJECT_ID é o ID do projeto, e clique em Eliminar.
Elimine a instância de VM do Compute Engine da seguinte forma:
Aceda à página Compute Engine.
Selecione a instância de VM
on-prem-dataservice-host
e clique em Eliminar.
Elimine os túneis de VPN da seguinte forma:
Aceda à página VPN.
Na página VPN, clique no separador Túneis do Cloud VPN.
Na lista de túneis de VPN, selecione os quatro túneis de VPN que criou neste tutorial e clique em
Eliminar.
Elimine os gateways de VPN de alta disponibilidade da seguinte forma:
Na página VPN, clique no separador Gateways de VPN na nuvem.
Na lista de gateways de VPN, clique em
onprem-vpn-gw1
.Na página Detalhes do gateway do Cloud VPN, clique em
Eliminar gateway de VPN.Clique na
seta para trás, se necessário, para regressar à lista de gateways de VPN e, de seguida, clique emvertex-networking-vpn-gw1
.Na página Detalhes do gateway do Cloud VPN, clique em
Eliminar gateway de VPN.
Elimine os routers do Cloud Router da seguinte forma:
Aceda à página Routers na nuvem.
Na lista de Cloud Routers, selecione os quatro routers que criou neste tutorial.
Para eliminar os routers, clique em
Eliminar.Esta ação também elimina os dois gateways de NAT da nuvem ligados aos routers da nuvem.
Elimine as ligações de rede de serviços às redes VPC
vertex-networking-vpc
eonprem-dataservice-vpc
da seguinte forma:Aceda à página Intercâmbio da rede da VPC.
Selecione
servicenetworking-googleapis-com
.Para eliminar as associações, clique em
Eliminar.
Elimine a regra de encaminhamento
pscvertex
para a rede de VPCvertex-networking-vpc
da seguinte forma:Aceda ao separador Front-ends da página Equilíbrio de carga.
Na lista de regras de encaminhamento, clique em
pscvertex
.Na página Detalhes da regra de encaminhamento global, clique em
Eliminar.
Elimine a instância do Filestore da seguinte forma:
Aceda à página Filestore.
Selecione a instância
image-data-instance
.Para eliminar a instância, clique em
Ações e, de seguida, em Eliminar instância.
Elimine as redes de VPC da seguinte forma:
Aceda à página Redes VPC.
Na lista de redes de VPC, clique em
onprem-dataservice-vpc
.Na página Detalhes da rede de VPC, clique em
Eliminar rede de VPC.A eliminação de cada rede também elimina as respetivas sub-redes, rotas e regras de firewall.
Na lista de redes de VPC, clique em
vertex-networking-vpc
.Na página Detalhes da rede de VPC, clique em
Eliminar rede de VPC.
Elimine as contas de serviço
workbench-sa
eonprem-user-managed-sa
da seguinte forma:Aceda à página Contas de serviço.
Selecione as contas de serviço
onprem-user-managed-sa
eworkbench-sa
e clique em Eliminar.
O que se segue?
Saiba como usar o Vertex AI Pipelines para orquestrar o processo de criação e implementação dos seus modelos de aprendizagem automática.
Saiba mais sobre o conjunto de dados deFungi.