Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

🖥️ Diapositivas — Sesión 27 (vie 4 dic)

Todo lo que va del curso corre en una laptop, y es a propósito: datos pequeños e iteración rápida enseñan más por hora que datos grandes y colas largas. Pero los proyectos reales se salen de esa talla. Esta página es el mapa para cuando eso ocurra.

Cuándo se le quedó chica la laptop

Dos síntomas, uno para la memoria y otro para el tiempo:

Un tercer síntoma, más suave: usted necesita correr muchos trabajos independientes (procesamiento por estación, barridos de semillas, pliegues de validación cruzada). Eso es vergonzosamente paralelo y es exactamente para lo que existen los clústeres.

Antes de escalar, perfile. Muchos problemas de «necesito un clúster» son en realidad un bucle O(n²), float64 donde bastaría float32, o recargar los datos dentro del bucle. Una hora de perfilado es más barata que cualquier GPU.

La escalera de opciones

Suba solo hasta donde necesite.

Servidores departamentales y HPC universitario

Suele ser su primera y más barata parada: el estudiantado de la UW tiene acceso a Hyak, y la mayoría de las universidades grandes de América Latina y España operan algo equivalente (en México, el supercómputo de la UNAM en la DGTIC, con Miztli, y el laboratorio ABACUS del Cinvestav; en Chile, los clústeres universitarios y el recurso compartido del NLHPC; en Argentina, los clústeres del CONICET y de las universidades nacionales). Los clústeres corren un planificador, casi siempre SLURM. Usted describe el trabajo; el planificador le encuentra un nodo:

sbatch --gres=gpu:1 --mem=64G --time=08:00:00 --wrap "pixi run python train.py --config sweep3.yaml"

Su pila de reproducibilidad se transfiere tal cual: clone el repositorio en el clúster, pixi install (o construya un contenedor Apptainer a partir de su imagen), corra los mismos scripts. Si su flujo de trabajo solo funciona en su laptop, la sección 5.1 todavía no está terminada.

Asignaciones nacionales de tiempo de cómputo

Varios países financian supercómputo académico y lo reparten por convocatoria; el tiempo suele ser gratuito para investigación con respaldo institucional, y las colas son la moneda real.

Por debajo de todo esto está la conectividad académica: RedCLARA enlaza las redes nacionales de investigación de América Latina (CUDI en México, REUNA en Chile, InnovaRed en Argentina, entre otras) entre sí y con GÉANT e Internet2, que es lo que hace practicable mover conjuntos de datos grandes entre un archivo y el clúster donde correrá el análisis.

Si su proyecto es investigación con financiamiento, pida una asignación antes de pagarle a un proveedor de nube.

Nube comercial (AWS, GCP, Azure)

La nube vende dos cosas que a usted pueden interesarle: cómputo elástico (cien máquinas por una hora) y almacenamiento de objetos junto a conjuntos de datos públicos. Las piezas que conviene conocer:

Quien corre una cuenta de nube sin tope aprende sobre disciplina de costos exactamente una vez. Ponga la alarma primero.

Escala de docencia: Colab y Codespaces

Google Colab da una GPU gratuita (limitada) conectada a un cuaderno, y GitHub Codespaces da una máquina VS Code desechable enlazada a su repositorio. Ambos sirven para el trabajo del curso, demostraciones y probar una idea antes de solicitar recursos de verdad. Ninguno es una plataforma de investigación: las sesiones son efímeras, el equipo es impredecible y los trabajos largos se cancelan. Trátelos como papel borrador.

Entornos restringidos

Todo lo anterior supone internet de salida abierto: pixi install alcanzando conda-forge y PyPI, CI en github.com, rastreadores de experimentos alojados, lecturas anónimas de buckets públicos. Los laboratorios nacionales, los enclaves seguros y muchas redes gubernamentales e industriales bloquean parte o todo eso. El flujo de trabajo sobrevive; lo que cambia es el transporte. Cuatro sustituciones cubren la mayoría de los casos.

