如何解决Dask - LocalCluster 的灵活内存分配
我在使用 dask 的 LocalCluster
时遇到了一些内存问题。我在一台有 32 个 CPU 的机器上工作,但我只有 64GB 的内存可用。我正在像这样实例化集群:
cluster = LocalCluster(
n_workers=os.cpu_count(),threads_per_worker=1
)
默认情况下,Dask 为每个 worker 分配相同数量的内存(总 RAM 除以 worker 数量)。
我正在使用 dask 来计算研究批次。这些批次的内存需求不同。当我处理 32 个较小的批次时没有任何问题,因为它们适合内存。我的问题来了,当我进入更大的批次时,它无法容纳 2GB 的分配可用 RAM。然后 dask 引发内存分配错误。我已经看到我可以增加工人的超时时间,但这不是很优雅的解决方案。有没有办法告诉 dask 将计划任务保留在队列中,除非资源可用?在使用 LocalCluster
时处理队列中这些任务的正确方法是什么?
解决方法
一种选择是明确指定任务的资源要求(如果您事先知道的话),here 和 documentation 中有相关答案。
集群将使用 resources={'mem': 2000}
选项启动,然后在使用 .compute()
或 .submit()
执行任务时声明预期的资源使用,例如小任务可以指定client.submit(my_func,small_task,resources={'mem': 1000})
(这将在worker上最多执行2个任务),而大任务可以指定client.submit(my_func,large_task,resources={'mem': 2000})
(这将在worker上最多执行1个任务)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。