我正在使用循环读取许多(比如 1k)CERN ROOT 文件并将一些数据存储到嵌套的 NumPy 数组中。循环的使用使其成为串行任务,每个文件都需要相当长的时间才能完成该过程。由于我正在研究深度学习模型,因此我必须创建一个足够大的数据集——但读取时间本身需要很长时间(读取 835 个事件大约需要 21 分钟)。谁能建议是否可以使用多个 GPU 来读取数据,以便读取所需的时间更少?如果是这样,怎么做?
添加更多细节:我将程序推送到 GitHub,以便可以看到(如果不允许发布 GitHub 链接,请告诉我,在这种情况下,我将在此处发布相关部分):
https://github.com/Kolahal/SupervisedCounting/blob/master/read_n_train.py
我将程序运行为:
python read_n_train.py <input-file-list>
其中参数是一个文本文件,其中包含带有地址的文件列表。我在read_data_into_list()
函数的循环中打开 ROOT 文件。但正如我所提到的,这个串行任务非常耗时。不仅如此,我注意到随着我们读取越来越多的数据,读取速度越来越差。
同时我尝试使用 slurmpy 包https://github.com/brentp/slurmpy 有了这个,我可以将作业分配到例如 N 个工作节点。在这种情况下,单个读取程序将读取分配给它的文件并返回相应的列表。只是最后,我需要添加列表。我想不出办法来做到这一点。
非常感谢任何帮助。
问候, 科拉哈尔