问题标签 [dask-delayed]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
142 浏览

concatenation - MODIS(MYD06_L2) 使用 xarray 和 dask 连接文件

我尝试使用xarray (xr.open_mfdataset).

我可以打开一个文件,也可以打开一些文件,但我无法打开许多文件或一天文件,因为它们具有不同的尺寸。

M06_2040是文件的目录

我最终得到以下错误:

ValueError:沿维度“Cell_Along_Swath_1km:mod06”没有标签的参数无法对齐,因为它们具有不同的维度大小:{2040、2030}

0 投票
1 回答
614 浏览

python - 将图像加载到 Dask Dataframe

我有一个 dask 数据框,其中包含列中的图像路径(称为 img_paths)。我想要在接下来的步骤中使用这些图像路径将图像加载到另一列(称为img_loaded)中,然后应用一些预处理功能。

但是,在加载(或图像读取)过程中,我总是得到不同的结果,包括一次延迟包装 imread 函数,另一次正确加载图像(我可以看到数组)和其余时间:FileNotFoundError.

除了以下示例之外,我还使用了map_partitions函数,但除了没有数组之外,我也得到了类似的输出。最后,我想使用map_partitions函数而不是apply函数。

以下是我的代码和有关问题的描述:

第一次尝试:使用 lambda 函数并将延迟imread应用于每个单元格

在这里,我得到的是imread使用该compute()方法时对延迟函数的包装。我不懂为什么?以下是输出:

在此处输入图像描述

第二次尝试:不使用 lambda 函数

这已经奏效了!至少,我可以将加载的图像视为数组。但是,我真的不明白为什么?为什么这与第一个解决方案不同(即使用 lambda 函数)以下是输出:

在此处输入图像描述

第三次尝试:使用/不使用 lambda 函数和不使用延迟imread

在这里,再次只是为了实验,我没有使用延迟imread函数,而是简单地使用skimage.io.imread函数。而且,我尝试过使用和不使用 lambda 函数。在每一次,我得到了FileNotFoundError。我没有得到这个。为什么使用非延迟读取功能时找不到图像路径(尽管它们是正确的)?

除了罗纳德的回答,如何使用 map_partitions 功能:

0 投票
0 回答
1656 浏览

python - dask 和 dask.distributed 之间的巨大内存使用差异

我试图用来dask.delayed计算一个大矩阵以供以后计算使用。我只在一台本地机器上运行代码。当我使用dask单机调度程序时,它工作正常,但有点慢。要访问更多选项和性能监视器以改进我想dask.distributed在单台机器上使用的代码。然而,用dask.distributed客户端运行相同的代码会慢慢耗尽所有可用内存并崩溃而没有任何结果。

是否有不同的设置问题的方法可以让dask.distributed客户端以更好的内存效率完成?

  • 我通读了 dask.delayed最佳实践指南,认为我们使用它是正确的。
  • 我在本地 Win 10 PC (64GB RAM) 和 Azure Win Server 2012 VM (256 GB) 上运行它,结果相同。
  • 我试过手动设置块。
  • 我曾尝试使用优化块大小,包括按行和列自动分块(行块在调度程序stack.rechunk中似乎运行得更快)。dask
  • 我试过使用compute()and persist()(同样的结果)。
  • 我尝试dask.distributed使用线程和进程调度程序启动客户端并调整工作人员的数量。threads在死亡之前更快地使用更多的 RAM。
  • 我已尝试根据此答案dask.distributed设置内存限制,但内存限制被忽略。cluster = distributed.LocalCluster(memory_limit = 8e9)
  • 如果我减小问题的大小(nXnY以下),dask.distributed客户端确实完成了任务,但是它仍然需要比dask调度程序更多的时间和内存。

这个例子重现了这个问题:

实际上,我的问题要大得多,并且calcRow本身就是一个庞大、缓慢、复杂的计算,但形状和矩阵构建步骤是相同的​​。

我了解最佳做法是scatter在调用之前将数据放入内存compute,但我没有分散的功能,只有一个delayed数组。

如果我注释掉 2dask.distributed条客户端行,上面的示例使用最多 0.25 GB 的 RAM 在 60 秒内运行。但是有了这些行,代码会在 3-4 分钟内爬升到完全使用内存 (64GB) 并继续运行,直到系统变得不稳定。

如果我在其中构建矩阵,dask则可以启动一个dask.distributed客户端,并在以后的dask.distributed计算中使用该矩阵,没有问题。它只是建立导致问题的矩阵。

我几乎觉得这是一个错误,但不能确定我的代码不是罪魁祸首。我真的很重视可能可以使代码运行或证明错误的建议。

编辑1: 我还尝试将装饰器应用于calcRow

并使用:

但这似乎是相同的?

编辑2: 如果我开始distributed.client使用processes=False它会更快地消耗所有系统内存,但实际上会提供以下警告,这可能是诊断性的:

Distributed.worker - 警告 - 内存使用率很高,但工作人员没有数据要存储到磁盘。也许其他一些进程正在泄漏内存?进程内存:40.27 GB -- Worker 内存限制:8.00 GB

