Обучение CNN превышает количество данных ядер в PBS - PullRequest
0 голосов
/ 19 ноября 2018

Я использую CNN с именем darknet / YOLO для глубокого изучения удаленного общего кластера с графическими картами NVIDIA. Удаленный кластер - это Linux с системой планирования заданий PBS.

Я отправляю задание на обучение нейронной сети на графическом процессоре, который хорошо работает.

Проблема в огромном количестве потребляемых процессоров во время обучения. Я обычно отправляю работу с 8 процессорами, как это

qsub -q gpu select=1:ncpus=8:ngpus=1:mem=15gb:gpu_cap=cuda61

но он всегда убит из-за превышения числа процессоров. Даже если я увеличу число до 20, оно все равно будет превышено.

Я не знаю, почему darknet использует так много процессоров на сервере, даже если я могу запустить задание на своем ноутбуке с процессором Intel i5 (который работает медленно и неэффективно).

Что я пробовал:

1) Установите cgroups=cpuacct, что заставляет задание НЕ использовать больше процессоров, чем назначено, но это не сработало вообще. Кажется, что ограничение работает на тот случай, если на сервере нет ресурсов для других. Если имеются свободные процессоры, ограничение не работает (https://drill.apache.org/docs/configuring-cgroups-to-control-cpu-usage/#cpu-limits)

2) Установите place=excelhost, который не убивает задание в случае превышения назначенных ресурсов. С другой стороны, чтобы начать работу с этим флагом, требуется около 7 дней, и мне приходится каждый день тренировать сеть.

Вопрос:

Мне не нужны эти процессоры, и я не понимаю, почему даркнет использует их так много. Как я могу заставить работу НЕ превышать заданное количество процессоров? Или какая-то другая идея, как я могу решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Фактически причина, по которой нейронная сеть darknet использует так много потоков в общем кластере, заключается в том, что darknet не даже считает, что она может быть запущена в общем кластере.

Как вы можете видетьв исходном коде darknet - src/detector.c, строка 111 ( Link ), darknet использует 64 потока для подготовки ввода для обучения и расчетов.Если у вас нет 64 ядер, он будет использовать как можно больше.

Чтобы уменьшить количество потоков, замените количество потоков в следующих строках.Для меня подходят 8 нитей.

  • detector.c 111, 393, 602
  • classifier.c 91

Кредиты Поддержка метацентрума .

0 голосов
/ 20 ноября 2018

Скорее всего, это несоответствие между установленными администратором ограничениями для этой очереди и вашим запросом. Так что пинг вашего администратора и получить подробную информацию об очередях. (например, queue1 ppm, gpu's)

...