Schnelles Vorwärtscomputer Vision : Zugmodelle zu einem Bruchteil der Kosten mit beschleunigter Datenbelastung!
[Install] [QuickStart] [Features] [DOCS] [Support Slack] [Homepage] [Papier]
Betreuer: Guillaume Leclerc, Andrew Ilyas und Logan Engstrom
ffcv ist ein Drop-In-Datenladesystem, das den Datendurchsatz im Modelltraining dramatisch erhöht:
$YOUR_DATASET -Modell $REALLY_FAST (für $WAY_LESS )Halten Sie Ihren Trainingsalgorithmus gleich, ersetzen Sie einfach den Datenlader! Schauen Sie sich diese Beschleunigungen an:
ffcv wird außerdem mit einem schnellen, einfachen Code für Standard -Vision -Benchmarks vorgepasiert:
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
Fehlerbehebung Hinweis 1: Wenn die obigen Befehle zu einem Paketkonfliktfehler führen, versuchen Sie, conda config --env --set channel_priority flexible in der Umgebung auszuführen und den Befehl Installation erneut zu überlegen.
Fehlerbehebung Note 2: Auf einigen Systemen (aber selten) müssen Sie das compilers -Paket zum ersten Befehl oben hinzufügen.
Fehlerbehebung Note 3: Mit freundlicher Genehmigung von @kschuerholt
..../opencv/build/x64/vc15/bin zu Pfadumgebungsvariable..../libjpeg-turbo64/bin to Path-Umgebungsvariablepthread/include/pthread.h und fügen Sie den folgenden Code oben in der Datei hinzu. # define HAVE_STRUCT_TIMESPEC..../pthread/dll to path Environment Variablepip install ffcv Wenn Sie FFCV verwenden, zitieren Sie es bitte als:
@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}
}
(Stellen Sie sicher, dass Sie XXXXXXXX durch den Hash des verwendeten Commits ersetzen!)
Beschleunigen Sie jedes Lernsystem mit ffcv . Konvertieren Sie zunächst Ihren Datensatz in das ffcv -Format ( ffcv konvertiert sowohl indizierte Pytorch -Datensätze als auch 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 ) Ersetzen Sie dann Ihren alten Lader durch den ffcv -Lader zur Zugzeit (in Pytorch, keine weiteren Änderungen erforderlich!):
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 ):
... Eine detailliertere Anleitung zum Bereitstellen von ffcv für Ihren Datensatz finden Sie in einer detaillierteren Anleitung.
Vom Gitter über Benchmarking bis hin zur schnellen Forschungs -Iteration gibt es viele Gründe, schnelleres Modelltraining zu wollen. Im Folgenden präsentieren wir vorgefertigte Codebasen für das Training für ImagEnet und CIFAR, einschließlich (a) erweiterbare Codebasen und (b) zahlreiche vorgefertigte Trainingskonfigurationen.
Wir bieten ein in sich geschlossenes Skript für das Training imagnet schnell. Oben zeichnen wir die Trainingszeit gegenüber der Genauigkeitsgrenze und die DataLoading-Geschwindigkeit für 1-GPU-Resnet-18- und 8-GPU-RESNET-50 neben einigen Basislinien.
| Link zur Konfiguration | top_1 | TOP_5 | # Epochen | Zeit (mins) | Architektur | Aufstellen |
|---|---|---|---|---|---|---|
| Link | 0,784 | 0,941 | 88 | 77,2 | Resnet-50 | 8 x A100 |
| Link | 0,780 | 0,937 | 56 | 49,4 | Resnet-50 | 8 x A100 |
| Link | 0,772 | 0,932 | 40 | 35.6 | Resnet-50 | 8 x A100 |
| Link | 0,766 | 0,927 | 32 | 28.7 | Resnet-50 | 8 x A100 |
| Link | 0,756 | 0,921 | 24 | 21.7 | Resnet-50 | 8 x A100 |
| Link | 0,738 | 0,908 | 16 | 14.9 | Resnet-50 | 8 x A100 |
| Link | 0,724 | 0,903 | 88 | 187.3 | Resnet-18 | 1 x A100 |
| Link | 0,713 | 0,899 | 56 | 119.4 | Resnet-18 | 1 x A100 |
| Link | 0,706 | 0,894 | 40 | 85,5 | Resnet-18 | 1 x A100 |
| Link | 0,700 | 0,889 | 32 | 68,9 | Resnet-18 | 1 x A100 |
| Link | 0,688 | 0,881 | 24 | 51.6 | Resnet-18 | 1 x A100 |
| Link | 0,669 | 0,868 | 16 | 35.0 | Resnet-18 | 1 x A100 |
Trainieren Sie Ihre eigenen ImageNet -Modelle! Sie können unsere Schulungsskript- und vorgefertigten Konfigurationen verwenden, um alle in den oben genannten Grafiken angezeigten Modell zu trainieren.
Wir haben auch vor dem vorgefertigten Code für ein effizientes Training auf CIFAR-10 in examples/ Verzeichnissen in 36 Sekunden in einer einzigen A100-GPU eine Genauigkeit von 93% (ohne Optimierungen wie Mischung, Ghost-Batchnorm usw. erhalten, die das Potenzial haben, die Genauigkeit noch weiter zu erhöhen). Hier finden Sie das Trainingsskript.

