Загрузка данных PyTorch «зависает» при выполнении нескольких заданий на экземпляре GCP.
У меня проблема при запуске нескольких заданий python3.7 на одном компьютере (одно задание на графический процессор). Это задания по машинному обучению, включающие загрузку данных PyTorch для большого набора данных (>1000 ГБ).
Имея только одну работу, обучение проходит хорошо, если я использую
pin_memory=True
опция Dataloader, партии предоставляются вовремя, загрузка графического процессора высокая. Использую 8 рабочих. Если, основной процесс немного ждет загрузки данных для некоторых пакетов, но это не так уж плохо.
Однако, если я начинаю вторую работу, загрузка данных «зависает» для каждого 8-го пакета (у меня 8 рабочих) на одну минуту, резко замедляя обучение. Я рассчитал время для функций и, и время остается коротким и постоянным для этих функций. Следовательно, это не проблема пропускной способности диска, ввода-вывода или обработки. Во время «зависаний» я обнаружил, что во всех рабочих процессах загрузки данных преобладают потоки ядра (все процессоры отображаются красным цветом на htop). Превращение
pin_memory=False
не решает проблему.
Так что, если это не из
__getitem__
ни
collate
функции, куда тратится все это время? Что происходит после того, как одна партия была обработана рабочим, и до того, как ее можно будет использовать в основном процессе? Не могли бы вы порекомендовать какие-нибудь инструменты мониторинга, чтобы выяснить, откуда взялась проблема?
Я работаю на виртуальной машине GCP linux, и мои данные хранятся на SSD-диске.
Спасибо за вашу помощь.