0 投票
0 回答
102 浏览

python - 如何使用 dask 将大量列数据写入 excel 文件的列?

我需要一种方法将包含特定列数据的列表放入 excel 但出现内存错误如何使用 dask 完成此任务,我的系统只有 8 GB 内存。

我正在从一个巨大的 .dat 文件(包含文本,就像带有行和列的表一样)创建一个 excel 文件,大约(2 GB 或更多)从 .dat 文件中提取几列我知道行号(从结构文件)我需要提取的列并创建了一个列表来列出这些数据。

我将从结构化文件中提取单元格值以获取用作列的行号

我想获得没有内存错误的excel文件。

0 投票
1 回答
38 浏览

dask - 如何从 HighLevelGraph 转换为常规 dask dict

我有一些代码,例如:

我想得到结果 dask 图:

但相反,我得到HighLevelGraph如下:

我的问题是:有没有办法轻松地将 HighLevelGraph 字典转换为常规字典?

注意:实际键和可调用对象替换为较短的等效项。

谢谢!

0 投票
1 回答
650 浏览

python-3.x - Dask map_blocks - IndexError:元组索引超出范围

我想用 Dask 做以下事情:

  1. 从 HDF5 文件加载矩阵
  2. 并行计算每个条目

这是我的代码:

但是代码会抛出以下错误:

我四处搜索并尝试了 dask 的 gu_func,但这引发了同样的错误。

谢谢你的帮助。

0 投票
1 回答
168 浏览

pandas - Dask分布式显然没有在任务完成时释放内存

我正在尝试在分布式系统上执行自定义 dask 图,问题是它似乎没有释放已完成任务的内存。难道我做错了什么?

我尝试过更改进程数并使用本地集群,但似乎没有什么不同。

由于任务是相互独立的(或者至少是那些消耗最多内存的任务),所以当每个任务完成时,应该释放它的内存。

0 投票
1 回答
395 浏览

class - 为什么有时我必须在 dask 延迟函数上调用 compute() 两次?

我正在使用 dask 延迟函数,并且熟悉@dask.delayed在函数上使用装饰器时的注意事项。我意识到有时我需要调用compute()两次才能获得结果,尽管我认为我遵循了最佳实践。即不要在另一个延迟延迟函数中调用延迟延迟函数。

我在两种情况下遇到了这个问题:当有嵌套函数时,以及在使用延迟对象的类成员的类中调用成员函数时。

在第一个示例中,x.compute()不返回结果而是另一个延迟对象,我将不得不调用x.compute().compute()以获取实际结果。但我相信 inc 不是延迟函数,因此它不违反不在另一个延迟函数中调用延迟函数的规则?

在第二个示例中,我将不得不再次调用add.calc().compute().compute()以获得实际结果。在这种情况下self.a,andself.b只是延迟属性,并且在任何地方都没有嵌套的延迟函数。

谁能帮我理解为什么compute()在这两种情况下我需要打两次电话?或者更好的是,有人可以在使用 dask 延迟函数时简要解释一般“规则”吗?我阅读了文档,在那里找不到太多内容。

更新:@malbert 指出这些示例需要调用compute()两次,因为延迟函数涉及延迟结果,因此它算作“在另一个延迟函数中调用延迟函数”。但是为什么像下面这样的事情只需要调用compute()一次呢?

在这个例子中,ab也是延迟的结果,它们用于延迟函数。我的随机猜测实际上重要的是延迟结果在延迟函数中的位置?只有当它们作为参数传入时才可能很好?

0 投票
1 回答
193 浏览

python - dask.delayed 和 import 语句

我正在学习 dask,我想生成随机字符串。但这仅在 import 语句位于函数内部f时才有效。

这有效:

这会打印出类似['myvDi', 'rZnYO', 'MyzaG']. 这很好,因为字符串是随机的。

但是,这不起作用:

这会打印出类似['tySQP', 'tySQP', 'tySQP']的内容,这很糟糕,因为所有随机字符串都是相同的。

所以我很好奇我将如何分发大型非平凡代码。我的目标是能够将任意 json 传递给一个dask.delayed函数,并让该函数使用其他模块(如 google 的ortools. 有什么建议么?

0 投票
1 回答
726 浏览

python-3.x - 计算存储在数据框中的延迟对象

我正在寻找计算dask delayed存储在数据框中的许多对象的最佳方法。我不确定是否pandas应该将数据框转换为其中dask包含delayed对象的数据框,或者是否compute应该对数据框的所有值调用调用pandas

一般来说,我会很感激任何建议,因为我在delayed通过嵌套的 for 循环传递对象的逻辑上遇到了麻烦。

compute如果不对所有单元格应用该函数,我就无法调用这个数据框:(enr_df.applymap(compute)我相信它会compute单独调用每个值)。

但是,如果我转换为dask数据框,delayed我想要计算的对象将在dask数据框结构中分层:

而且我期望的计算输出不会继续。