批处理和批处理U中的批处理大小是什么意思

2024-04-25 07:42:52 发布

您现在位置:Python中文网/ 问答频道 /正文

从这里的文档https://pythonhosted.org/joblib/parallel.html#parallel-reference-documentation 我不清楚batch_size和{}到底是什么意思。在

让我们考虑一下使用'multiprocessing'后端、2个作业(2个进程)并且需要计算10个任务的情况。在

据我所知:

batch_size-一次控制pickle任务的数量,因此如果设置batch_size = 5-joblib将pickle并立即向每个进程发送5个任务,到达那里后,它们将按进程顺序逐个解决。使用batch_size=1时,joblib将一次pickle并发送一个任务,当且仅当该进程完成上一个任务时。在

为了表达我的意思:

def solve_one_task(task):
    # Solves one task at a time
    ....
    return result

def solve_list(list_of_tasks):
    # Solves batch of tasks sequentially
    return [solve_one_task(task) for task in list_of_tasks]

所以这个代码:

^{pr2}$

等于此代码(性能):

slices = [(0,5)(5,10)]
Parallel(n_jobs=2, backend = 'multiprocessing', batch_size=1)(
        delayed(solve_list)(tasks[slice[0]:slice[1]]) for slice in slices)

我说得对吗?那么pre_dispatch是什么意思呢?在


Tags: oftasksize进程paralleldefbatchslice
1条回答
网友
1楼 · 发布于 2024-04-25 07:42:52

事实证明,我是对的,两段代码在性能上非常相似,因此batch_size的工作方式与我所预期的一致。pre_dispatch(如文档状态)控制任务队列中实例化任务的数量。在

from sklearn.externals.joblib import Parallel, delayed
from time import sleep, time

def solve_one_task(task):
    # Solves one task at a time
    print("%d. Task #%d is being solved"%(time(), task))
    sleep(5)
    return task

def task_gen(max_task):
    current_task = 0
    while current_task < max_task:
        print("%d. Task #%d was dispatched"%(time(), current_task))
        yield current_task
        current_task += 1

Parallel(n_jobs=2, backend = 'multiprocessing', batch_size=1, pre_dispatch=3)(
        delayed(solve_one_task)(task) for task in task_gen(10))

输出:

^{pr2}$

相关问题 更多 >