當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python sklearn parallel_backend用法及代碼示例


本文簡要介紹python語言中 sklearn.utils.parallel_backend 的用法。

用法:

sklearn.utils.parallel_backend(backend, n_jobs=- 1, inner_max_num_threads=None, **backend_params)

在 with 塊中更改 Parallel 使用的默認後端。

如果backend 是一個字符串,它必須與先前使用register_parallel_backend 函數注冊的實現相匹配。

默認情況下,以下後端可用:

  • ‘loky’:單主機、基於進程的並行性(默認使用),
  • ‘threading’:單主機、基於線程的並行性、
  • ‘multiprocessing’:傳統單主機、基於進程的並行性。

建議‘loky’運行操作Python對象的函數。 ‘threading’ 是一種低開銷替代方案,對於釋放全局解釋器鎖的函數來說最有效:例如對顯式釋放 GIL 的本機代碼的幾次調用中的 I/O-bound 代碼或 CPU-bound 代碼。

此外,如果安裝了 daskdistributed Python 包,則可以使用 ‘dask’ 後端更好地調度嵌套並行調用,而無需過度訂閱,並可能在由多個主機組成的網絡集群上分發並行調用。

也可以使用分布式 ‘ray’ 後端將工作負載分配到節點集群。要使用 ‘ray’ joblib 後端,請添加以下行:

>>> from ray.util.joblib import register_ray  
>>> register_ray()  
>>> with parallel_backend("ray"):  
...     print(Parallel()(delayed(neg)(i + 1) for i in range(5)))
[-1, -2, -3, -4, -5]

或者,後端可以直接作為實例傳遞。

默認情況下,將使用所有可用的工作程序 (n_jobs=-1),除非調用者為 n_jobs 參數傳遞顯式值。

這是將backend='backend_name' 參數傳遞給Parallel 類構造函數的替代方法。當調用在內部使用 joblib 但不在其自己的 API 中公開後端參數的庫代碼時,它特別有用。

>>> from operator import neg
>>> with parallel_backend('threading'):
...     print(Parallel()(delayed(neg)(i + 1) for i in range(5)))
...
[-1, -2, -3, -4, -5]

警告:此函數是實驗性的,可能會在未來版本的 joblib 中更改。

Joblib 還嘗試通過限製某些第三方庫線程池(如 OpenBLAS、MKL 或 OpenMP)中可用的線程數來限製超額訂閱。每個工作人員的默認限製設置為max(cpu_count() // effective_n_jobs, 1),但可以使用 inner_max_num_threads 參數覆蓋此限製,該參數將用於在子進程中設置此限製。

相關用法


注:本文由純淨天空篩選整理自scikit-learn.org大神的英文原創作品 sklearn.utils.parallel_backend。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。