715просмотров
3 августа 2025 г.
question📷 ФотоScore: 787
Как понять, что «тормозит» DataLoader? Недавно был задан классный вопрос: "Может ли малая утилизация CPU означать проблемы с DataLoader?"
Утверждать нельзя, потому что в DataLoader: 1. Утилизируют CPU только аугментации и декодинг файла.
Это, пожалуй, единственная вычислительная нагрузка в нем, и ее может не хватать для создания существенной утилизации.
Декодинг файла - актуально для медиа-данных, хранящихся в сжатом виде. 2. Загрузка файлов - I/O-bound, т.к. представляет из себя ожидание получения очередного блока с сети/диска. Поэтому и около нулевая утилизация CPU. Смотреть надо на метрики диска (если чтение локально) или сети (если чтение с общего хранилища). А для того, чтобы проверить, тормозит ли DataLoader, cравните скорость обучения в трёх вариантах:
1. Бейзлайн: ваш исходный код.
2. Минус аугментации: отключите/упростите тяжёлые трансформации.
3. Синтетика чтения: как в п.2, но данные не читаются с диска/сети — генерируйте случайные тензоры той же формы 4. Синтетика декодирования для image/video/voice: как в п.3, только генерируйте содержимое файла до декодирования. Интерпретация:
1. Ускорение 1→2 — «тяжёлые» аугментации, оптимизируем их.
2. Ускорение 2→3 — бутылочное горлышко в доступе к данным.
3. Ускорение 4→3 — тормозит декодирование файлов.
4. Ускорения нигде нет — DataLoader вас не тормозит; ищите проблемы в самом тренировочном цикле. Накидайте реакций/конфигов и сделаю замеры по разным сетапам даталоадеров. @deploy_ml