BookinglyTech News
Infraestructura

Vortex: un formato de archivo columnar para cargar datos en GPU sin pasar por CPU

El formato open source permite leer directamente de S3 a la GPU, eliminando el cuello de botella de descompresión y NVMe en el entrenamiento.

2 min de lecturaInfoQ0 vistas

Onur Satici, mantenedor de Vortex en SpiralDB, presentó una técnica para alimentar GPUs de entrenamiento de modelos de IA a máxima velocidad sin saturar la CPU ni depender de discos locales. La clave es Vortex, un formato de archivo columnar open source bajo la administración de la Linux Foundation, que permite streamear datos directamente desde S3 hasta la memoria de la GPU, saltándose los pasos intermedios tradicionales.

Del cuello de botella a la velocidad de red

El problema central en el pipeline de datos para el entrenamiento es el coste de oportunidad: las GPUs son caros y cada segundo que permanecen inactivas esperando datos es dinero perdido. Satici lo divide en dos impuestos: el del movimiento y el de la decisión.

En la arquitectura clásica (usada por PyTorch o MosaicML), los datos viajan de S3 a NVMe, se leen a RAM, se descomprimen en CPU y finalmente se envían a la GPU vía PCIe. Este proceso se estrangula por el ancho de banda de la NVMe y, sobre todo, por la descompresión serial en la CPU. Además, PyTorch, al ser Python, depende del multiproceso y persistencia en disco para evitar conflictos entre workers, añadiendo latencia.

Vortex propone eliminar el salto a NVMe y la descompresión en CPU. Al usar esquemas de compresión que la GPU puede descomprimir de forma paralela, el pipeline puede fluir a velocidades cercanas a las de la tarjeta de red (por ejemplo, 50 Gbps), ejecutándose hasta 10 veces más rápido que el caudal real de los bytes comprimidos. El dato llega a la GPU en crudo, y el hardware gráfico se encarga de expandirlo.

La segunda ventaja es la agilidad. Si necesitas cambiar un filtro, un mezcla de datos o el orden de los ejemplos durante el entrenamiento, no hay que re-tokenizar ni reprocesar todo el conjunto. Basta con cambiar la consulta de escaneo (scan) sobre el mismo archivo Vortex. Esto reduce drásticamente el tiempo de iteración, maximizando el tiempo efectivo de cómputo.

Vortex vs Parquet

Vortex se parece a Parquet en su naturaleza columnar, pero difiere en su especificación técnica. Mientras Parquet vincula los tipos lógicos con su codificación física en disco, Vortex separa ambos conceptos. Esto permite una especificación más extensible y mínima, dando control al desarrollador sobre cómo se mapean los datos. El objetivo es hacer lo mínimo posible lo más tarde posible, evitando copias de memoria innecesarias al materializar resultados intermedios.

En su demo, Satici mostró un vídeo 4K (8 millones de píxeles por cuadro) visualizando un escaneo de archivo. Al aplicar column pruning, solo se transmitían las columnas necesarias manteniendo el mismo ancho de banda, demostrando la eficiencia del formato al evitar leer datos que el modelo no necesita en esa iteración de entrenamiento.