Перенесемся в компьютерное зрение .
[Установить] [QuickStart] [функции] [DOCS] [поддержка Slack] [HomePage] [Paper]
Содействия: Гийом Леклерк, Эндрю Ильюс и Логан Энгстрем
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: Предоставлено @kshuerholt, вот Dockerfile, который может помочь при установке без conda
..../opencv/build/x64/vc15/bin to path..../libjpeg-turbo64/bin to pathpthread/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, включая (а) расширяемые кодовые базы и (б) многочисленные готовые конфигурации обучения.
Мы предоставляем автономный сценарий для быстрого обучения 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% TOP1 за 36 секунд на одном графическом процессоре A100 (без оптимизации, таких как микшер, призрачный парк и т. Д., Которые могут еще больше повысить точность). Вы можете найти тренировочный скрипт здесь.

Компьютерное зрение или нет, FFCV может помочь быстрее сделать обучение в различных условиях, ограниченных ресурсами! Наше руководство по производительности имеет более подробный отчет о том, как FFCV может адаптироваться к различным узким месту производительности.
Подключить и играть с любым существующим кодом обучения : вместо того, чтобы менять аспекты самого обучения модели, FFCV фокусируется на удалении узких мест данных , что оказалось проблемой везде от обучения нейронной сети до линейной регрессии. Это означает, что:
Смотрите наше руководство по началу работы, примеры прохождения и примеры кода, чтобы увидеть, как легко начать!
Быстрая обработка данных без боли : FFCV автоматически обрабатывает чтение данных, предварительное выявление, кэширование и передачу между устройствами чрезвычайно эффективно, чтобы пользователям не приходилось думать об этом.
Автоматически сплавленная и скомпилированная обработка данных : либо используя предварительно написанные преобразования FFCV, либо легко записывая пользовательские, пользователи могут воспользоваться преимуществами компиляции FFCV и способностей к трубопроводу, которые будут автоматически объединяться и составлять простые дополнения к питону в машинный код, используя NUMBA, и планируют их асинхронно, чтобы избежать задержек.
Загрузите данные быстро с оперативной памяти, SSD или сетевого диска : FFCV раскрывает удобные для пользователя параметры, которые можно скорректировать на основе доступных ресурсов. Например, если набор данных вписывается в память, FFCV может кэшировать его на уровне ОС и гарантировать, что все несколько параллельных процессов получают быстрый доступ к данным. В противном случае FFCV может использовать быстрое кэширование уровня процесса и оптимизировать загрузку данных, чтобы минимизировать основное количество чтения диска. См. Руководство по доктору узкого места для получения дополнительной информации.
Обучение нескольких моделей на GPU : благодаря полной асинхронной загрузке данных на основе потоков вы можете эффективно переоценить несколько моделей на одном и том же графическом процессоре, без каких-либо накладных расходов. Смотрите это руководство для получения дополнительной информации.
Выделенные инструменты для обработки изображений : все вышеупомянутые функции в равной степени применимы к всевозможным моделям машинного обучения, но FFCV также предлагает некоторые специфические для зрения функции, такие как быстрое кодирование и декодирование JPEG, хранение наборов данных в качестве смеси необработанных и сжатых изображений для обмена накладными вводами и выборами накладных расходов и т. Д. Следите за работой с изображениями для получения дополнительной информации.