Python “为什么要设置?”;导出OPENBLAS_NUM_THREADS=1“;影响表演?

Python “为什么要设置?”;导出OPENBLAS_NUM_THREADS=1“;影响表演?,python,multithreading,tensorflow,reinforcement-learning,openblas,Python,Multithreading,Tensorflow,Reinforcement Learning,Openblas,我尝试按照建议设置“export OPENBLAS_NUM_THREADS=1”。但我发现了一个奇怪的现象,设置此选项会显著降低我的RL算法的性能(我对TD3和SAC进行了一些测试,所有结果都一致表明“export OPENBLAS_NUM_THREADS=1”会降低性能)。这为什么会造成这么大的问题 顺便说一句,这些算法是用Tensorflow1.13实现的,数据通过网络输入神经网络。所有测试都是在OpenAI健身房的环境中进行的。链接指南建议在使用ray时特别设置此变量,但并不总是这样 AF

我尝试按照建议设置“export OPENBLAS_NUM_THREADS=1”。但我发现了一个奇怪的现象,设置此选项会显著降低我的RL算法的性能(我对TD3和SAC进行了一些测试,所有结果都一致表明“export OPENBLAS_NUM_THREADS=1”会降低性能)。这为什么会造成这么大的问题


顺便说一句,这些算法是用Tensorflow1.13实现的,数据通过网络输入神经网络。所有测试都是在OpenAI健身房的环境中进行的。

链接指南建议在使用
ray
时特别设置此变量,但并不总是这样

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



总的来说,他说OpenBLAS的多线程可能与主程序的多线程“冲突”,并建议在这种情况下设置
OpenBLAS\u NUM\u THREADS=1
。然而,FAQ条目没有提供任何详细信息来验证其声明,因此它很可能已经过时了!据报道,这种“冲突”的症状是猖獗的僵局和断层。因此,如果你没有这样的东西,你是清白的。主要的Python库自己负责处理此类问题,而不是将它们推给用户,因此我非常确定,如果OpenBLAS有任何使用限制,
numpy
scipy
如果通过它们使用OpenBLAS,则在内部和自动执行它们。

链接指南建议在使用
ray
时特别设置此变量,但不总是这样

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



总的来说,他说OpenBLAS的多线程可能与主程序的多线程“冲突”,并建议在这种情况下设置
OpenBLAS\u NUM\u THREADS=1
。然而,FAQ条目没有提供任何详细信息来验证其声明,因此它很可能已经过时了!据报道,这种“冲突”的症状是猖獗的僵局和断层。因此,如果你没有这样的东西,你是清白的。主要的Python库自己负责处理此类问题,而不是将它们推给用户,因此我非常确定,如果OpenBLAS有任何使用限制,
numpy
scipy
如果您通过它们使用OpenBLAS,则在内部和自动执行它们。

感谢您的回答,很抱歉响应太晚。我知道他们设置它的原因,但我不明白为什么设置它会影响RL算法的最终性能。我以为这只会影响训练速度。这与我在一个单独的线程中进行网络更新有关吗?@SherwinChen OpenBLAS利用多个线程来提高其性能(您可能知道,许多线性代数操作都是令人尴尬的并行操作)。如果禁用此功能,它将降级为单线程性能。感谢更新。根据您的更新,您是否建议我们不再需要设置
OPENBLAS_NUM_THREADS=1
?顺便说一句,我不太确定我们是否同意“性能”的定义。当我设置
OPENBLAS_NUM_THREADS=1
时,超过100集的平均分数在收敛点从250到300不等。当我没有设置这个时,平均分数在300分是相当稳定的。我不明白为什么简单地设置
OPENBLAS\u NUM\u THREADS=1
就会产生如此大的影响。@shervinchen这在你的问题中是不言而喻的!你说如果设置它会“损害性能”,但没有说如果没有设置它会“导致崩溃”或任何事情。那么你为什么要设置它呢?)嗨,我已经更新了我以前的回复。我之所以设置它,是因为我想使用
ray
实现算法的分布式版本。根据文件,我设置了它。然后我发现了这个令人困惑的现象。谢谢你的回答,也很抱歉反应太晚。我知道他们设置它的原因,但我不明白为什么设置它会影响RL算法的最终性能。我以为这只会影响训练速度。这与我在一个单独的线程中进行网络更新有关吗?@SherwinChen OpenBLAS利用多个线程来提高其性能(您可能知道,许多线性代数操作都是令人尴尬的并行操作)。如果禁用此功能,它将降级为单线程性能。感谢更新。根据您的更新,您是否建议我们不再需要设置
OPENBLAS_NUM_THREADS=1
?顺便说一句,我不太确定我们是否同意“性能”的定义。当我设置
OPENBLAS_NUM_THREADS=1
时,超过100集的平均分数在收敛点从250到300不等。当我没有设置这个时,平均分数在300分是相当稳定的。我不明白为什么简单地设置
OPENBLAS\u NUM\u THREADS=1
就会产生如此大的影响。@shervinchen这在你的问题中是不言而喻的!你说如果设置它会“损害性能”,但没有说如果没有设置它会“导致崩溃”或任何事情。那么你为什么要设置它呢?)嗨,我已经更新了我以前的回复。我之所以设置它,是因为我想使用
ray
实现算法的分布式版本。根据文件,我设置了它。然后我发现了这个令人困惑的现象。