Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 不同工作时间的DASK工人_Python_Dask_Slurm_Dask Distributed - Fatal编程技术网

Python 不同工作时间的DASK工人

Python 不同工作时间的DASK工人,python,dask,slurm,dask-distributed,Python,Dask,Slurm,Dask Distributed,我使用dask jobqueue在一个小型SLURM集群上启动许多2-5分钟的作业(使用子流程)。我总共运行了1000个工作,我希望偶尔让我的员工死去,然后重新洗牌,以善待其他用户。在dask jobqueue文档站点上有一个通道: 因此,为了快速获得一个大型集群,我们建议在一个节点上分配一个dask调度程序进程,该进程的挂墙时间(会话的预期时间)适中,然后分配许多单节点dask辅助作业,这些作业的挂墙时间较短(可能为30分钟),可以很容易地挤进作业调度程序中的额外空间。由于需要更多的计算,您可

我使用dask jobqueue在一个小型SLURM集群上启动许多2-5分钟的作业(使用子流程)。我总共运行了1000个工作,我希望偶尔让我的员工死去,然后重新洗牌,以善待其他用户。在dask jobqueue文档站点上有一个通道:

因此,为了快速获得一个大型集群,我们建议在一个节点上分配一个dask调度程序进程,该进程的挂墙时间(会话的预期时间)适中,然后分配许多单节点dask辅助作业,这些作业的挂墙时间较短(可能为30分钟),可以很容易地挤进作业调度程序中的额外空间。由于需要更多的计算,您可以添加更多这些单节点作业,或者让它们过期

这听起来很像我想做的,但我的问题是:如何配置它

如果我使用完整运行(约24小时)所需的总工作时间设置集群,我就不知道如何使用更短的工作时间启动Worker:

# setup cluster, launch one worker with 24hr walltime
In [1]:from dask_jobqueue import SLURMCluster
   ...:cluster = SLURMCluster(memory='8g',cores=4,walltime='24:00:00')
   ...:cluster.start_workers(1)
Out[1]:SLURMCluster(cores=0, memory=0 B, workers=0/1, jobs=0/1)

# try to launch a worker with shorter walltime???
In [2]:cluster.start_workers(100,walltime='00:30:00')
TypeError                                 Traceback (most recent call last)
<ipython-input-16-77ae6b0ed75d> in <module>
----> 1 cluster.start_workers(100,walltime='00:30:00')

TypeError: start_workers() got an unexpected keyword argument 'walltime'
#设置集群,启动一名24小时工作时间的工人
在[1]中:从dask_作业队列导入SLURMCluster
…:cluster=slurmcuster(内存='8g',内核=4,walltime='24:00:00')
…:群集。启动\u工作程序(1)
Out[1]:SLURMCluster(内核=0,内存=0b,工作线程=0/1,作业=0/1)
#试着启动一个工作时间更短的工人???
在[2]中:集群。启动工人(100,walltime='00:30:00')
TypeError回溯(最近一次调用上次)
在里面
---->1个集群。启动工人(100,walltime='00:30:00')
TypeError:start\u workers()获得意外的关键字参数“walltime”
如果我试着从30分钟开始,所有工人同时死亡(通常)并导致DASK崩溃

我发现有一种情况是,额外的争论被传递给了单个工人,但这些都是资源,它们是在启动工人之后传递的(当时我假设walltime限制已经设置好了)


是否有任何方法可以在初始化每个工作时为其分配walltime之类的属性?

此处指定的walltime是为工作人员而不是调度程序指定的

SLURMCluster(memory='8g',cores=4,walltime='24:00:00')
无论您在哪里运行
SLURMCluster
对象,调度程序都会运行(如果您没有提到它,那么它可能在交互节点上?)

你是对的,如果你在同一时间启动所有工人,他们将在同一时间死亡。如果你想让更多的工人来代替他们,你可以考虑使用<代码>适应> /代码>方法来确保新的工人来代替他们。

cluster.adapt(minimum=100, maximum=100)

我现在明白了。是的,我正在集群登录节点上运行的脚本中初始化SLURMCluster,因此没有时间限制。我正在尝试
cluster.adapt
方法,它似乎正在工作。我想我最初是在所有工作人员死亡后出现超时问题的,因为我没有做任何事情来重新启动它们。还有一个后续问题:如果我在
sbatch
中启动托管
SLURMCluster()
的python脚本(而不仅仅是在head节点上),我似乎无法让工作人员生成。我需要如何配置托管调度器的节点?目前我正在使用
sbatch-N1-N1-c1 script.py
。您需要确保您的作业也可以启动SLURM作业。您应该询问您的群集管理员。我认为
cluster.adapt
当前在添加更多因walltime过期而终止的工作线程时遇到问题,但正在解决。