بسرعة إلى الأمام رؤية الكمبيوتر : تدريب نماذج على جزء صغير من التكلفة مع تحميل البيانات المتسارع!
[تثبيت] [QuickStart] [الميزات] [مستندات] [دعم الركود] [الصفحة الرئيسية] [ورقة]
المشرفون: Guillaume Leclerc و Andrew Ilyas و Logan Engstrom
ffcv هو نظام تحميل البيانات المتساقط يزيد بشكل كبير من إنتاجية البيانات في تدريب النماذج:
$YOUR_DATASET model $REALLY_FAST (مقابل $WAY_LESS )حافظ على خوارزمية التدريب الخاصة بك كما هو ، فقط استبدل محمل البيانات! انظر إلى هذه السرعات:
يأتي ffcv أيضًا مع رمز سريع وبسيط لمعايير الرؤية القياسية:
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
استكشاف الأخطاء وإصلاحها الملاحظة 1: إذا كانت الأوامر المذكورة أعلاه تؤدي إلى خطأ في تعارض الحزمة ، فحاول تشغيل conda config --env --set channel_priority flexible في البيئة وإعادة تشغيل أمر التثبيت.
استكشاف الأخطاء وإصلاحها الملاحظة 2: في بعض الأنظمة (ولكن نادرًا) ، ستحتاج إلى إضافة حزمة compilers إلى الأمر الأول أعلاه.
استكشاف الأخطاء وإصلاحها الملاحظة 3: بإذن من kschuerholt ، إليك dockerfile التي قد تساعد في التثبيت الخالي من كوندا
..../opencv/build/x64/vc15/bin إلى متغير بيئة المسار..../libjpeg-turbo64/bin إلى متغير بيئة المسارpthread/include/pthread.h ، وأضف الكود أدناه إلى الجزء العلوي من الملف. # define HAVE_STRUCT_TIMESPEC..../pthread/dll إلى متغير بيئة المسارpip install ffcv إذا كنت تستخدم FFCV ، فيرجى الاستشهاد بها على النحو التالي:
@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}
}
(تأكد من استبدال xxxxxxx أعلاه مع تجزئة الالتزام المستخدم!)
تسريع أي نظام تعليمي مع ffcv . أولاً ، قم بتحويل مجموعة البيانات الخاصة بك إلى تنسيق ffcv (يقوم ffcv بتحويل كلا من مجموعات بيانات PYTORCH و 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 ) ثم استبدل اللودر القديم الخاص بك مع لوادر ffcv في وقت القطار (في Pytorch ، لا توجد تغييرات أخرى مطلوبة!):
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 ):
... انظر هنا للحصول على دليل أكثر تفصيلاً لنشر ffcv لمجموعة البيانات الخاصة بك.
من الشبكات إلى القياس إلى تكرار البحث السريع ، هناك العديد من الأسباب التي تريد التدريب النموذجي بشكل أسرع. فيما يلي نقدم أكوام الرموز الممتازة للتدريب على ImageNet و CIFAR ، بما في ذلك (A) كلا من الكود القابل للتمديد و (ب) العديد من تكوينات التدريب قبل اليدين.
نحن نقدم نصًا مستقلًا لتدريب ImageNet بسرعة. أعلاه نرسم وقت التدريب مقابل الحدود الدقة ، وسرعات التحميل dataloading ، من أجل 1-GPU Resnet-18 و 8-GPU Resnet-50 إلى جانب بعض خطوط الأساس.
| رابط للتكوين | TOP_1 | TOP_5 | # الحقبة | الوقت (دقيقة) | بنيان | يثبت |
|---|---|---|---|---|---|---|
| وصلة | 0.784 | 0.941 | 88 | 77.2 | RESNET-50 | 8 X A100 |
| وصلة | 0.780 | 0.937 | 56 | 49.4 | RESNET-50 | 8 X A100 |
| وصلة | 0.772 | 0.932 | 40 | 35.6 | RESNET-50 | 8 X A100 |
| وصلة | 0.766 | 0.927 | 32 | 28.7 | RESNET-50 | 8 X A100 |
| وصلة | 0.756 | 0.921 | 24 | 21.7 | RESNET-50 | 8 X A100 |
| وصلة | 0.738 | 0.908 | 16 | 14.9 | RESNET-50 | 8 X A100 |
| وصلة | 0.724 | 0.903 | 88 | 187.3 | RESNET-18 | 1 x A100 |
| وصلة | 0.713 | 0.899 | 56 | 119.4 | RESNET-18 | 1 x A100 |
| وصلة | 0.706 | 0.894 | 40 | 85.5 | RESNET-18 | 1 x A100 |
| وصلة | 0.700 | 0.889 | 32 | 68.9 | RESNET-18 | 1 x A100 |
| وصلة | 0.688 | 0.881 | 24 | 51.6 | RESNET-18 | 1 x A100 |
| وصلة | 0.669 | 0.868 | 16 | 35.0 | RESNET-18 | 1 x A100 |
تدريب نماذج ImageNet الخاصة بك! يمكنك استخدام البرنامج النصي التدريبي والتكوينات المسبقة لتدريب أي نموذج شوهد على الرسوم البيانية أعلاه.
ندرج أيضًا رمزًا بريمًا للتدريب الفعال على CIFAR-10 في examples/ الدليل ، حيث حصلوا على دقة تصل إلى 93 ٪ في 36 ثانية على وحدة معالجة الرسومات A100 واحدة (بدون تحسينات مثل Mixup و Ghost Batchnorm ، وما إلى ذلك ، والتي لديها القدرة على زيادة الدقة إلى أبعد من ذلك). يمكنك العثور على البرنامج النصي التدريبي هنا.

