Har*_*ula 8 distributed-computing dask dask-distributed
我们如何在Dask分布式中为每个工作人员选择--nthreads和--nprocs?我有3个工作线程,每个工作线程有2个线程,每个内核有4个内核,每个内核有1个线程(根据每个工作线程上'lscpu'Linux命令的输出)
MRo*_*lin 11
这取决于你的工作量
默认情况下,Dask创建的单个进程的线程数与计算机上具有逻辑核心的线程数相同(由确定multiprocessing.cpu_count())。
dask-worker ... --nprocs 1 --nthreads 8 # assuming you have eight cores
dask-worker ... # this is actually the default setting
Run Code Online (Sandbox Code Playgroud)
如果您主要处理数字工作负载(例如,在Numpy,Pandas和Scikit-Learn代码中很常见),而这不受Python的全局解释器锁(GIL)的影响,那么使用很少的进程和每个进程使用多个线程是很好的。
但是,如果您花费大量的计算时间来处理诸如字符串或字典之类的纯Python对象,那么您可能希望避免GIL问题,因为要有更多的进程,每个进程具有更少的线程
dask-worker ... --nprocs 8 --nthreads 1
Run Code Online (Sandbox Code Playgroud)
根据基准测试,您可能会发现更均衡的分配效果更好
dask-worker ... --nprocs 4 --nthreads 2
Run Code Online (Sandbox Code Playgroud)
使用更多的流程可以避免GIL问题,但是由于流程间的通信会增加成本。如果您的计算需要大量的跨工作人员沟通,您将希望避免很多过程。
| 归档时间: |
|
| 查看次数: |
1384 次 |
| 最近记录: |