首頁 > 後端開發 > 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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板