رؤية الكمبيوتر أم لا ، يمكن أن تساعد FFCV في جعل التدريب أسرع في مجموعة متنوعة من الإعدادات المقيدة للموارد! يحتوي دليل الأداء الخاص بنا على حساب أكثر تفصيلاً للطرق التي يمكن أن تتكيف بها FFCV مع اختناقات الأداء المختلفة.
التوصيل والتشغيل مع أي رمز تدريب موجود : بدلاً من تغيير جوانب التدريب النموذجية نفسها ، تركز FFCV على إزالة اختناقات البيانات ، والتي تتحول إلى مشكلة في كل مكان من التدريب على الشبكة العصبية إلى الانحدار الخطي. هذا يعني أن:
شاهد دليل البدء الخاص بنا ، ومثال على الإرشادات ، وأمثلة رمز لمعرفة مدى سهولة البدء!
معالجة البيانات السريعة بدون الألم : تعالج FFCV تلقائيًا قراءة البيانات ، والتخزين المسبق ، والتخزين المؤقت ، والنقل بين الأجهزة بطريقة بكفاءة للغاية ، بحيث لا يتعين على المستخدمين التفكير في الأمر.
معالجة البيانات التي تنصهر وتنسيقًا تلقائيًا : إما عن طريق استخدام تحولات FFCV المكتوبة مسبقًا أو كتابة مخصصات مخصصة بسهولة ، يمكن للمستخدمين الاستفادة من تجميع FFCV وقدرات الأنابيب ، والتي ستقوم تلقائيًا بدمج وتجميع تعزيزات Python البسيطة إلى رمز الماكينة باستخدام Numba ، وجدولة غير متزامنة لتجنب التحميل.
قم بتحميل البيانات بسرعة من ذاكرة الوصول العشوائي أو SSD أو القرص المتوازن الشبكي : تكشف FFCV خيارات سهلة الاستخدام يمكن تعديلها بناءً على الموارد المتاحة. على سبيل المثال ، إذا كانت مجموعة البيانات تتناسب مع الذاكرة ، فيمكن FFCV تخزينها على مستوى نظام التشغيل والتأكد من أن عمليات متزامنة متعددة جميعها تحصل على وصول سريع للبيانات. خلاف ذلك ، يمكن لـ FFCV استخدام التخزين المؤقت على مستوى العملية السريعة وسيقوم بتحسين تحميل البيانات لتقليل العدد الأساسي لقراءات القرص. انظر دليل طبيب عنق الزجاجة لمزيد من المعلومات.
تدريب نماذج متعددة لكل وحدة معالجة الرسومات : بفضل تحميل البيانات غير المتزامن بشكل كامل على مؤشرات الترابط ، يمكنك الآن تشكيل تدريب نماذج متعددة على نفس GPU بكفاءة ، دون أي حمولة تحمّل للبيانات. انظر هذا الدليل لمزيد من المعلومات.
أدوات مخصصة لمعالجة الصور : جميع الميزات أعلاه قابلة للتطبيق على حد سواء على جميع أنواع نماذج التعلم الآلي ، ولكن FFCV تقدم أيضًا بعض الميزات الخاصة بالرؤية ، مثل تشفير وفك تشفير JPEG السريع ، وتجاوز مجموعات البيانات مثل مزيج من الصور الخام والمضغوطة لمواجهة I/O الناتجة في الرأس ، وما إلى ذلك.