当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。