1. Introduzione
Le istanze di blocchi note gestiti dall'utente di Vertex AI Workbench consentono di creare e gestire istanze di macchine virtuali (VM) di deep learning preconfezionate con JupyterLab.
Le istanze di blocchi note gestiti dall'utente hanno una suite preinstallata di pacchetti di deep learning, incluso il supporto per i framework TensorFlow e PyTorch. Puoi configurare istanze solo CPU o GPU.
Cosa creerai
Questo tutorial descrive il processo di deployment di un blocco note sicuro gestito dall'utente in base alle best practice di networking e sicurezza. Sono previsti i seguenti passaggi:
- Crea un VPC
- Crea un router Cloud e Cloud NAT
- Configura l'istanza del blocco note con le impostazioni di sicurezza appropriate
Questo tutorial fornisce istruzioni dettagliate per ogni passaggio. Include inoltre suggerimenti e best practice per la protezione dei blocchi note gestiti dall'utente. La figura 1 è un'illustrazione del deployment mediante un VPC autonomo.
Figura 1
Cosa imparerai a fare
- Come determinare se un VPC condiviso o autonomo è adatto alla tua organizzazione
- Come creare un VPC autonomo
- Creare un router Cloud e Cloud NAT
- Come creare un blocco note gestito dall'utente
- Come accedere a un blocco note gestito dall'utente
- Come monitorare l'integrità del blocco note gestito dall'utente
- Creare e applicare una pianificazione di istanza
Che cosa ti serve
- Progetto Google Cloud
Autorizzazioni IAM
- Amministratore rete Compute
- Amministratore sicurezza Compute
- Amministratore istanze Compute
- Amministratore Notebooks
- Amministratore Storage
- Amministratore IAM progetto
- Amministratore account di servizio
- Utente account di servizio
- Visualizzatore oggetti Storage (applicato all'account di servizio)
- Utente Vertex AI (applicato all'account di servizio)
2. Rete VPC
In sostanza, una rete VPC è come una rete fisica, ad eccezione del fatto che è virtualizzata all'interno di Google Cloud. Una rete VPC è una risorsa globale composta da subnet a livello di regione. Le reti VPC sono isolate logicamente tra loro in Google Cloud.
VPC autonomo
La figura 2 è un esempio di VPC globale autonomo costituito da una subnet a livello di regione (us-central1) oltre a router Cloud e Cloud NAT, utilizzati per consentire al blocco note gestito dall'utente di stabilire in modo sicuro la connettività a internet.
Figura 2
VPC condiviso
Un VPC condiviso consente di esportare le subnet da una rete VPC in un progetto host a progetti di servizio nella stessa organizzazione. Il progetto host contiene risorse di networking condivise con il progetto di servizio, ad esempio subnet, Cloud NAT e regole firewall. Il progetto di servizio contiene risorse a livello di applicazione che sfruttano le risorse di networking nel progetto host.
La figura 3 mostra un'illustrazione di un VPC condiviso globale, in cui il deployment dell'infrastruttura di networking e sicurezza viene eseguito nel progetto host, mentre quello dei carichi di lavoro viene eseguito nel progetto di servizio.
Figura 3
Confronto tra VPC autonomo e condiviso
Un'unica rete VPC è sufficiente per molti casi d'uso semplici, in quanto è più facile da creare, gestire e comprendere rispetto ad alternative più complesse. Il VPC condiviso è uno strumento efficace per le organizzazioni con più team, in quanto consente di estendere la semplicità dell'architettura di una singola rete VPC su più gruppi di lavoro mediante l'uso di progetti di servizio.
Best practice VPC utilizzata nel tutorial
- Abilita Cloud NAT per accedere al blocco note.
- Attiva l'accesso privato Google quando crei le subnet.
- Crea regole firewall prescrittive per ridurre il traffico non richiesto, ad esempio non usare 0.0.0.0/0 tcp invece definisci le subnet esatte o gli indirizzi IP degli host.
- Sfrutta i criteri firewall per approfondire l'ambito delle regole in entrata, ad esempio geolocalizzazione, elenchi di informazioni sulle minacce, nomi di dominio di origine e così via.
3. Best practice per il blocco note
Ridimensionare le istanze al meglio
- Arresta e/o elimina le istanze inutilizzate
- Usa un'istanza iniziale più piccola e ripeti l'iterazione con dati di esempio più piccoli
- Fai lo scale up delle istanze come richiesto
- Sperimenta con set di dati più piccoli
Seleziona i tipi di macchine giusti
- VM con ottimizzazione dei costi
- Sfrutta al meglio le risorse hardware per ridurre i costi
- Fino al 31% di risparmio rispetto a N1
- Risparmi aggiuntivi (20-50%) per impegni di 1 o 3 anni
- Aumentare le dimensioni della macchina o aggiungere GPU può contribuire a migliorare le prestazioni e a superare gli errori relativi ai limiti di memoria
Pianificare l'arresto delle istanze
- Disattiva le istanze inattive (paghi solo per lo spazio di archiviazione su disco)
- Pianifica l'arresto e l'avvio automatico delle istanze VM del blocco note in ore specifiche
Monitorare lo stato di integrità del blocco note
- Le istanze di blocchi note gestiti dall'utente dispongono di uno strumento di diagnostica integrato che consente di monitorare l'integrità delle istanze.
Considerazioni sulla sicurezza
Di seguito sono riportate le considerazioni sulla sicurezza consigliate per la creazione di un blocco note gestito dall'utente:
- Seleziona l'opzione "Solo utente singolo" l'accesso ai blocchi note. Se l'utente specificato non è l'utente che ha creato l'istanza, devi concedergli il ruolo Utente account di servizio (roles/iam.serviceAccountUser) per l'account di servizio dell'istanza.
- Disattiva le seguenti opzioni:
- accesso root
- nbconvert
- file scaricato dalla UI JupyterLab
- Verrà utilizzato Cloud NAT invece di assegnare un indirizzo IP esterno al blocco note gestito dall'utente.
- Seleziona le seguenti opzioni di calcolo:
- Avvio protetto
- Virtual Trusted Platform Module (vTPM)
- Monitoraggio dell'integrità
4. Prima di iniziare
Aggiornare il progetto per supportare il tutorial
Questo tutorial utilizza $variables per facilitare l'implementazione della configurazione di gcloud in Cloud Shell.
All'interno di Cloud Shell, esegui queste operazioni:
gcloud config list project
gcloud config set project [your-project-name]
projectid=your-project-name
echo $projectid
5. Configurazione VPC
Crea il VPC autonomo
All'interno di Cloud Shell, esegui queste operazioni:
gcloud compute networks create securevertex-vpc --project=$projectid --subnet-mode=custom
Crea la subnet del blocco note gestito dall'utente
All'interno di Cloud Shell, esegui queste operazioni:
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
Router Cloud e configurazione NAT
Nel tutorial viene utilizzato Cloud NAT per i download di pacchetti software per blocchi note perché l'istanza di blocco note gestita dall'utente non ha un indirizzo IP esterno. Cloud NAT offre inoltre funzionalità NAT in uscita, il che significa che agli host internet non è consentito avviare comunicazioni con un blocco note gestito dall'utente, rendendolo più sicuro.
All'interno di Cloud Shell, crea il router Cloud a livello di regione.
gcloud compute routers create cloud-router-us-central1 --network securevertex-vpc --region us-central1
In Cloud Shell, crea il gateway Cloud Nat a livello di regione.
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. Crea un bucket di archiviazione
I bucket di archiviazione offrono il caricamento/recupero sicuro di file. Nel tutorial, lo spazio di archiviazione sul cloud conterrà uno script post-avvio per installare pacchetti di IA generativa nei blocchi note gestiti dall'utente.
Crea un bucket Cloud Storage e sostituisci BUCKET_NAME con un nome globalmente univoco che preferisci.
In Cloud Shell, crea un bucket di archiviazione univoco.
gsutil mb -l us-central1 -b on gs://BUCKET_NAME
Archivia "BUCKET_NAME" per la durata del lab
BUCKET_NAME=YOUR BUCKET NAME
echo $BUCKET_NAME
7. Crea uno script post-avvio
Per abilitare il download dei pacchetti di IA generativa, crea uno script post-avvio in Cloud Shell utilizzando l'editor vi o nano e salvalo come 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
Esempio:
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
Carica lo script post-avvio nel bucket di archiviazione da Cloud Shell utilizzando gsutil
gsutil cp poststartup.sh gs://$BUCKET_NAME
8. Crea un account di servizio
Per fornire un livello preciso di controllo del blocco note gestito dall'utente, è necessario un account di servizio. Una volta generate, le autorizzazioni dell'account di servizio possono essere modificate in base ai requisiti aziendali. Nel tutorial, all'account di servizio verranno applicate le seguenti regole:
Devi l'API Service Account prima di procedere.
In Cloud Shell, crea l'account di servizio.
gcloud iam service-accounts create user-managed-notebook-sa \
--display-name="user-managed-notebook-sa"
All'interno di Cloud Shell, aggiorna l'account di servizio con il ruolo Visualizzatore oggetti Storage
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/storage.objectViewer"
All'interno di Cloud Shell, aggiorna l'account di servizio con il ruolo Vertex AI User
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/aiplatform.user"
All'interno di Cloud Shell, elenca l'account di servizio e prendi nota dell'indirizzo email che verrà utilizzato durante la creazione del blocco note gestito dall'utente.
gcloud iam service-accounts list
Esempio:
$ 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. Crea un blocco note sicuro gestito dall'utente
Un'istanza di blocchi note gestiti dall'utente è un'istanza di macchina virtuale Deep Learning con le librerie di data science e machine learning più recenti preinstallate. Puoi includere facoltativamente GPU Nvidia per l'accelerazione hardware.
Abilita le API consumer
Crea il blocco note gestito dall'utente
- Vai a Workbench
- Seleziona Blocchi note gestiti dall'utente e poi Crea blocco note. Viene visualizzata la pagina Crea un blocco note gestito dall'utente.
- Se è stato eseguito il deployment di un blocco note esistente, seleziona Blocchi note gestiti dall'utente → Nuovo blocco note → Personalizza
- Nella pagina Crea un blocco note gestito dall'utente, nella sezione Dettagli, fornisci le seguenti informazioni per la nuova istanza:
- Nome: specifica un nome per la nuova istanza.
- Regione e zona: il tutorial utilizzerà la regione us-central1 e la zona us-central1-a
Selezionate Continua.
- Nella sezione Ambiente, specifica quanto segue:
- Sistema operativo: seleziona il sistema operativo che vuoi utilizzare.
- Seleziona l'ambiente che vuoi utilizzare.
- Versione: seleziona la versione che vuoi utilizzare.
- Script post-avvio (facoltativo,utilizza lo script di IA generativa creato in precedenza) seleziona Sfoglia per selezionare uno script da eseguire dopo l'avvio dell'istanza.
- (Facoltativo) Metadati: fornisci chiavi di metadati personalizzate per l'istanza.
Selezionate Continua.
- Nella sezione Tipo di macchina, specifica quanto segue:
- Tipo di macchina: seleziona il numero di CPU e la quantità di RAM per la nuova istanza. Vertex AI Workbench fornisce stime dei costi mensili per ogni tipo di macchina selezionato.
- Tipo di GPU: seleziona il tipo di GPU e il numero di GPU per la nuova istanza. Per informazioni sulle diverse GPU, consulta GPU su Compute Engine.
- Seleziona la casella di controllo Installa il driver GPU NVIDIA automaticamente per me.
Shielded VM
- Attiva Avvio protetto
- Attiva vTPM
- Attiva il monitoraggio dell'integrità
Selezionate Continua.
- Nella sezione Dischi, specifica quanto segue:
- Dischi: (facoltativo) per modificare le impostazioni predefinite del disco di avvio o del disco dati, seleziona il tipo di disco di avvio, le dimensioni del disco di avvio in GB, il tipo di disco dati e le dimensioni del disco dati in GB che preferisci. Per ulteriori informazioni sui tipi di disco, consulta Opzioni di archiviazione.
- Elimina nel cestino: (facoltativo) seleziona questa casella di controllo per utilizzare il comportamento predefinito del cestino del sistema operativo. Se utilizzi il comportamento predefinito del cestino, i file eliminati mediante l'interfaccia utente JupyterLab sono recuperabili, ma questi file eliminati utilizzano spazio su disco.
- (Facoltativo) Backup: per sincronizzare un percorso di Cloud Storage con il disco dati della tua istanza, seleziona Sfoglia e specifica il percorso di Cloud Storage. Per informazioni sui costi di archiviazione, vedi Prezzi di Cloud Storage.
- Crittografia: chiave di crittografia gestita da Google
Selezionate Continua.
- Nella sezione Networking, specifica quanto segue:
- Networking: seleziona Reti in questo progetto o Reti condivise con me. Se utilizzi un VPC condiviso nel progetto host, devi anche concedere il ruolo Utente di rete Compute (roles/compute.networkUser) all'agente di servizio Notebooks dal progetto di servizio.
- Nel campo Rete, seleziona la rete desiderata. Il tutorial utilizza la rete securevertex-vpc. Puoi selezionare una rete VPC, purché la rete abbia l'accesso privato Google abilitato o possa accedere a internet. Nel campo Subnet, seleziona la subnet che preferisci. Nel tutorial viene utilizzata la subnet securevertex-subnet-a.
- Deseleziona Assegna indirizzo IP esterno
- Seleziona Consenti accesso proxy
Selezionate Continua.
- Nella sezione IAM e sicurezza, specifica quanto segue:
- Seleziona Singolo utente e poi, nel campo Email utente, inserisci l'account utente a cui vuoi concedere l'accesso. Se l'utente specificato non è l'utente che ha creato l'istanza, devi concedergli il ruolo Utente account di servizio (roles/iam.serviceAccountUser) per l'account di servizio dell'istanza.
- Deseleziona Utilizza l'account di servizio Compute Engine predefinito sulla VM per chiamare le API Google Cloud
- Inserisci l'indirizzo email dell'account di servizio appena creato, ad esempio: user-managed-notebook-sa@my-project-id.iam.gserviceaccount.com
Opzioni di sicurezza
- Deseleziona Abilita l'accesso root all'istanza
- Deseleziona abilita nbconvert
- Deseleziona Abilita il download dei file dalla UI JupyterLab
- Abilita terminale (deseleziona per ambienti di produzione)
Selezionate Continua.
- Nella sezione Integrità del sistema, fornisci le seguenti informazioni:
Upgrade dell'ambiente e integrità del sistema
- Seleziona la casella di controllo Abilita l'upgrade automatico dell'ambiente.
- Scegli se eseguire l'upgrade del blocco note settimanale o mensile.
In Integrità e report del sistema, seleziona o deseleziona le seguenti caselle di controllo:
- Abilita report sull'integrità del sistema
- Segnala metriche personalizzate a Cloud Monitoring
- Installa agente Cloud Monitoring
Seleziona Crea.
10. Convalida
Vertex AI Workbench crea un'istanza di blocchi note gestiti dall'utente in base alle proprietà specificate e avvia automaticamente l'istanza. Quando l'istanza è pronta per l'uso, Vertex AI Workbench attiva un link Apri JupyterLab che consente all'utente finale di accedere al blocco note.
11. Osservabilità
Monitora le metriche di sistema e delle applicazioni tramite Monitoring
Per le istanze di blocchi note gestiti dall'utente in cui è installato Monitoring, puoi monitorare le metriche di sistema e dell'applicazione utilizzando la console Google Cloud:
- Nella console Google Cloud, vai alla pagina Blocchi note gestiti dall'utente.
- Fai clic sul nome dell'istanza di cui vuoi visualizzare le metriche di sistema e di applicazione.
- Nella pagina Dettagli blocco note, fai clic sulla scheda Monitoring. Esamina le metriche di sistema e dell'applicazione per la tua istanza.
12. Crea una pianificazione del blocco note
Le pianificazioni delle istanze consentono di avviare e arrestare automaticamente le istanze di macchine virtuali (VM). L'utilizzo delle pianificazioni delle istanze per automatizzare il deployment delle istanze VM può aiutarti a ottimizzare i costi e a gestire le istanze VM in modo più efficiente. Puoi utilizzare le pianificazioni delle istanze sia per carichi di lavoro ricorrenti che una tantum. Ad esempio, puoi utilizzare le pianificazioni delle istanze per eseguire le istanze VM solo durante l'orario di lavoro o per fornire capacità per un evento una tantum.
Per utilizzare le pianificazioni delle istanze, crea un criterio delle risorse che indichi in dettaglio il comportamento di avvio e arresto, quindi collega il criterio a una o più istanze VM.
Il tutorial mostra come creare una pianificazione delle istanze che accenderà il notebook alle 7:00 e lo spegnerà alle 18:00.
Per creare la pianificazione dell'istanza devi avere le autorizzazioni compute.instances.start e compute.instances.stop. Di conseguenza, ti consigliamo di utilizzare un ruolo personalizzato creato dall'amministratore che ti è stato concesso.
Una volta creato, il ruolo personalizzato verrà assegnato all'account di servizio Compute Engine predefinito nel progetto, consentendo alla pianificazione dell'istanza di avviare e arrestare il blocco note.
Creare un ruolo personalizzato
All'interno di Cloud Shell, crea un ruolo personalizzato, VmScheduler, e includi le autorizzazioni necessarie.
gcloud iam roles create Vm_Scheduler --project=$projectid \
--title=vm-scheduler-notebooks \
--permissions="compute.instances.start,compute.instances.stop" --stage=ga
Descrivere il ruolo personalizzato da Cloud Shell.
gcloud iam roles describe Vm_Scheduler --project=$projectid
Esempio:
$ 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
Aggiornare l'account di servizio predefinito
Nella sezione che segue puoi identificare e aggiornare l'account di servizio predefinito che prevede il formato: PROJECT_NUMBER-compute@developer.gserviceaccount.com
In Cloud Shell, identifica il numero di progetto attuale.
gcloud projects list --filter=$projectid
In Cloud Shell, archivia il numero del progetto come variabile.
project_number=your_project_number
echo $project_number
In Cloud Shell, aggiorna l'account di servizio Compute predefinito con il ruolo personalizzato VM_Scheduler.
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:$project_number-compute@developer.gserviceaccount.com" --role="projects/$projectid/roles/Vm_Scheduler"
Crea la pianificazione dell'istanza
In Cloud Shell, crea la pianificazione di avvio e arresto.
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
In Cloud Shell, archivia il nome del tuo blocco note.
gcloud compute instances list
notebook_vm=your_notebookvm_name
echo $notebook_vm
Puoi collegare una pianificazione dell'istanza a qualsiasi istanza VM esistente che si trova nella stessa regione della pianificazione dell'istanza.
In Cloud Shell, associa la pianificazione al tuo blocco note.
gcloud compute instances add-resource-policies $notebook_vm \
--resource-policies=optimize-notebooks \
--zone=us-central1-a
13. Esegui la pulizia
Elimina il blocco note gestito dall'utente dalla console, vai a Vertex AI → Workbench, seleziona ed elimina il blocco note.
Da Cloud Shell, elimina i componenti VPC.
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. Complimenti
Ben fatto! Hai configurato e convalidato un blocco note sicuro gestito dall'utente creando un VPC autonomo personalizzato utilizzando le best practice di protezione della sicurezza per i blocchi note gestiti e implementato una pianificazione delle istanze per ottimizzare la spesa.
Passaggi successivi
Guarda alcuni di questi tutorial...
- Introduzione a Vertex Pipelines
- Job di addestramento personalizzato e previsioni mediante set di dati gestito
Per approfondire Video
- Guida introduttiva all'utilizzo di Notebooks per il machine learning
- Inizia a utilizzare Vertex AI
- Introduzione all'IA generativa
Documenti di riferimento
- Introduzione a Vertex AI Workbench
- Introduzione ai blocchi note gestiti dall'utente
- Utilizza un'istanza di blocchi note gestiti dall'utente all'interno di un perimetro di servizio
- Crea un account di servizio.
- Pianificazione dell'avvio e dell'arresto di un'istanza VM