【发布时间】:2021-04-05 15:36:55
【问题描述】:
我有一些计算从 python 调用 pardiso() 求解器。求解器以对 python 不透明的方式分配自己的内存,但用于访问该内存的指针存储在 python 中。如果我尝试使用 dask.delayed 运行这些计算,有没有办法告诉 dask 计算的预期内存消耗,以便它可以适当地安排它们?
【问题讨论】:
-
能否请您提供mcve?
我有一些计算从 python 调用 pardiso() 求解器。求解器以对 python 不透明的方式分配自己的内存,但用于访问该内存的指针存储在 python 中。如果我尝试使用 dask.delayed 运行这些计算,有没有办法告诉 dask 计算的预期内存消耗,以便它可以适当地安排它们?
【问题讨论】:
对于 dask 应该遵守某些约束的情况,至少有两种解决方案:resources 参数和 Semaphore。
对于资源,工作流程是为每个工作人员分配一些资源(在启动工作人员时通过 cli 或在 LocalCluster 或其他类型的集群中使用 resources kwarg)。然后,代码将指定在.compute 或.map/.submit 时每个任务使用了多少此资源。
Semaphore 的工作流程是在创建信号量时指定可能的租约数量(请注意,与资源不同,这是一个整数,因此在某种意义上不太灵活)(请参阅docs)。然后,每当访问昂贵的资源时,都应将其包装在 with sem 上下文管理器中。
【讨论】: