วิสัยทัศน์คอมพิวเตอร์ไปข้างหน้าอย่างรวดเร็ว : รุ่นรถไฟในราคาเพียงเศษเสี้ยวของค่าใช้จ่ายพร้อมการโหลดข้อมูลเร่งความเร็ว!
[ติดตั้ง] [QuickStart] [คุณสมบัติ] [เอกสาร] [สนับสนุน Slack] [HomePage] [Paper]
ผู้ดูแล: Guillaume Leclerc, Andrew Ilyas และ Logan Engstrom
ffcv เป็นระบบการโหลดข้อมูลแบบดรอปอินที่เพิ่มปริมาณข้อมูลในการฝึกอบรมแบบจำลองอย่างมาก:
$YOUR_DATASET $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 ที่อาจช่วยในการติดตั้งแบบฟรี conda
..../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 Loader ในเวลารถไฟ (ใน 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) CodeBases ที่ขยายได้และ (b) การกำหนดค่าการฝึกอบรมก่อนกำหนดจำนวนมาก
เราให้สคริปต์ที่มีอยู่ในตัวเองสำหรับการฝึกอบรม Imagenet อย่างรวดเร็ว ด้านบนเราพล็อตเวลาการฝึกอบรมกับแนวชายแดนที่แม่นยำและความเร็วในการทำงานสำหรับ 1-GPU resnet-18 และ 8-GPU resnet-50 พร้อมเส้นเขตแดน
| ลิงก์ไปยัง config | 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 GPU เดี่ยว (โดยไม่ต้องเพิ่มประสิทธิภาพเช่นการผสมผสาน, Ghost Batchnorm เป็นต้นซึ่งมีศักยภาพที่จะเพิ่มความแม่นยำยิ่งขึ้น) คุณสามารถค้นหาสคริปต์การฝึกอบรมได้ที่นี่

วิสัยทัศน์คอมพิวเตอร์หรือไม่ FFCV สามารถช่วยให้การฝึกอบรมได้เร็วขึ้นในการตั้งค่าที่มีทรัพยากรที่หลากหลาย! คู่มือประสิทธิภาพของเรามีบัญชีรายละเอียดเพิ่มเติมเกี่ยวกับวิธีการที่ FFCV สามารถปรับให้เข้ากับคอขวดที่แตกต่างกัน
ปลั๊กและเล่นด้วยรหัสการฝึกอบรมที่มีอยู่ : แทนที่จะเปลี่ยนแง่มุมของการฝึกอบรมแบบจำลองตัวเอง FFCV มุ่งเน้นไปที่การลบ คอขวดข้อมูล ซึ่งกลายเป็นปัญหาทุกที่ตั้งแต่การฝึกอบรมเครือข่ายประสาทไปจนถึงการถดถอยเชิงเส้น ซึ่งหมายความว่า:
ดูคู่มือการเริ่มต้นของเราตัวอย่างคำแนะนำและตัวอย่างรหัสเพื่อดูว่าการเริ่มต้นใช้งานง่ายแค่ไหน!
การประมวลผลข้อมูลที่รวดเร็วโดยไม่มีความเจ็บปวด : FFCV จัดการการอ่านข้อมูลโดยอัตโนมัติการดึงข้อมูลล่วงหน้าการแคชและการถ่ายโอนระหว่างอุปกรณ์อย่างมีประสิทธิภาพอย่างมากเพื่อให้ผู้ใช้ไม่ต้องคิด
การประมวลผลข้อมูลที่หลอมรวมและคอมไพล์โดยอัตโนมัติ : โดยใช้การแปลง FFCV ที่เขียนไว้ล่วงหน้าหรือเขียนแบบกำหนดเองได้อย่างง่ายดายผู้ใช้สามารถใช้ประโยชน์จากความสามารถในการรวบรวมและการวางท่อของ FFCV ซึ่งจะหลอมรวมและรวบรวมการเพิ่ม Python อย่างง่าย
โหลดข้อมูลอย่างรวดเร็วจาก RAM, SSD หรือดิสก์เครือข่าย : FFCV เปิดเผยตัวเลือกที่ใช้งานง่ายซึ่งสามารถปรับได้ตามทรัพยากรที่มีอยู่ ตัวอย่างเช่นหากชุดข้อมูลพอดีกับหน่วยความจำ FFCV สามารถแคชได้ที่ระดับ OS และตรวจสอบให้แน่ใจว่ากระบวนการที่เกิดขึ้นพร้อมกันหลายกระบวนการทั้งหมดจะได้รับการเข้าถึงข้อมูลที่รวดเร็ว มิฉะนั้น FFCV สามารถใช้การแคชระดับกระบวนการอย่างรวดเร็วและจะเพิ่มประสิทธิภาพการโหลดข้อมูลเพื่อลดจำนวนดิสก์ที่อ่าน ดูคู่มือแพทย์คอขวดสำหรับข้อมูลเพิ่มเติม
การฝึกอบรมหลายรุ่นต่อ GPU : ต้องขอบคุณการโหลดข้อมูลแบบอะซิงโครนัสอย่างเต็มที่ตอนนี้คุณสามารถเชื่อมโยงการฝึกอบรมหลายรุ่นใน GPU เดียวกันได้อย่างมีประสิทธิภาพโดยไม่ต้องใช้ค่าใช้จ่ายในการโหลดข้อมูลใด ๆ ดูคู่มือนี้สำหรับข้อมูลเพิ่มเติม
เครื่องมือเฉพาะสำหรับการจัดการภาพ : คุณสมบัติทั้งหมดด้านบนสามารถใช้งานได้อย่างเท่าเทียมกันกับรูปแบบการเรียนรู้ของเครื่องจักรทุกประเภท แต่ FFCV ยังมีคุณสมบัติเฉพาะด้านการมองเห็นเช่นการเข้ารหัสและการถอดรหัส JPEG อย่างรวดเร็ว