Vision par ordinateur rapide : Modèles de train à une fraction du coût avec un chargement de données accéléré!
[Install] [QuickStart] [Fonctionnalités] [DOCS] [Prise en charge de Slack] [Homepage] [Paper]
RETENUS: Guillaume Leclerc, Andrew Ilyas et Logan Engstrom
ffcv est un système de chargement de données d'accueil qui augmente considérablement le débit des données dans la formation des modèles:
$YOUR_DATASET $REALLY_FAST (pour $WAY_LESS )Gardez votre algorithme de formation identique, remplacez simplement le chargeur de données! Regardez ces accélérations:
ffcv est également préemballé avec un code rapide et simple pour les références de vision standard:
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
Dépannage Remarque 1: Si les commandes ci-dessus entraînent une erreur de conflit de package, essayez d'exécuter conda config --env --set channel_priority flexible dans l'environnement et de relancer la commande d'installation.
Dépannage Remarque 2: Sur certains systèmes (mais rarement), vous devrez ajouter le package compilers à la première commande ci-dessus.
Dépannage de la note 3: gracieuseté de @kschuerholt, voici un dockerfile qui peut aider à l'installation sans conda
..../opencv/build/x64/vc15/bin to Path Environment Variable..../libjpeg-turbo64/bin vers le chemin de l'environnement de la trajectoirepthread/include/pthread.h et ajoutez le code ci-dessous en haut du fichier. # define HAVE_STRUCT_TIMESPEC..../pthread/dll vers le chemin de la variable d'environnementpip install ffcv Si vous utilisez FFCV, veuillez le citer comme:
@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}
}
(Assurez-vous de remplacer xxxxxxx ci-dessus par le hachage du commit utilisé!)
Accélérez tout système d'apprentissage avec ffcv . Tout d'abord, convertissez votre ensemble de données en format ffcv ( ffcv convertit à la fois des ensembles de données Pytorch indexés et des 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 ) Remplacez ensuite votre ancien chargeur par le chargeur ffcv à l'heure du train (à Pytorch, aucune autre modification requise!):
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 ):
... Voir ici pour un guide plus détaillé pour déployer ffcv pour votre ensemble de données.
De la grille à l'analyse comparative à l'itération de recherche rapide, il existe de nombreuses raisons de vouloir une formation de modèle plus rapide. Ci-dessous, nous présentons des bases de code pré-même pour une formation sur ImageNet et CIFAR, y compris à la fois (a) des bases de code extensibles et (b) de nombreuses configurations d'entraînement précoce.
Nous fournissons rapidement un script autonome pour la formation d'imageNet. Ci-dessus, nous traçons le temps de formation par rapport à la frontière de précision, et les vitesses de mise en œuvre de données, pour 1-GPU Resnet-18 et 8-GPU Resnet-50 aux côtés de quelques lignes de base.
| Lien vers la configuration | top_1 | top_5 | # Époques | Temps (min) | Architecture | Installation |
|---|---|---|---|---|---|---|
| Lien | 0,784 | 0,941 | 88 | 77.2 | Resnet-50 | 8 x A100 |
| Lien | 0,780 | 0,937 | 56 | 49.4 | Resnet-50 | 8 x A100 |
| Lien | 0,772 | 0,932 | 40 | 35.6 | Resnet-50 | 8 x A100 |
| Lien | 0,766 | 0,927 | 32 | 28.7 | Resnet-50 | 8 x A100 |
| Lien | 0,756 | 0,921 | 24 | 21.7 | Resnet-50 | 8 x A100 |
| Lien | 0,738 | 0,908 | 16 | 14.9 | Resnet-50 | 8 x A100 |
| Lien | 0,724 | 0,903 | 88 | 187.3 | RESNET-18 | 1 x A100 |
| Lien | 0,713 | 0,899 | 56 | 119.4 | RESNET-18 | 1 x A100 |
| Lien | 0,706 | 0,894 | 40 | 85,5 | RESNET-18 | 1 x A100 |
| Lien | 0,700 | 0,889 | 32 | 68.9 | RESNET-18 | 1 x A100 |
| Lien | 0,688 | 0,881 | 24 | 51.6 | RESNET-18 | 1 x A100 |
| Lien | 0,669 | 0,868 | 16 | 35.0 | RESNET-18 | 1 x A100 |
Formez vos propres modèles ImageNet! Vous pouvez utiliser notre script d'entraînement et nos configurations préalables pour former n'importe quel modèle vu sur les graphiques ci-dessus.
Nous incluons également le code pré-même pour une formation efficace sur le CIFAR-10 dans les examples/ répertoire, obtenant une précision TOP1 à 93% en 36 secondes sur un seul GPU A100 (sans optimisations telles que le mélange, le bac à batch Ghost, etc. qui ont le potentiel d'augmenter encore la précision). Vous pouvez trouver le script de formation ici.

Vision par ordinateur ou non, le FFCV peut aider à accélérer une formation plus rapidement dans une variété de paramètres liés aux ressources! Notre guide de performance comprend un compte rendu plus détaillé des façons dont le FFCV peut s'adapter à différents goulots d'étranglement de performance.
Plug-and-play avec tout code de formation existant : plutôt que de modifier les aspects de la formation des modèles lui-même, le FFCV se concentre sur la suppression des goulots d'étranglement de données , qui s'avèrent être un problème partout de la formation du réseau neuronal à la régression linéaire. Cela signifie que:
Consultez notre guide de démarrage, des exemples d'exemples et des exemples de code pour voir à quel point il est facile de commencer!
Traitement rapide des données sans douleur : FFCV gère automatiquement la lecture des données, la pré-fourche, la mise en cache et le transfert entre les appareils de manière extrêmement efficace, afin que les utilisateurs n'aient pas à y penser.
Traitement des données fusionné automatiquement et compilé : en utilisant des transformations FFCV pré-écrites ou en écrivant facilement des transformations personnalisées, les utilisateurs peuvent profiter des capacités de compilation et de pipelinage de FFCV, qui vont automatiquement agiter et compiler les augmentations de python simples en utilisant Numba, et les planifier de manière asynchronique pour éviter les retards de chargement.
Chargez des données rapidement à partir de RAM, SSD ou disque en réseau : FFCV expose les options conviviales qui peuvent être ajustées en fonction des ressources disponibles. Par exemple, si un ensemble de données s'intègre dans la mémoire, FFCV peut le mettre en cache au niveau du système d'exploitation et s'assurer que plusieurs processus simultanés obtiennent tous un accès rapide aux données. Sinon, FFCV peut utiliser une mise en cache rapide au niveau du processus et optimisera le chargement des données pour minimiser le nombre sous-jacent de lectures de disque. Consultez le Guide du doctorat d'étranglement pour plus d'informations.
Formation de plusieurs modèles par GPU : Grâce à un chargement de données entièrement basé sur du thread, vous pouvez désormais entrelacer la formation de plusieurs modèles sur le même GPU efficacement, sans aucune frais générale de chargement de données. Voir ce guide pour plus d'informations.
Les outils dédiés pour la gestion des images : toutes les fonctionnalités ci-dessus fonctionnent également à toutes sortes de modèles d'apprentissage automatique, mais FFCV propose également des fonctionnalités spécifiques à la vision, telles que le codage et le décodage JPEG rapides, le stockage de données de données comme des mélanges d'images brutes et compressées pour élaborer des frais généraux d'E / S et de calcul, etc.