首页 > 解决方案 > 为什么设置“export OPENBLAS_NUM_THREADS=1”会影响性能?

问题描述

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

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

标签: pythonmultithreadingtensorflowreinforcement-learningopenblas

解决方案


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

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


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


推荐阅读