Я пытаюсь обработать входные данные параллельно, чтобы их можно было загрузить в набор данных Pytorch. Однако, когда он достигает ~ 20 000 точек данных или около того, параллельные процессы сбоя, утверждая, что не может выделить больше общей памяти. Когда я смотрю на/dev/shm , он создан о ~ 80 000 файлов, которые не были очищены. Я решил это в прошлом, просто используя многопоточную чткость вместо многопроцессы, но параллелизация угнетается с помощью многопоточного чтения (я предполагаю, что Гил горе). Данные и запуск нового объекта Pool для каждой куски, а также Del возвращаемое значение после того, как оно было добавлено в полный список, но все же количество файлов в/dev/shm Накапливает и приводит к сбою программы. Вот не взорванная версия моего кода: < /p>
import torch
#I have to use file_system because the number of file descriptors exceeds OS limits
torch.multiprocessing.set_sharing_strategy("file_system")
from glob import glob
def processData(fname):
#Tensor magic goes here, a list of tensors is created from the file at fname and returned
if __name__ == "__main__":
datadir = "/path/to/dir"
processedData = []
#I hope to eventually use this with CUDA tensors, but for now I'm having issues with CPU
torch.multiprocessing.set_start_method("spawn")
p = torch.multiprocessing.Pool(8)
for result in p.imap_unordered(processData, glob(datadir+"*.txt")):
processedData += result
p.close()
p.join()
< /code>
Я не уверен, почему он в первую очередь создает так много общей памяти, поскольку единственное, что передается между процессами, - это возвращаемый список тензоров. Любые идеи о том, как я могу либо сигнализировать на Pytorch, можно мусор, собирать общую память, либо предотвратить использование Pytorch в первую очередь?>
Подробнее здесь: https://stackoverflow.com/questions/775 ... to-manuall