Visi Komputer Maju Maju : Latih Model Di sebagian kecil dari biaya dengan pemuatan data yang dipercepat!
[Install] [QuickStart] [Fitur] [DOCS] [Dukungan Slack] [Beranda] [Kertas]
Pemelihara: Guillaume Leclerc, Andrew Ilyas dan Logan Engstrom
ffcv adalah sistem pemuatan data drop-in yang secara dramatis meningkatkan throughput data dalam pelatihan model:
$YOUR_DATASET Model $REALLY_FAST (untuk $WAY_LESS )Jaga agar algoritma pelatihan Anda tetap sama, ganti saja loader data! Lihatlah speedup ini:
ffcv juga hadir dengan kode yang cepat dan sederhana untuk tolok ukur penglihatan standar:
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
Catatan Pemecahan Masalah 1: Jika perintah di atas menghasilkan kesalahan konflik paket, coba jalankan conda config --env --set channel_priority flexible di lingkungan dan menjalankan kembali perintah instalasi.
Pemecahan Masalah Catatan 2: Pada beberapa sistem (tetapi jarang), Anda harus menambahkan paket compilers ke perintah pertama di atas.
Pemecahan Masalah Catatan 3: Atas perkenan @kschuerholt, berikut adalah dockerfile yang dapat membantu instalasi bebas conda
..../opencv/build/x64/vc15/bin ke variabel lingkungan jalur..../libjpeg-turbo64/bin ke variabel lingkungan jalurpthread/include/pthread.h , dan tambahkan kode di bawah ini ke bagian atas file. # define HAVE_STRUCT_TIMESPEC..../pthread/dll ke variabel lingkungan jalurpip install ffcv Jika Anda menggunakan FFCV, silakan mengutipnya sebagai:
@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}
}
(Pastikan untuk mengganti xxxxxxx di atas dengan hash dari komit yang digunakan!)
Mempercepat sistem pembelajaran apa pun dengan ffcv . Pertama, konversi dataset Anda menjadi format ffcv ( ffcv mengonversi kedua dataset PyTorch yang diindeks dan 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 ) Kemudian ganti loader lama Anda dengan ffcv Loader pada waktu kereta api (di Pytorch, tidak ada perubahan lain yang diperlukan!):
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 ):
... Lihat di sini untuk panduan yang lebih rinci untuk menggunakan ffcv untuk dataset Anda.
Dari kisi -kisi hingga pembandingan hingga iterasi penelitian yang cepat, ada banyak alasan untuk menginginkan pelatihan model yang lebih cepat. Di bawah ini kami menyajikan basis kode premade untuk pelatihan di ImageNet dan CIFAR, termasuk (a) basis kode yang dapat diperluas dan (b) berbagai konfigurasi pelatihan premade.
Kami menyediakan skrip mandiri untuk pelatihan Imagenet dengan cepat. Di atas kami memplot waktu pelatihan versus perbatasan akurasi, dan kecepatan dataloading, untuk 1-gpu resnet-18 dan 8-gpu resnet-50 di samping beberapa garis dasar.
| Tautan ke konfigurasi | top_1 | top_5 | # Zaman | Waktu (menit) | Arsitektur | Pengaturan |
|---|---|---|---|---|---|---|
| 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 |
Latih model Imagenet Anda sendiri! Anda dapat menggunakan skrip pelatihan kami dan konfigurasi premade untuk melatih model apa pun yang terlihat pada grafik di atas.
Kami juga menyertakan kode premade untuk pelatihan yang efisien pada CIFAR-10 dalam examples/ direktori, memperoleh akurasi 93% TOP1 dalam 36 detik pada GPU A100 tunggal (tanpa optimasi seperti mixup, hantu batchnorm, dll. Yang berpotensi meningkatkan akurasi lebih jauh). Anda dapat menemukan skrip pelatihan di sini.

Visi komputer atau tidak, FFCV dapat membantu membuat pelatihan lebih cepat dalam berbagai pengaturan yang dibatasi sumber daya! Panduan Kinerja kami memiliki akun yang lebih rinci tentang cara FFCV dapat beradaptasi dengan hambatan kinerja yang berbeda.
Plug-and-Play dengan kode pelatihan yang ada : alih-alih mengubah aspek pelatihan model itu sendiri, FFCV berfokus pada menghilangkan hambatan data , yang ternyata menjadi masalah di mana-mana dari pelatihan jaringan saraf hingga regresi linier. Ini berarti bahwa:
Lihat Panduan Memulai kami, contoh walkthrough, dan contoh kode untuk melihat betapa mudahnya memulai!
Pemrosesan data cepat tanpa rasa sakit : FFCV secara otomatis menangani pembacaan data, pra-pengambilan, caching, dan transfer antar perangkat dengan cara yang sangat efisien, sehingga pengguna tidak perlu memikirkannya.
Pemrosesan data yang disebabkan dan dikompilasi secara otomatis : Dengan menggunakan transformasi FFCV pra-tertulis atau dengan mudah menulis yang kustom, pengguna dapat memanfaatkan kemampuan kompilasi dan perpipaan FFCV, yang secara otomatis akan menggabungkan dan mengkompilasi augmentasi python sederhana ke kode mesin menggunakan NUMBA, dan menjadwalkannya secara tidak sinis untuk menghindari penundaan pemuatan.
Muat data dengan cepat dari RAM, SSD, atau Disk jaringan : FFCV memaparkan opsi ramah pengguna yang dapat disesuaikan berdasarkan sumber daya yang tersedia. Misalnya, jika dataset cocok dengan memori, FFCV dapat men -cache pada level OS dan memastikan bahwa beberapa proses bersamaan semuanya mendapatkan akses data cepat. Jika tidak, FFCV dapat menggunakan caching tingkat proses cepat dan akan mengoptimalkan pemuatan data untuk meminimalkan jumlah yang mendasari pembacaan disk. Lihat Panduan Dokter Bottleneck untuk informasi lebih lanjut.
Melatih beberapa model per GPU : Berkat pemuatan data berbasis utas yang sepenuhnya asinkron, Anda sekarang dapat menginterasi pelatihan beberapa model pada GPU yang sama secara efisien, tanpa overhead pemuatan data. Lihat panduan ini untuk info lebih lanjut.
Alat khusus untuk penanganan gambar : Semua fitur di atas pekerjaan sama-sama berlaku untuk semua jenis model pembelajaran mesin, tetapi FFCV juga menawarkan beberapa fitur khusus penglihatan, seperti pengkodean dan decoding JPEG cepat, menyimpan set data, dll. Lihat Panduan Gambar untuk lebih lanjut dan terkompresi untuk menukar overhead I/O dan menghitung overhead, dll. Lihat Panduan Gambar untuk lebih lanjut.