1. Introducción
Las instancias de notebooks administrados por el usuario de Vertex AI Workbench te permiten crear y administrar instancias de máquinas virtuales (VM) de aprendizaje profundo que vienen empaquetadas previamente con JupyterLab.
Las instancias de notebooks administrados por el usuario tienen un conjunto preinstalado de paquetes de aprendizaje profundo, incluida la compatibilidad con los frameworks de TensorFlow y PyTorch. Puedes configurar instancias solo para CPU o instancias habilitadas para GPU.
Qué compilarás
En este instructivo, se describe el proceso para implementar un notebook seguro administrado por el usuario según las prácticas recomendadas de Herramientas de redes y seguridad. Se deben seguir los siguientes pasos:
- Crea una VPC
- Crea un Cloud Router y Cloud NAT
- Configura la instancia de notebook con la configuración de seguridad adecuada
En este instructivo, se proporcionan instrucciones detalladas para cada paso. También se incluyen sugerencias y prácticas recomendadas para proteger los notebooks administrados por el usuario. La Figura 1 es una ilustración de la implementación con una VPC independiente.
Figura 1
Qué aprenderás
- Cómo determinar si una VPC compartida o independiente es adecuada para tu organización
- Cómo crear una VPC independiente
- Cómo crear un Cloud Router y Cloud NAT
- Cómo crear un notebook administrado por el usuario
- Cómo acceder a un notebook administrado por el usuario
- Cómo supervisar el estado de un notebook administrado por el usuario
- Cómo crear y aplicar una programación de instancias
Requisitos
- Proyecto de Google Cloud
Permisos de IAM
- Administrador de red de Compute
- Administrador de seguridad de Compute
- Administrador de instancias de Compute
- Administrador de notebooks
- Administrador de almacenamiento
- Administrador de IAM de proyecto
- Administrador de cuenta de servicio
- Service Account User
- Visualizador de objetos de almacenamiento (aplicado a la cuenta de servicio)
- Usuario de Vertex AI (se aplica a la cuenta de servicio)
2. Red de VPC
Una red de VPC se asemeja a una red física, con la excepción de que está virtualizada dentro de Google Cloud. Una red de VPC es un recurso global que consta de subredes regionales. Las redes de VPC están aisladas de forma lógica unas de otras dentro de Google Cloud.
VPC independiente
La Figura 2 es un ejemplo de una VPC global independiente que consta de una subred regional (us-central1), además de Cloud Router y Cloud NAT, que se usa para permitir que el notebook administrado por el usuario establezca la conectividad a Internet de forma segura.
Figura 2
VPC compartida
La VPC compartida te permite exportar subredes desde una red de VPC en un proyecto host hacia proyectos de servicio en la misma organización. El proyecto host contiene recursos de red que se comparten con el proyecto de servicio, como subredes, NAT de nube y reglas de firewall. El proyecto de servicio contiene recursos a nivel de la aplicación que aprovechan los recursos de red en el proyecto host.
La Figura 3 es una ilustración de una VPC compartida global, en la que la infraestructura de red y seguridad se implementa en el proyecto host, mientras que las cargas de trabajo se implementan en el proyecto de servicio.
Figura 3
VPC independiente frente a VPC compartida
Una sola red de VPC es suficiente para muchos casos de uso simples, ya que es más fácil de crear, mantener y comprender que las alternativas más complejas. La VPC compartida es una herramienta eficaz para organizaciones con varios equipos, ya que les permite extender la simplicidad arquitectónica de una sola red de VPC entre varios grupos de trabajo con proyectos de servicio.
Práctica recomendada de VPC que se usa en el instructivo
- Habilita Cloud NAT para acceder al notebook.
- Activa el Acceso privado a Google cuando crees subredes.
- Crea reglas de firewall prescriptivas para reducir el tráfico no solicitado; p. ej., no uses 0.0.0.0/0 tcp y defina las direcciones IP exactas de las subredes o los hosts.
- Aprovecha las políticas de firewall para profundizar el alcance de las reglas de entrada, p. ej., ubicaciones geográficas, listas de inteligencia de amenazas, nombres de dominio de origen, etcétera.
3. Prácticas recomendadas para el notebook
Ajusta el tamaño de las instancias
- Detén o borra instancias sin uso
- Usar una instancia inicial más pequeña y, luego, iterar con datos de muestra más pequeños
- Escala verticalmente las instancias según sea necesario
- Experimentar con conjuntos de datos más pequeños
Selecciona los tipos de máquina correctos
- VMs con optimización de costos
- Hacer mejor uso de los recursos de hardware para reducir los costos
- Hasta un 31% de ahorro en comparación con N1
- Ahorros adicionales (entre el 20% y el 50%) por compromisos de 1 o 3 años
- Aumentar el tamaño de la máquina o agregar GPU puede ayudar en el rendimiento y a superar los errores de limitación de memoria.
Programa el cierre de tus instancias
- Apaga las instancias cuando estén inactivas (paga solo por el almacenamiento en disco)
- Programa las instancias de VM de notebook para que se cierren y se inicien automáticamente en horas específicas
Supervisa el estado de los notebooks
- Las instancias de notebooks administrados por el usuario tienen una herramienta de diagnóstico integrada que puede ayudarte a supervisar el estado de tus instancias.
Consideraciones de seguridad
A continuación, se muestran las consideraciones de seguridad recomendadas cuando se crea un notebook administrado por el usuario:
- Selecciona la opción "un solo usuario". el acceso a los notebooks. Si el usuario especificado no es el creador de la instancia, debes otorgarle el rol de usuario de cuenta de servicio (roles/iam.serviceAccountUser) en la cuenta de servicio de la instancia.
- Inhabilita las siguientes opciones:
- acceso raíz
- nbconvert
- descarga de archivos de la IU de JupyterLab
- Se usará Cloud NAT en lugar de asignar una dirección IP externa al notebook administrado por el usuario.
- Selecciona las siguientes opciones de procesamiento:
- Inicio seguro
- Módulo de plataforma segura virtual (vTPM)
- Supervisión de integridad
4. Antes de comenzar
Actualiza el proyecto para que sea compatible con el instructivo
En este instructivo, se usa $variables para facilitar la implementación de la configuración de gcloud en Cloud Shell.
Dentro de Cloud Shell, realiza lo siguiente:
gcloud config list project
gcloud config set project [your-project-name]
projectid=your-project-name
echo $projectid
5. Configuración de VPC
Crea la VPC independiente
Dentro de Cloud Shell, realiza lo siguiente:
gcloud compute networks create securevertex-vpc --project=$projectid --subnet-mode=custom
Crea la subred del notebook administrado por el usuario
Dentro de Cloud Shell, realiza lo siguiente:
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
Configuración de Cloud Router y NAT
Cloud NAT se usa en el instructivo para las descargas de paquetes de software de notebook porque la instancia de notebook administrado por el usuario no tiene una dirección IP externa. Cloud NAT también ofrece capacidades de NAT de salida, lo que significa que los hosts de Internet no pueden iniciar la comunicación con un notebook administrado por el usuario, lo que lo hace más seguro.
En Cloud Shell, crea el Cloud Router regional.
gcloud compute routers create cloud-router-us-central1 --network securevertex-vpc --region us-central1
En Cloud Shell, crea la puerta de enlace regional de Cloud NAT.
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 de almacenamiento
Los buckets de almacenamiento ofrecen carga/recuperación segura de archivos. En el instructivo, el almacenamiento en la nube contendrá una secuencia de comandos posterior al inicio para instalar paquetes de IA generativa en los notebooks administrados por el usuario.
Crea un bucket de Cloud Storage y reemplaza BUCKET_NAME por el nombre global único que prefieras.
En Cloud Shell, crea un bucket de almacenamiento único.
gsutil mb -l us-central1 -b on gs://BUCKET_NAME
Tienda “BUCKET_NAME” durante todo el lab
BUCKET_NAME=YOUR BUCKET NAME
echo $BUCKET_NAME
7. Crea una secuencia de comandos posterior al inicio
Para habilitar la descarga de los paquetes de IA generativa, crea una secuencia de comandos posterior al inicio en Cloud Shell con vi o el editor nano y guárdala 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
Ejemplo:
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
Sube la secuencia de comandos posterior al inicio en tu bucket de almacenamiento desde Cloud Shell con gsutil
gsutil cp poststartup.sh gs://$BUCKET_NAME
8. Crea una cuenta de servicio
Para proporcionar un nivel detallado de control del notebook administrado por el usuario, se requiere una cuenta de servicio. Una vez generados, los permisos de la cuenta de servicio se pueden modificar según los requisitos de la empresa. En el instructivo, se aplicarán las siguientes reglas a la cuenta de servicio:
Debes la API de Service Account antes de continuar.
En Cloud Shell, crea la cuenta de servicio.
gcloud iam service-accounts create user-managed-notebook-sa \
--display-name="user-managed-notebook-sa"
En Cloud Shell, actualiza la cuenta de servicio con el rol Visualizador de objetos de Storage.
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/storage.objectViewer"
En Cloud Shell, actualiza la cuenta de servicio con el rol Usuario de Vertex AI.
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/aiplatform.user"
En Cloud Shell, enumera la cuenta de servicio y toma nota de la dirección de correo electrónico que se usará cuando se cree el notebook administrado por el usuario.
gcloud iam service-accounts list
Ejemplo:
$ 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 notebook seguro administrado por el usuario
Una instancia de notebooks administrados por el usuario es una instancia de máquina virtual de aprendizaje profundo que tiene preinstaladas las bibliotecas de aprendizaje automático y ciencia de datos más recientes. De manera opcional, puedes incluir GPU de Nvidia para acelerar el hardware.
Habilita las APIs de consumidor
Crea el notebook administrado por el usuario
- Ve a Workbench.
- Selecciona Notebooks administrados por el usuario y, luego, Crear notebook. Se abrirá la página Crear un notebook administrado por el usuario.
- Si se implementa un notebook existente, selecciona Notebooks administrados por el usuario → Nuevo notebook → Personalizar
- En la sección Detalles de la página Crear un notebook administrado por el usuario, proporciona la siguiente información para tu nueva instancia:
- Nombre: Proporciona un nombre para tu instancia nueva.
- Región y zona: En este instructivo, usarás la región us-central1 y la zona us-central1-a.
Selecciona Continuar.
- En la sección Entorno, proporciona lo siguiente:
- Sistema operativo: Selecciona el sistema operativo que quieras usar.
- Selecciona el entorno que deseas usar.
- Versión: Selecciona la versión que deseas usar.
- Secuencia de comandos posterior al inicio (opcional, usa la secuencia de comandos de IA generativa creada anteriormente) selecciona Examinar para seleccionar una secuencia de comandos que se ejecutará después de que comience la instancia.
- Metadatos: Proporciona claves de metadatos personalizadas para la instancia (opcional).
Selecciona Continuar.
- En la sección Tipo de máquina, proporciona la siguiente información:
- Tipo de máquina: selecciona la cantidad de CPU y de RAM para tu instancia nueva. Vertex AI Workbench proporciona estimaciones de costos mensuales para cada tipo de máquina que selecciones.
- Tipo de GPU: selecciona el tipo de GPU y la cantidad de GPU para tu instancia nueva. Para obtener información sobre las diferentes GPU, consulta GPU en Compute Engine.
- Selecciona la casilla de verificación Instalar automáticamente el controlador de GPU de NVIDIA para mí.
VM protegida
- Activa el inicio seguro
- Activa vTPM
- Activar la supervisión de integridad
Selecciona Continuar.
- En la sección Discos, proporciona la siguiente información:
- Discos: Opcional: Para cambiar la configuración predeterminada del disco de arranque o de datos, selecciona el tipo de disco de arranque, el tamaño del disco de arranque en GB, el tipo de disco de datos y el tamaño del disco de datos en GB que desees. Para obtener más información sobre los tipos de discos, consulta Opciones de almacenamiento.
- Borrar a la papelera: Opcional: Selecciona esta casilla de verificación para usar el comportamiento predeterminado de la papelera del sistema operativo. Si usas este comportamiento, los archivos borrados con la interfaz de usuario de JupyterLab se pueden recuperar, pero los archivos borrados ocupan espacio en el disco.
- Copia de seguridad: Opcional: Para sincronizar una ubicación de Cloud Storage con el disco de datos de tu instancia, selecciona Explorar y especifica la ubicación de Cloud Storage. Para obtener información sobre los costos de almacenamiento, consulta los precios de Cloud Storage.
- Encriptación: Clave de encriptación administrada por Google
Selecciona Continuar.
- En la sección Herramientas de redes, proporciona la siguiente información:
- Herramientas de redes: Selecciona Redes en este proyecto o Redes compartidas conmigo. Si usas una VPC compartida en el proyecto host, también debes otorgar el rol de usuario de la red de Compute (roles/compute.networkUser) al agente de servicio de Notebooks del proyecto de servicio.
- En el campo Red, selecciona la red que desees. En el instructivo, se usa la red securevertex-vpc. Puedes seleccionar una red de VPC, siempre que esta tenga habilitado el Acceso privado a Google o pueda acceder a Internet. En el campo Subred, selecciona la subred que desees. En el instructivo, se usa la subred securevertex-subnet-a.
- Anular la selección de la asignación de la dirección IP externa
- Selecciona Permitir acceso mediante proxies
Selecciona Continuar.
- En la sección IAM y seguridad, proporciona la siguiente información:
- Selecciona Usuario único y, luego, en el campo Correo electrónico del usuario, ingresa la cuenta de usuario a la que deseas otorgar acceso. Si el usuario especificado no es el creador de la instancia, debes otorgarle el rol de usuario de cuenta de servicio (roles/iam.serviceAccountUser) en la cuenta de servicio de la instancia.
- Anula la selección de Usar la cuenta de servicio predeterminada de Compute Engine en la VM para llamar a las APIs de Google Cloud
- Ingresa la dirección de correo electrónico de la cuenta de servicio recién creada, por ejemplo: user-managed-notebook-sa@my-project-id.iam.gserviceaccount.com
Opciones de seguridad
- Anula la selección para habilitar el acceso raíz a la instancia
- Anular la selección de habilitar nbconvert
- Anula la selección de Habilitar la descarga de archivos desde la IU de JupyterLab
- Habilitar terminal (anula la selección para entornos de producción)
Selecciona Continuar.
- En la sección Estado del sistema, proporciona la siguiente información:
Actualización del entorno y estado del sistema
- Selecciona la casilla de verificación Habilitar la actualización automática del entorno.
- Elige si deseas actualizar tu notebook Semanal o Mensualmente.
En Estado del sistema y los informes, selecciona o desmarca las siguientes casillas de verificación:
- Habilitar el informe de estado del sistema
- Generar informes sobre las métricas personalizadas en Cloud Monitoring
- Instalar el agente de Cloud Monitoring
Selecciona Crear.
10. Validación
Vertex AI Workbench crea una instancia de notebooks administrados por el usuario basada en las propiedades que especificaste y, luego, la inicia automáticamente. Cuando la instancia está lista para usar, Vertex AI Workbench activa un vínculo Abrir JupyterLab que permite que el usuario final acceda al notebook.
11. Observabilidad
Supervisa las métricas del sistema y de las aplicaciones a través de Monitoring
Para las instancias de notebooks administrados por el usuario que tienen Monitoring instalado, puedes supervisar las métricas de tu sistema y aplicación con la consola de Google Cloud:
- En la consola de Google Cloud, ve a la página Notebooks administrados por el usuario.
- Haz clic en el nombre de la instancia de la que deseas ver las métricas del sistema y de las aplicaciones.
- En la página Detalles del notebook, haz clic en la pestaña Supervisión. Revisa las métricas del sistema y de las aplicaciones de tu instancia.
12. Crea un programa de notebook
Los programas de instancias te permiten iniciar y detener instancias de máquina virtual (VM) automáticamente. Usar programaciones de instancias para automatizar la implementación de tus instancias de VM puede ayudarte a optimizar los costos y administrar las instancias de VM de forma más eficiente. Puedes usar programaciones de instancias para cargas de trabajo recurrentes y únicas. Por ejemplo, usa programas de instancias para ejecutar instancias de VM solo durante el horario laboral o para proporcionar capacidad para un evento único.
Para usar programaciones de instancias, crea una política de recursos que detalle el comportamiento de inicio y finalización y, luego, adjunta la política a una o más instancias de VM.
En este instructivo, aprenderás a crear una programación de instancias que encienda tu notebook a las 7 a.m. y lo apague a las 6 p.m.
Para crear la programación de instancias, necesitarás el permiso compute.instances.start y compute.instances.stop, por lo que se recomienda un rol personalizado creado por el administrador que te otorgó.
Una vez creado, el rol personalizado se asignará a la cuenta de servicio predeterminada de Compute Engine en tu proyecto, lo que permitirá que la programación de instancias inicie y detenga tu notebook.
Crea un rol personalizado
En Cloud Shell, crea un rol personalizado, VmScheduler, y agrega los permisos necesarios.
gcloud iam roles create Vm_Scheduler --project=$projectid \
--title=vm-scheduler-notebooks \
--permissions="compute.instances.start,compute.instances.stop" --stage=ga
Describir el rol personalizado de Cloud Shell
gcloud iam roles describe Vm_Scheduler --project=$projectid
Ejemplo:
$ 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
Actualiza la cuenta de servicio predeterminada
En la siguiente sección, identificarás y actualizarás la cuenta de servicio predeterminada que consta del formato: PROJECT_NUMBER-compute@developer.gserviceaccount.com
En Cloud Shell, identifica el número de proyecto actual.
gcloud projects list --filter=$projectid
En Cloud Shell, almacena el número de proyecto como una variable.
project_number=your_project_number
echo $project_number
En Cloud Shell, actualiza la cuenta de servicio de procesamiento predeterminada con el rol personalizado, 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 programación de instancias
En Cloud Shell, crea el programa de inicio y finalización.
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
En Cloud Shell, almacena el nombre de tu notebook.
gcloud compute instances list
notebook_vm=your_notebookvm_name
echo $notebook_vm
Puedes adjuntar una programación de instancias a cualquier instancia de VM existente que se encuentre en la misma región que la programación de instancias.
En Cloud Shell, asocia el programa a tu notebook.
gcloud compute instances add-resource-policies $notebook_vm \
--resource-policies=optimize-notebooks \
--zone=us-central1-a
13. Limpia
Borra el notebook administrado por el usuario de la consola, navega a Vertex AI → Workbench y selecciona y borra el notebook.
En Cloud Shell, borra los componentes de 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. Felicitaciones
¡Bien hecho! Configuraste y validaste correctamente un notebook seguro administrado por el usuario creando una VPC independiente personalizada con prácticas recomendadas de endurecimiento de la seguridad para notebooks administrados y, además, implementaste un programa de instancias para optimizar los gastos.
¿Qué sigue?
Consulta algunos de estos instructivos...
- Introducción a Vertex Pipelines
- Trabajo de entrenamiento personalizado y predicción con conjuntos de datos administrados
Lecturas adicionales y Videos
- Comienza a usar Notebooks para el aprendizaje automático
- Comienza a usar Vertex AI
- Introducción a la IA generativa
Documentos de referencia
- Introducción a Vertex AI Workbench
- Introducción a los notebooks administrados por el usuario
- Usa una instancia de notebooks administrados por el usuario dentro de un perímetro de servicio
- Crea una cuenta de servicio.
- Programa una instancia de VM para que se inicie y se detenga