Почему настройка "export OPENBLAS_NUM_THREADS = 1" может снизить производительность? - PullRequest
0 голосов
/ 13 мая 2019

Я пытаюсь установить "экспорт OPENBLAS_NUM_THREADS = 1", как этот документ предлагает.Но я обнаружил странное явление, что установка этого параметра значительно ухудшает производительность моих алгоритмов RL (я провел несколько тестов для TD3 и SAC, все результаты последовательно указывают на то, что «export OPENBLAS_NUM_THREADS = 1» ухудшает производительность).Почему это вызывает такую ​​большую проблему?

Кстати, алгоритмы реализованы с использованием Tensorflow1.13, данные передаются в нейронную сеть через tf.data.Dataset .все тесты проводятся в среде BipedalWalker-v2 из OpenAI's Gym.

1 Ответ

2 голосов
/ 13 мая 2019

В связанном руководстве предлагается устанавливать эту переменную специально при использовании ray, а не всегда.

AFAICS, это потому, что сам фреймворк порождает много процессов (по одному на каждого актера или что-то в этом роде), поэтому каждый из них, использующий несколько потоков, не принесет ускорения. Это не тот случай, когда есть только один или несколько процессов.


В общем примечании FAQ по OpenBLAS говорит, что многопоточность OpenBLAS может "конфликтовать" с многопоточностью основной программы, и рекомендует в этом случае установить OPENBLAS_NUM_THREADS=1. Однако в разделе часто задаваемых вопросов не содержится каких-либо подробностей, подтверждающих его претензию, поэтому вполне может быть устаревшим! Согласно https://github.com/obspy/obspy/wiki/Notes-on-Parallel-Processing-with-Python-and-ObsPy, симптомам такого «конфликта» являются безудержные тупики и ошибки. Так что, если у вас нет ничего подобного, вы в чистоте. Основные библиотеки Python сами несут ответственность за решение этой проблемы, а не за дампирование их для пользователя, поэтому я вполне уверен, что если в OpenBLAS есть какие-либо ограничения на использование, numpy и scipy применяют их внутренне и автоматически, если вы используете OpenBLAS через них.

...