Al entrenar modelos de aprendizaje profundo, los recursos computacionales desempeñan un papel fundamental para determinar la viabilidad y la velocidad de la experimentación. La mayoría de los portátiles no cuentan con GPU potentes ni memoria suficiente para gestionar grandes conjuntos de datos o arquitecturas de redes neuronales complejas de forma eficiente; por lo tanto, los tiempos de entrenamiento pueden extenderse a varias horas o incluso días. El uso de máquinas virtuales (VM) en la nube con GPU dedicadas reduce significativamente estas limitaciones, lo que permite la creación rápida de prototipos y la iteración. Google Cloud Platform (GCP) ofrece imágenes de VM de aprendizaje profundo, que son imágenes de máquinas virtuales preconfiguradas y optimizadas para tareas de aprendizaje automático.
Uso de una máquina virtual de Google Cloud con GPU y JupyterLab para un entrenamiento de modelos eficiente
1. Selección de la imagen de máquina virtual de aprendizaje profundo adecuada
Google Cloud proporciona imágenes de máquinas virtuales de aprendizaje profundo preinstaladas con frameworks populares como TensorFlow, PyTorch y JAX, junto con controladores y bibliotecas de GPU (p. ej., CUDA, cuDNN, NCCL). Estas imágenes también incluyen JupyterLab, un potente entorno de desarrollo interactivo. Para empezar, seleccione una imagen de máquina virtual de aprendizaje profundo que se ajuste a sus requisitos en cuanto al framework de aprendizaje profundo y al tipo de GPU que desea utilizar (como NVIDIA Tesla T4, P100, V100 o A100, según la disponibilidad y su presupuesto).
2. Creación de la instancia de VM
Usando la consola de Google Cloud o la CLI de `gcloud`, crea una nueva instancia de VM:
– Elija un tipo de máquina con suficientes vCPU y RAM (por ejemplo, n1-standard-8 o superior).
– Especifique el número y el tipo de GPU en la sección “GPU”.
– Seleccione una imagen de máquina virtual de aprendizaje profundo del Marketplace.
– Ajuste el tamaño del disco según los requisitos del modelo y del conjunto de datos.
– Abra los puertos necesarios (en particular, TCP:8080 o TCP:8888) para permitir el acceso a JupyterLab.
Ejemplo de comando `gcloud`:
bash gcloud compute instances create my-dl-vm \ --zone=us-central1-a \ --machine-type=n1-standard-8 \ --accelerator=type=nvidia-tesla-t4,count=1 \ --image-family=tf-latest-gpu \ --image-project=deeplearning-platform-release \ --maintenance-policy=TERMINATE \ --metadata="install-nvidia-driver=True" \ --boot-disk-size=200GB \ --scopes=https://www.googleapis.com/auth/cloud-platform
Este comando crea una VM con un procesador de 8 vCPU, una GPU T4 y un disco de arranque de 200 GB, utilizando la última imagen de GPU de TensorFlow.
3. Acceso a JupyterLab
Una vez que la máquina virtual esté en ejecución, conéctese por SSH e inicie JupyterLab. En las máquinas virtuales de Google Cloud Deep Learning, JupyterLab suele estar preconfigurado y se puede acceder a él navegando a la dirección IP externa de la máquina virtual en su navegador, añadiendo `:8080` o `:8888` (el puerto predeterminado), según la configuración.
Si aún no está en ejecución, JupyterLab se puede iniciar manualmente:
bash jupyter lab --ip=0.0.0.0 --port=8080 --no-browser
Para un acceso seguro, configure un túnel SSH o una conexión HTTPS. Google Cloud ofrece un botón integrado "Abrir JupyterLab" para máquinas virtuales de aprendizaje profundo, lo que simplifica este proceso.
4. Organización de dependencias mediante entornos virtuales
Un desafío común en el aprendizaje automático es la gestión de dependencias. Distintos proyectos pueden requerir distintas versiones de bibliotecas, y actualizar o degradar paquetes globalmente puede generar conflictos o incompatibilidades. Para aislar las dependencias, utilice entornos virtuales de Python o entornos «conda».
– Para crear un entorno virtual con `venv`:
bash python3 -m venv myenv source myenv/bin/activate pip install -r requirements.txt
– Para usar `conda` (instalado de forma predeterminada en las máquinas virtuales de aprendizaje profundo):
bash conda create -n myenv python=3.8 conda activate myenv conda install tensorflow-gpu==2.8.0 numpy pandas matplotlib
Después de activar el entorno, asegúrese de que JupyterLab lo reconozca como un kernel:
bash pip install ipykernel python -m ipykernel install --user --name=myenv --display-name="Python (myenv)"
Esto le permite seleccionar su entorno como un kernel dentro de JupyterLab, garantizando que sus cuadernos utilicen las dependencias correctas.
5. Transferencia de datos y cuadernos
Sube tus conjuntos de datos y cuadernos a la máquina virtual. Esto se puede lograr mediante:
– Google Cloud Storage (GCS): cargue datos a un depósito de GCS y use el comando `gsutil` o el cliente GCS de Python para descargarlos a la máquina virtual.
– SCP: utilice una copia segura (SCP) para transferir archivos directamente desde su máquina local a la VM.
– Interfaz gráfica de JupyterLab: arrastre y suelte archivos a través del navegador.
Ejemplo usando `gsutil`:
bash gsutil cp gs://your-bucket/dataset.csv /home/jupyter/
6. Entrenamiento de su modelo en la máquina virtual equipada con GPU
Con el entorno configurado, abra su notebook en JupyterLab. Asegúrese de que el framework (p. ej., TensorFlow, PyTorch) detecte la GPU. En TensorFlow, por ejemplo, ejecute:
python
import tensorflow as tf
print("Num GPUs Available: ", len(tf.config.list_physical_devices('GPU')))
Si se detecta una GPU, el entrenamiento del modelo la utilizará, lo que reduce significativamente el tiempo de entrenamiento en comparación con entornos que solo utilizan CPU. Supervise el uso de la GPU mediante herramientas de línea de comandos como `nvidia-smi`:
bash watch -n 1 nvidia-smi
Este comando muestra el uso de la memoria de la GPU, la temperatura y los procesos en ejecución, lo que le permite garantizar una utilización eficiente.
7. Gestión y conservación del medio ambiente
Para evitar dañar su entorno:
– Evite instalar o actualizar paquetes globalmente.
– Utilice entornos virtuales o “conda” para cada proyecto.
– Exporte las dependencias de su entorno para reproducibilidad:
bash pip freeze > requirements.txt # For venv conda env export > environment.yml # For conda
Si necesita recrear el entorno, utilice estos archivos para instalar las mismas dependencias.
– Para proyectos en equipo, considere almacenar estos archivos en el control de versiones junto con su código.
– Realice copias de seguridad periódicas de datos y cuadernos importantes en GCS o en su máquina local.
8. Cierre de recursos
Los recursos en la nube generan costos según el uso. Cuando no se requiera computación, detenga o elimine la máquina virtual para evitar cargos innecesarios. Los datos se pueden almacenar en buckets de GCS o en discos persistentes conectados.
Ejemplo de flujo de trabajo: desde una computadora portátil local a una máquina virtual con GPU en la nube
Supongamos que está entrenando una red neuronal convolucional (CNN) en el conjunto de datos CIFAR-10 con TensorFlow. El entrenamiento en su portátil (solo con CPU) tarda 3 horas por época. Al migrar a una máquina virtual de Google Cloud con una GPU T4 y configurar su entorno como se describe:
– El tiempo de entrenamiento por época se reduce a 10 minutos.
– Sus dependencias se administran en un entorno `conda` con TensorFlow 2.8, NumPy y Matplotlib.
– El conjunto de datos se almacena en un depósito GCS y se descarga según sea necesario.
– JupyterLab permite el desarrollo y la visualización interactivos.
– El uso de la GPU se monitorea con `nvidia-smi`.
– El entorno se puede recrear en otro lugar utilizando el `environment.yml` exportado.
Beneficios de este enfoque
– Speed (Rapidez)La aceleración de GPU reduce drásticamente los tiempos de entrenamiento, lo que permite una experimentación más rápida y una iteración de resultados.
– GlobalLos recursos de la máquina virtual se pueden ajustar a medida que crecen sus necesidades, lo que incluye agregar más GPU o aumentar la RAM y el almacenamiento.
– ReproducibilidadLa gestión organizada de dependencias evita conflictos de versiones y garantiza resultados consistentes entre los miembros del equipo y las sesiones.
– FlexibilidadJupyterLab admite el desarrollo interactivo, la creación rápida de prototipos y el trabajo colaborativo, mientras que los entornos virtuales mantienen aisladas las dependencias del proyecto.
– Eficiencia de costo:El uso temporal de hardware potente elimina la necesidad de contar con costoso hardware de GPU personal, con la capacidad de apagar las máquinas virtuales cuando no están en uso.
Posibles dificultades y soluciones
– Deriva ambiental:Utilice siempre entornos virtuales y registre las dependencias.
– Seguridad de Datos:Restringir el acceso a la máquina virtual (utilizar reglas de firewall, permisos de IAM).
– Gestión de sesionesGuarde periódicamente su trabajo y haga copias de seguridad de los datos; las máquinas virtuales en la nube pueden ser interrumpidas o canceladas.
– Límites de recursos:Tenga en cuenta la cuota de GPU de su cuenta y solicite aumentos si es necesario.
Automatización e infraestructura como código
Para usuarios avanzados, la infraestructura se puede gestionar programáticamente con Terraform o Deployment Manager, lo que permite el aprovisionamiento repetible y con control de versiones de máquinas virtuales. También se pueden usar contenedores Docker para mayor reproducibilidad y portabilidad, pero las imágenes de máquinas virtuales de aprendizaje profundo ya cubren la mayoría de los requisitos de la mayoría de los usuarios.
Aprovechar las imágenes de máquinas virtuales de aprendizaje profundo de Google Cloud con aceleración de GPU y JupyterLab proporciona una solución escalable, eficiente y organizada para el entrenamiento de modelos que supera con creces las capacidades de una computadora portátil típica. Al aislar las dependencias en entornos virtuales y adoptar las mejores prácticas para la gestión de recursos en la nube, puede maximizar la productividad, manteniendo la reproducibilidad y minimizando los costos.
Otras preguntas y respuestas recientes sobre Avanzando en el aprendizaje automático:
- ¿Hasta qué punto Kubeflow realmente simplifica la gestión de los flujos de trabajo de aprendizaje automático en Kubernetes, considerando la complejidad adicional de su instalación, mantenimiento y la curva de aprendizaje para equipos multidisciplinarios?
- ¿Cómo puede un experto en Colab optimizar el uso de GPU/TPU gratuitas, gestionar la persistencia de datos y las dependencias entre sesiones y garantizar la reproducibilidad y la colaboración en proyectos de ciencia de datos a gran escala?
- ¿Cómo influyen la similitud entre los conjuntos de datos de origen y destino, junto con las técnicas de regularización y la elección de la tasa de aprendizaje, en la eficacia del aprendizaje por transferencia aplicado a través de TensorFlow Hub?
- ¿En qué se diferencia el enfoque de extracción de características del ajuste fino en el aprendizaje por transferencia con TensorFlow Hub, y en qué situaciones es cada uno más conveniente?
- ¿Qué entiendes por aprendizaje por transferencia y cómo crees que se relaciona con los modelos preentrenados que ofrece TensorFlow Hub?
- Si ya uso notebooks localmente, ¿por qué debería usar JupyterLab en una máquina virtual con GPU? ¿Cómo administro las dependencias (pip/conda), los datos y los permisos sin afectar mi entorno?
- ¿Puede alguien sin experiencia en Python y con nociones básicas de IA usar TensorFlow.js para cargar un modelo convertido desde Keras, interpretar el archivo model.json y los fragmentos, y garantizar predicciones interactivas en tiempo real en el navegador?
- ¿Cómo puede un experto en inteligencia artificial, pero principiante en programación, aprovechar TensorFlow.js?
- ¿Cuál es el flujo de trabajo completo para preparar y entrenar un modelo de clasificación de imágenes personalizado con AutoML Vision, desde la recopilación de datos hasta la implementación del modelo?
- ¿Cómo puede un científico de datos aprovechar Kaggle para aplicar modelos econométricos avanzados, documentar rigurosamente conjuntos de datos y colaborar eficazmente en proyectos compartidos con la comunidad?
Ver más preguntas y respuestas en Avanzando en el aprendizaje automático

