可以在AWS FSx Lustre上使用numpy内存映射文件吗?

2024-10-16 20:40:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个很大的S3数据集,由大约1M+个文件组成,每个文件大小为5-6MB,我尝试将其导入AWS FSx以获得Lustre。所有文件都是Numpy数组文件(.npy文件),我有一个程序,可以将每个Numpy数组作为内存映射文件读取,这样它就只能将每个数组的特定段从磁盘加载到内存中

当我们使用常规EBS卷和本地实例存储NVME SSD(如某些EC2实例类型中提供的)时,这种方法可以很好地工作。但是,当切换到使用AWS FSx Lustre时,FSx始终加载并传输整个NumPy阵列文件,而不仅仅是应用程序通过内存映射提取的片段,这从监控文件系统的吞吐量指标中可以看出

因此,我想问一下,类似NFS的Lustre是否支持通过内存映射从文件系统中只加载特定文件段的用例。例如,我可以通过在Python中执行以下操作来加载带有内存映射的NumPy数组文件:

import numpy as np
mmapped_arr = np.load("<path to a .npy file>", mmap_mode="r")
segment = mmapped_arr[0:15]
segment = np.array(segment)

在上面代码片段的最后一行中,当使用EBS和本地实例存储时,只有切片的段从磁盘加载到内存中。但在使用FSX时,整个阵列都是从磁盘加载的,不必要地消耗了文件系统的吞吐量

我不确定这是否是使用带有内存映射文件的网络文件系统的限制,所以我想在这里问一下。提前谢谢你


Tags: 文件实例内存numpyawsnpsegment数组