首页 > 后端开发 > Python教程 > 为什么我的 Joblib Workers 在导入 NumPy 后卡在一个核心上?

为什么我的 Joblib Workers 在导入 NumPy 后卡在一个核心上?

Susan Sarandon
发布: 2024-10-29 19:43:29
原创
853 人浏览过

Why Are My Joblib Workers Stuck on One Core After Importing NumPy?

多处理核心亲和性问题

在某些情况下,导入 NumPy 库并尝试使用 joblib 模块并行化 CPU 密集型循环时,可以观察到分配给循环的工作进程都局限于单个核心,从而阻碍了性能提升。

这个问题是由于 NumPy 和底层 OpenBLAS 库之间的交互而产生的,这些库经常被使用用于多线程操作。默认情况下,这些库可能会干扰核心亲和性设置,导致所有工作进程被分配到同一核心。

解决方案:重置任务亲和性

简单的方法解决方案是在导入受影响的模块后使用 os.system() 函数重置任务关联性。通过执行命令 os.system("taskset -p 0xff %d" % os.getpid()),核心亲和力被重置,允许工作进程分布在所有可用核心上。

禁用 OpenBLAS CPU 关联性重置

或者,可以在运行时或构建时禁用 OpenBLAS 的 CPU 关联性重置行为。在运行时,将环境变量 OPENBLAS_MAIN_FREE 设置为 1 可防止库调整核心关联性。或者,在 OpenBLAS 编译过程中,将 NO_AFFINITY=1 添加到 Makefile.rule 会永久禁用此行为。

以上是为什么我的 Joblib Workers 在导入 NumPy 后卡在一个核心上?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板