我们如何在kubernetes上通过头盔运行的dask分布式中的每个工作者选择--nthreads和--nprocs?

时间:2019-11-06 02:12:56

标签: kubernetes google-kubernetes-engine dask dask-distributed

我在Dask上运行一些I / O密集型Python代码,并希望增加每个工作线程的线程数。我已经部署了一个Kubernetes集群,该集群运行通过helm分发的Dask。我从worker deployment template中看到,工作线程的数量设置为CPU数量,但是我想将线程数量设置得更高,除非这是一种反模式。我怎么做?

this similar question看来,我可以使用dash调度程序并使用dask-worker来启动工作人员了吗?但是理想情况下,我将能够通过掌舵来配置工作人员资源,这样我就不必与调度程序进行交互,只需要通过Client向其提交作业即可。

3 个答案:

答案 0 :(得分:1)

Kubernetes资源限制和请求应与为dask-worker命令提供的--memory-limit和--nthreads参数匹配。有关更多信息,请访问链接1(最佳实践在Dask的官方文档中描述)和2

答案 1 :(得分:0)

Python中的线程处理是一项谨慎的工作,并且实际上取决于您的代码。为了简单起见,-nprocs应该几乎应为1,如果要更多进程,请启动更多副本。对于线程计数,首先要记住,GIL意味着一次只能运行一个线程。因此,您只能在两个主要情况下获得并发收益:1)一些线程在I / O上被阻塞,如等待从数据库或Web API收到回音,或者2)一些线程在NumPy或好友中运行非GIL绑定的C代码。对于第二种情况,您仍然无法获得比CPU数量更多的并发性,因为这只是一次要运行多少个插槽,但是在某些情况下,第一种情况可以比CPU受益更多的线程。

答案 2 :(得分:0)

Dask的掌舵图表有一个局限性,不允许在图表中设置--nthreads。我与Dask小组确认了这一点,并提出了一个问题:https://github.com/helm/charts/issues/18708

同时,使用Dask Kubernetes进行更高程度的定制。