当Dask以单机和集群的形式在短暂的环境中运行时,如何为Dask选择适当数量的线程、工作线程和进程
我们公司目前正在利用数据工作流(ELT、报告生成、ML等)。我们刚刚开始添加执行并行任务的能力,这是由。我们的流是使用临时容器执行的,临时容器将使用Dask LocalCluster,并将一定数量的工作线程和进程传递到LocalCluster对象中 我们在达斯克的旅程将非常像这样:当Dask以单机和集群的形式在短暂的环境中运行时,如何为Dask选择适当数量的线程、工作线程和进程,dask,dask-distributed,aws-fargate,dask-kubernetes,Dask,Dask Distributed,Aws Fargate,Dask Kubernetes,我们公司目前正在利用数据工作流(ELT、报告生成、ML等)。我们刚刚开始添加执行并行任务的能力,这是由。我们的流是使用临时容器执行的,临时容器将使用Dask LocalCluster,并将一定数量的工作线程和进程传递到LocalCluster对象中 我们在达斯克的旅程将非常像这样: 继续使用单机LocalCluster,直到超出允许的最大cpu/内存 当我们超出单个容器时,在初始容器(la)上生成额外的工作容器,并将它们加入LocalCluster 我们目前从拥有256个cpu(.25个vCPU
RENEWAL_TABLES = [
'Activity',
'CurrentPolicyTermStaus',
'PolicyRenewalStatus',
'PolicyTerm',
'PolicyTermStatus',
'EndorsementPolicyTerm',
'PolicyLifeState'
]
RENEWAL_TABLES_PAIRS = [
(i, 1433 + idx) for idx, i in enumerate(RENEWAL_TABLES)
]
@task(state_handlers=[HANDLER])
def dummy_step():
LOGGER.info('Dummy Step...')
sleep(15)
@task(state_handlers=[HANDLER])
def test_map(table):
LOGGER.info('table: {}...'.format(table))
sleep(15)
with Flow(Path(__file__).stem, SCHEDULE, state_handlers=[HANDLER]) as flow:
first_step = dummy_step()
test_map.map(RENEWAL_TABLES_PAIRS).set_dependencies(upstream_tasks=[first_step])
我看到一次执行的任务不超过3个
我真的很想了解如何最好地配置n_worker(单机)、线程和进程,因为我们将单机的大小扩展到添加远程worker。我知道这取决于我的工作负载,但您可以在单个流程中看到一个任务从数据库提取到csv,另一个任务运行一个计算。我在网上看到过这样的情况,它似乎应该是threads=文档中请求的cpu数量,但似乎您仍然可以在Fargate中用不到一个cpu实现并行
任何反馈都将不胜感激,并有助于其他希望以更短暂的方式利用Dask的人
考虑到vCPU的Fargate从.25->.50->1->2->4递增,我认为使用1个工人到1个vCPU设置是安全的。然而,考虑到Fargate vcpu分配是如何工作的,了解如何为每个工作线程数选择一个好的上限会很有帮助。Hi@braunk!谢谢你的提问。不幸的是,这个问题可能过于宽泛,无法在这里回答。堆栈溢出对于诸如“这个关键字意味着什么?”之类的特定问题非常有用,但对于“这是我的情况,我应该做什么”之类的问题就没那么好了。不幸的是,我不确定今天是否有一个很好的资源给你。我鼓励你尝试将你的情况分解成更小的问题,这些问题也更有可能对其他人有用。基于我提交本文以来对线程与进程的研究,我觉得我们对如何前进有了很好的想法。谢谢你的反馈,我会确保下一个问题更加具体。感谢您和所有Dask贡献者创造了如此伟大的团队合作。继续做伟大的工作。