Computer Vision oder nicht, FFCV kann dazu beitragen, das Training in einer Vielzahl von ressourcenbeschränkten Einstellungen schneller zu machen! Unser Performance -Leitfaden enthält eine detailliertere Darstellung der Art und Weise, wie sich FFCV an verschiedene Performance -Engpässe anpassen kann.
Plug-and-Play mit einem vorhandenen Trainingscode : Anstatt Aspekte des Modelltrainings selbst zu ändern, konzentriert sich FFCV auf die Entfernung von Daten Engpässen , die sich überall von neuronalem Netzwerk-Training bis zur linearen Regression als Problem herausstellen. Das bedeutet, dass:
Sehen Sie sich unser Anleitung für den ersten Mal, Beispiele für Beispiele und Code -Beispiele an, um zu sehen, wie einfach es ist, loszulegen!
Schnelle Datenverarbeitung ohne Schmerzen : FFCV behandelt automatisch das Lesen, Vorbereiten, Caching und Übertragung von Daten, so dass die Benutzer nicht darüber nachdenken müssen.
Automatisch verschmolze und kompilierte Datenverarbeitung : Durch die Verwendung vor geschriebener FFCV-Transformationen oder durch einfache Schreiben von benutzerdefinierten FFCV-Kompilierungs- und Pipelining-Fähigkeiten können die Fähigkeiten von FFCV automatisch verschmolzen und einfache Python-Augmentationen mit NUMBA zusammenstellen und sie asynchron erstellen, um das Laden von Delays zu vermeiden.
Laden Sie Daten schnell von RAM, SSD oder vernetzter Festplatte : FFCV enthält benutzerfreundliche Optionen, die anhand der verfügbaren Ressourcen angepasst werden können. Wenn ein Datensatz beispielsweise in den Speicher passt, kann FFCV ihn auf Betriebssystemebene zwischenspeichern und sicherstellen, dass mehrere gleichzeitige Prozesse alle schnellen Datenzugriff erhalten. Andernfalls kann FFCV schnelle Abschnitt auf Prozessebene verwenden und die Datenbelastung optimieren, um die zugrunde liegende Anzahl von Festplattenlesungen zu minimieren. Weitere Informationen finden Sie im Engpass -Leitfaden für den Engpass.
Schulung mehrerer Modelle pro GPU : Dank des vollständig asynchronen Thread-basierten Datenladens können Sie jetzt mehrere Modelle auf derselben GPU effizient einbinden, ohne dass ein Datenladungsaufwand. Weitere Informationen finden Sie in diesem Handbuch.
Dedizierte Tools für die Bildhandhabung : Alle Funktionen der oben genannten Arbeiten sind gleichermaßen für alle Arten von maschinellen Lernmodellen anwendbar, aber FFCV bietet auch einige sehspezifische Funktionen wie ein schnelles JPEG-Codieren und -decodieren, Speichern von Datensätzen als Mischungen aus Roh- und Komprimierungsbildern, um I/O-Overhead zu vertiefen.