【发布时间】:2020-02-20 00:01:41
【问题描述】:
我需要从一个大的 numpy 数组中保存一个 dask 数组。下面有一个显示该过程的最小工作示例。请注意,a 是使用 numpy.random 创建的,仅用于此 mwe,不幸的是我无法使用 dask 创建数组。
import numpy as np
import dask.array as da
from dask.distributed import Client
a = numpy.random.randint(0,2,size=4000000*8000).reshape((4000000,8000))
# here the conversion and saving
client = Client(n_workers=90, threads_per_worker=20, processes=True)
dask_array = da.from_array( a, chunks = 100000)
da.to_npy_stack(‘my-folder/’, dask_array)
client.close()
我面临的问题是内存中的a 大约需要 100GB,但是在运行 dask 部分时,使用的内存开始上升,直到它几乎填满可用的 ram,即超过 300GB。然后它做了一些计算,一段时间后(比如 10 分钟)我得到了一个内存错误。我需要由 dask 保存的数组,因为我有另一个使用 dask 数组的管道(不能直接连接到该管道)并从内存中读取 dask 数组,需要info 文件(如果有任何其他转储方法数组并创建info 文件,我打开试试看)。
关于如何加快和解决此任务的任何建议?
【问题讨论】:
-
不是用 numpy 创建数组,你可以用 dask 创建吗? > arr = da.random.randint(0,2,size=4000000*8000).reshape((4000000,8000))
-
不,很遗憾,我无法使用 dask 创建数组。 @quasiben
-
你的数据读得怎么样?
-
数据来自torch。但这超出了这个问题的范围。我也可以接受不能以这种方式使用 dask,我只是在寻找答案。谢谢@quasiben
标签: python numpy dask dask-distributed