从群集上的h5文件加载非常猪油数据时出现内存错误

问题描述 投票:0回答:1

当我尝试从hdf5文件加载非常大的数据集时,我遇到了MemoryError。我在下面附了一个简短的例子。

import dask
import dask.array as da
import h5py

from dask.distributed import Client
client = Client('tcp://10.11.69.71:44393')

handle = h5py.File('h5_file.h5', 'r')  # matrix size: (4500, 6291456)
a = da.from_array(handle['_data'], chunks='auto')  # matrix size: (6291456, 128)
st1 = da.random.random((a.shape[1], 128))

st = client.run(start)
res = da.matmul(a, st1)    
res.compute()

这将导致以下错误:

distributed.worker - WARNING -  Compute Failed
Function:  execute_task
args:      ((subgraph_callable, (<function concatenate_axes at 0x2b85d304a0d0>, [array([[ 42.,  50.,   5., ..., 168., 203., 214.],
       [129., 159.,   0., ..., 187., 153., 136.],
       [  0.,   0.,   0., ..., 228., 209., 204.],
       ...,
       [ 18.,  28.,  13., ..., 255., 227., 218.],
       [ 79.,  86.,  61., ...,  53.,  64.,  55.],
       [ 42.,  76., 106., ..., 101.,  35.,  20.]], dtype=float32), array([[ 50.,  60.,  33., ..., 169., 204., 215.],
       [ 24., 111.,   0., ..., 185., 151., 133.],
       [  0.,   0.,   0., ..., 226., 207., 202.],
       ...,
       [ 17.,  23.,  14., ..., 255., 228., 219.],
       [111., 120., 101., ...,  53.,  64.,  55.],
       [ 85.,  98.,  90., ..., 100.,  37.,  22.]], dtype=float32), array([[ 65.,  61.,  35., ..., 170., 205., 215.],
       [215., 237., 214., ..., 184., 149., 131.],
       [ 49.,  42.,  21., ..., 223., 205., 200.],
       ...,
       [ 16.,  20.,  11., ..., 255., 229., 220.],
       [ 85.,  85.,  69., ...,  53.,  64.,  54.],
       [ 6
kwargs:    {}
Exception: MemoryError()

我加载数据不正确吗?我也尝试使用结果,但无济于事。

PS我正在使用dask-mpi创建我的客户端

dask dask-distributed
1个回答
0
投票

注意,通过调用.compute,您正在要求将计算结果作为单个内存中的numpy数组返回给您。

如果输出很大,那么您可能想使用to_hdf5之类的功能将其保存到文件中。

© www.soinside.com 2019 - 2024. All rights reserved.