我正在尝试使用Dask本地集群来管理系统范围的内存使用,
from dask.distributed import Client, LocalCluster
cluster = LocalCluster(scheduler_port=5272, dashboard_address=5273,memory_limit='4GB')
I connect with:
client = Client('tcp://127.0.0.1:5272')
我有8核和32 GB。本地集群将4GB * 4 = 16GB内存分配到本地集群(我有另一个任务需要大约10GB内存)。然而,以前有一些任务我可以不调用client = Client('tcp://127.0.0.1:5272')
完成。我调用client = Client('tcp://127.0.0.1:5272')
后,内存错误触发。在这种情况下我能做什么?谢谢!
我在想,如果这是因为每个工人只分配4GB内存…但是如果我分配memory_limit='16GB'。如果它使用了所有的资源,它将占用64GB。我没有那么多的记忆。我能做什么?
不清楚你想要实现什么,但你对内存的观察是正确的。如果工作人员受到内存的限制,那么他们将无法完成任务。有什么办法解决这个问题?
-
访问更多的资源,如果你没有访问额外的硬件,那么你可以检查线圈。IO或查看各种任务云选项
-
优化你的代码,也许一些计算可以在更小的块中完成,数据可以被压缩(例如分类dtype)或有其他机会减少内存需求(实际上取决于函数,但让我们说一些内部计算可以用更少的资源以更小的精度完成)
-
使用非分布式代码的所有可用资源(这会增加一些资源需求的开销)。