Espejos de paquetes e instalaciones sin conexión. El flujo de trabajo con pixi del capítulo 1.3 y el entorno bloqueado de 5.1 se transfieren sin cambios — lo único que se mueve son las URL de los canales. La mayoría de los sitios restringidos opera un espejo interno de conda-forge y PyPI (Artifactory, Nexus o un simple espejo de archivos); apunte pixi hacia él con una tabla [mirrors] en su configuración, y el mismo pixi.toml + pixi.lock resuelven al mismo entorno. Para un sistema completamente aislado, resuelva y descargue en una máquina conectada, mueva la caché de paquetes (o una imagen de contenedor, abajo) por la puerta de transferencia aprobada, e instale sin conexión. Pregunte en su instalación cuál es la vía autorizada antes de inventar una.

Transferencia de contenedores. Construya donde hay internet, ejecute donde no lo hay. Construya la imagen Apptainer (o haga docker save a un tarball) en una máquina abierta, mueva el único archivo .sif por la puerta de transferencia, y ejecútelo sin privilegios en el clúster — ningún nodo de cómputo necesita alcanzar conda-forge. En HPC restringido esta es la vía principal para el entorno, no una nota al pie: un archivo carga toda la pila fijada de 5.1.

CI autoalojada. El patrón de verificaciones ejecutables — entorno fijado, reejecutar todo en cada cambio — es lo que sostiene la garantía de 5.1 y el flujo de trabajo copiable de 5.3; GitHub Actions es apenas uno de sus posibles anfitriones. GitLab CI, Jenkins o un ejecutor autoalojado dentro del enclave corren el mismo trabajo con otro dialecto de YAML. Si github.com es inalcanzable, una instancia interna de GitLab con un ejecutor en una estación de trabajo del laboratorio preserva la propiedad que importa: lo que cuenta es lo que la CI logre ejecutar.

Rastreadores de experimentos alojados frente a autoalojados. Weights & Biases, tal como se usa en 5.2, es un servicio alojado: cada parámetro, métrica y artefacto registrado sale de su red. Antes de adoptarlo, someta la decisión a las reglas de clasificación de datos de su institución — los metadatos de una corrida pueden estar restringidos por el patrocinador o sujetos a control de exportaciones aunque el código no lo esté. MLflow autoalojado guarda los mismos registros dentro del enclave, y el rastreador de 30 líneas en JSON que se construye en 5.2 cumple en cualquier lado, porque solo escribe archivos locales. La misma revisión aplica al acceso a los datos: las lecturas anónimas de buckets públicos de la siguiente sección son llamadas de salida que su red puede bloquear, y la alternativa es un espejo institucional o un subconjunto preparado de antemano a través de la puerta de transferencia.

Acceso a datos optimizado para la nube: leer en el lugar

El flujo de trabajo antiguo — descargar el archivo completo y luego analizar — se rompe cuando el archivo pesa 100 TB. Los formatos optimizados para la nube lo arreglan abaratando las lecturas parciales sobre HTTP: Zarr para arreglos N-dimensionales por fragmentos, Cloud-Optimized GeoTIFF (COG) para rásteres, más Parquet para tablas. Usted abre el conjunto de datos remoto de forma perezosa y trae solo los fragmentos que su cómputo toca.

El cuaderno 5.5 ejecuta este patrón de verdad, contra el almacén Zarr de 30 TiB de temperatura superficial del mar MUR en los datos abiertos de AWS: apertura perezosa en ~12 s a partir de una lectura de metadatos de 10 KiB, un subconjunto regional de diez días que mueve 60 MiB para producir una respuesta de 9 MiB — una parte en ~525 000 del almacén — y una media mensual por flujo que nunca retiene más de unos pocos fragmentos en memoria. El patrón que hay que interiorizar: la consulta se mueve hacia los datos, y de vuelta solo se mueven resultados del tamaño de su respuesta. Combinado con cómputo en la misma región de la nube, esto reemplaza descargas de terabytes por lecturas de megabytes. fsspec ofrece el mismo truco para casi cualquier sistema de almacenamiento, y pooch (sección 5.3) sigue siendo la herramienta adecuada para los archivos pequeños y versionados de los que su repositorio realmente depende.

Lecturas adicionales