Как работает параметр «количество рабочих» в загрузчике данных PyTorch? - PullRequest
0 голосов
/ 01 января 2019

1- Если num_workers равно 2, значит ли это, что он поместит 2 пакета в ОЗУ и отправит 1 из них в графический процессор или он поместит 3 пакета в ОЗУ, а затем отправит 1 из них в графический процессор?
2- Что на самом деле происходит, когда число рабочих превышает количество ядер ЦП?Я попробовал это, и оно работало нормально, но как это работает? (Я думал, что максимальное количество рабочих, которое я могу выбрать, - это количество ядер)
3 - Если я установил num_workers на 3 и во время обучения былинет пакетов в памяти для GPU, основной процесс ждет, пока его рабочие прочитают пакеты, или он читает одну партию (не ожидая рабочих)?

1 Ответ

0 голосов
/ 02 января 2019
  1. Когда num_workers>0, только эти работники будут получать данные, основной процесс не будет.Таким образом, когда num_workers=2 у вас есть максимум 2 рабочих, одновременно помещающих данные в ОЗУ, а не 3.
  2. Ну, наш ЦП обычно может работать как 100 процессов без проблем, и эти рабочие процессы в любом случае не являются особенными, поэтомубольше работников, чем процессорных ядер - это нормально.Но эффективно ли это?это зависит от того, насколько заняты ваши ядра процессора для других задач, скорости процессора, скорости вашего жесткого диска и т. д. Короче говоря, это сложно, поэтому установка рабочих на число ядер - это хорошее правило, ничего более.
  3. Неа.Помните, что DataLoader не просто случайным образом возвращается из того, что доступно в ОЗУ прямо сейчас, а использует batch_sampler, чтобы решить, какой пакет следует вернуть следующим.Каждый пакет назначается работнику, и основной процесс будет ожидать, пока назначенный работник не получит желаемый пакет.

Наконец, чтобы уточнить, задача DataLoader не отправлять что-либо напрямуюдля GPU, вы явно вызываете cuda() для этого или изменяете Dataset __getitem__() метод.

...