为什么设置“export OPENBLAS_NUM_THREADS=1”会损害性能?

May*_*ybe 4 python multithreading reinforcement-learning openblas tensorflow

我尝试按照本文档的建议设置“export OPENBLAS_NUM_THREADS=1” 。但我发现一个奇怪的现象,设置这个会显着损害我的 RL 算法的性能(我对 TD3 和 SAC 做了一些测试,所有结果一致表明“导出 OPENBLAS_NUM_THREADS=1”会损害性能)。为什么会造成这么大的问题呢?

顺便说一句,算法是使用 Tensorflow1.13 实现的,数据通过tf.data.Dataset输入神经网络。所有测试均在OpenAI Gym 的BipedalWalker-v2环境中完成。

iva*_*eev 5

链接的指南建议在使用时专门设置此变量ray,但并非总是如此。

AFAICS,这是因为该框架本身会产生许多进程(每个参与者一个进程或其他进程),因此每个进程使用多个线程不会带来加速。当只有一个或只有几个进程时,情况并非如此。


一般来说,OpenBLAS FAQ说 OpenBLAS 的多线程可能与主程序的多线程“冲突”,并建议OPENBLAS_NUM_THREADS=1在这种情况下进行设置。然而,常见问题解答条目未能提供任何详细信息来验证其声明,因此它很可能已过时!根据https://github.com/obspy/obspy/wiki/Notes-on-Parallel-Processing-with-Python-and-ObsPy,这种“冲突”的症状是猖獗的死锁和段错误。因此,如果您没有任何此类情况,那么您就没有问题。主要的 Python 库非常负责地自行处理此类问题,而不是将其转嫁给用户,因此我非常确定 OpenBLAS 是否有任何使用限制,numpy并且scipy如果您通过它们使用 OpenBLAS,则可以在内部自动强制执行它们。