Visión rápida de la computadora : ¡los modelos de trenes a una fracción del costo con carga de datos acelerados!
[Instalar] [QuickStart] [Características] [Docs] [Soporte de Slack] [Página de inicio] [Paper]
Mantenedores: Guillaume Leclerc, Andrew Ilyas y Logan Engstrom
ffcv es un sistema de carga de datos que aumenta drásticamente el rendimiento de los datos en el entrenamiento del modelo:
$YOUR_DATASET modelo $REALLY_FAST (para $WAY_LESS )Mantenga su algoritmo de entrenamiento igual, ¡simplemente reemplace el cargador de datos! Mira estas velocidades:
ffcv también viene preparado con código rápido y simple para puntos de referencia de visión estándar:
conda create -y -n ffcv python=3.9 cupy pkg-config libjpeg-turbo opencv pytorch torchvision cudatoolkit=11.3 numba -c pytorch -c conda-forge
conda activate ffcv
pip install ffcv
Solución de problemas Nota 1: Si los comandos de arriba dan como resultado un error de conflicto de paquete, intente ejecutar conda config --env --set channel_priority flexible en el entorno y vuelva a sintiendo el comando de instalación.
Solución de problemas Nota 2: En algunos sistemas (pero rara vez), deberá agregar el paquete de compilers al primer comando anterior.
Solución de problemas Nota 3: Cortesía de @kschuerholt, aquí hay un Dockerfile que puede ayudar con la instalación sin conda
..../opencv/build/x64/vc15/bin a la variable de entorno de ruta..../libjpeg-turbo64/bin a la variable de entorno de rutapthread/include/pthread.h , y agregue el código a continuación en la parte superior del archivo. # define HAVE_STRUCT_TIMESPEC..../pthread/dll a la variable de entorno de rutapip install ffcv Si usa FFCV, cíquelo como:
@inproceedings{leclerc2023ffcv,
author = {Guillaume Leclerc and Andrew Ilyas and Logan Engstrom and Sung Min Park and Hadi Salman and Aleksander Madry},
title = {{FFCV}: Accelerating Training by Removing Data Bottlenecks},
year = {2023},
booktitle = {Computer Vision and Pattern Recognition (CVPR)},
note = {url{https://github.com/libffcv/ffcv/}. commit xxxxxxx}
}
(¡Asegúrese de reemplazar xxxxxxx arriba con el hash de la confirmación utilizada!)
Acelere cualquier sistema de aprendizaje con ffcv . Primero, convierta su conjunto de datos en formato ffcv ( ffcv convierte los conjuntos de datos de Pytorch indexados y WebDataSets):
from ffcv . writer import DatasetWriter
from ffcv . fields import RGBImageField , IntField
# Your dataset (`torch.utils.data.Dataset`) of (image, label) pairs
my_dataset = make_my_dataset ()
write_path = '/output/path/for/converted/ds.beton'
# Pass a type for each data field
writer = DatasetWriter ( write_path , {
# Tune options to optimize dataset size, throughput at train-time
'image' : RGBImageField ( max_resolution = 256 ),
'label' : IntField ()
})
# Write dataset
writer . from_indexed_dataset ( my_dataset ) Luego reemplace su cargador antiguo con el cargador ffcv en el tiempo del tren (en Pytorch, ¡no se requieren otros cambios!)::
from ffcv . loader import Loader , OrderOption
from ffcv . transforms import ToTensor , ToDevice , ToTorchImage , Cutout
from ffcv . fields . decoders import IntDecoder , RandomResizedCropRGBImageDecoder
# Random resized crop
decoder = RandomResizedCropRGBImageDecoder (( 224 , 224 ))
# Data decoding and augmentation
image_pipeline = [ decoder , Cutout (), ToTensor (), ToTorchImage (), ToDevice ( 0 )]
label_pipeline = [ IntDecoder (), ToTensor (), ToDevice ( 0 )]
# Pipeline for each data field
pipelines = {
'image' : image_pipeline ,
'label' : label_pipeline
}
# Replaces PyTorch data loader (`torch.utils.data.Dataloader`)
loader = Loader ( write_path , batch_size = bs , num_workers = num_workers ,
order = OrderOption . RANDOM , pipelines = pipelines )
# rest of training / validation proceeds identically
for epoch in range ( epochs ):
... Consulte aquí para obtener una guía más detallada para implementar ffcv para su conjunto de datos.
Desde la red hasta la evaluación comparativa y la rápida iteración de investigación, hay muchas razones para querer una capacitación modelo más rápida. A continuación, presentamos bases de código prefabricadas para capacitación en ImageNet y CIFAR, incluidas las bases de código extensibles (a) y (b) numerosas configuraciones de capacitación prefabricadas.
Proporcionamos un guión autónomo para capacitar a Imagenet rápidamente. Arriba trazamos el tiempo de entrenamiento versus la frontera de precisión, y las velocidades de datakinging, para 1-GPU RESNET-18 y 8-GPU RESNET-50 junto con algunas líneas de base.
| Enlace a la configuración | Top_1 | Top_5 | # Épocas | Tiempo (mins) | Arquitectura | Configuración |
|---|---|---|---|---|---|---|
| Enlace | 0.784 | 0.941 | 88 | 77.2 | Resnet-50 | 8 x A100 |
| Enlace | 0.780 | 0.937 | 56 | 49.4 | Resnet-50 | 8 x A100 |
| Enlace | 0.772 | 0.932 | 40 | 35.6 | Resnet-50 | 8 x A100 |
| Enlace | 0.766 | 0.927 | 32 | 28.7 | Resnet-50 | 8 x A100 |
| Enlace | 0.756 | 0.921 | 24 | 21.7 | Resnet-50 | 8 x A100 |
| Enlace | 0.738 | 0.908 | 16 | 14.9 | Resnet-50 | 8 x A100 |
| Enlace | 0.724 | 0.903 | 88 | 187.3 | Resnet-18 | 1 x A100 |
| Enlace | 0.713 | 0.899 | 56 | 119.4 | Resnet-18 | 1 x A100 |
| Enlace | 0.706 | 0.894 | 40 | 85.5 | Resnet-18 | 1 x A100 |
| Enlace | 0.700 | 0.889 | 32 | 68.9 | Resnet-18 | 1 x A100 |
| Enlace | 0.688 | 0.881 | 24 | 51.6 | Resnet-18 | 1 x A100 |
| Enlace | 0.669 | 0.868 | 16 | 35.0 | Resnet-18 | 1 x A100 |
¡Entrena tus propios modelos Imagenet! Puede usar nuestro script de capacitación y configuraciones prefabricadas para entrenar cualquier modelo visto en los gráficos anteriores.
También incluimos un código prefabricado para una capacitación eficiente en CIFAR-10 en los examples/ directorio, obteniendo una precisión del 93% de Top1 en 36 segundos en una sola GPU A100 (sin optimizaciones como Mezcla, Batchnorm, etc., etc., que tienen el potencial de elevar la precisión aún más). Puedes encontrar el guión de entrenamiento aquí.

¡Visión por computadora o no, FFCV puede ayudar a que la capacitación sea más rápida en una variedad de configuraciones con recursos limitados! Nuestra guía de rendimiento tiene una cuenta más detallada de las formas en que FFCV puede adaptarse a diferentes cuellos de botella de rendimiento.
Plug-and-Play con cualquier código de entrenamiento existente : en lugar de cambiar aspectos de la capacitación del modelo en sí, FFCV se enfoca en eliminar los cuellos de botella de datos , que resultan ser un problema en todas partes, desde el entrenamiento de la red neuronal hasta la regresión lineal. Esto significa que:
¡Vea nuestra guía de inicio, tutoriales de ejemplo y ejemplos de código para ver lo fácil que es comenzar!
Procesamiento de datos rápidos sin dolor : FFCV maneja automáticamente la lectura de datos, el precipitado, el almacenamiento en caché y la transferencia entre dispositivos de una manera extremadamente eficiente, para que los usuarios no tengan que pensar en ello.
El procesamiento de datos fusionado y compilado automáticamente : mediante el uso de transformaciones FFCV preescritas o escribiendo fácilmente las personalizadas, los usuarios pueden aprovechar las capacidades de compilación y tuberías de FFCV, que se fusionarán automáticamente y compilarán simples aumentos de Python para el código de la máquina utilizando Numba, y programarlos de manera asincrónica para evitar la carga de demoras.
Cargue datos rápidamente de RAM, SSD o disco en red : FFCV expone opciones fáciles de usar que se pueden ajustar en función de los recursos disponibles. Por ejemplo, si un conjunto de datos se ajusta a la memoria, FFCV puede almacenarlo en caché en el nivel del sistema operativo y garantizar que los procesos concurrentes múltiples obtengan acceso rápido de datos. De lo contrario, FFCV puede usar el almacenamiento en caché rápido a nivel de proceso y optimizará la carga de datos para minimizar el número subyacente de lecturas de disco. Consulte la Guía del Doctor de cuello de botella para obtener más información.
Entrenamiento de múltiples modelos por GPU : gracias a la carga de datos basada en hilos totalmente asincrónicas, ahora puede entrelazar la capacitación de múltiples modelos en la misma GPU de manera eficiente, sin ninguna sobrecarga de carga de datos. Consulte esta guía para obtener más información.
Herramientas dedicadas para el manejo de imágenes : todas las características anteriores son igualmente aplicables a todo tipo de modelos de aprendizaje automático, pero FFCV también ofrece algunas características específicas de la visión, como la codificación rápida de JPEG y la decodificación, almacenar conjuntos de datos como mezclas de imágenes sin procesar y comprimidas para intercambiar la E/S de la altura y calcular la gastos anteriores, etc., ver la guía de trabajo con más información para obtener más información.