#python #parallel-processing #multiprocessing #slurm
#python #параллельная обработка #многопроцессорная обработка #slurm
Вопрос:
Я относительно новичок в многопроцессорной обработке с помощью python, и здесь я хочу использовать многопроцессорную обработку, чтобы ускорить некоторые вычисления. Я в основном пытаюсь просто использовать multiprocessing.Pool()
для группировки некоторых процессов вместе, а затем использовать Pool.starmap()
, потому что написанная мной рабочая функция требует нескольких аргументов. Вот важная часть моего скрипта, которая выводит ошибку:
def worker(return_shape, det, l1, l2, iterate):
calculation = np.zeros(return_shape)
for combo in iterate:
calculation[combo[0], combo[1], combo[2]] = np.histogram2d(l1[:, det, combo[1]], l2[:, combo[0], combo[2]], [np.arange(-0.5, 2, 1), np.arange(-0.5, 2, 1)])[0]
return calculation
# these will be populated with data
covListP = np.zeros((int(1e5), 48, 50))
covListN = np.zeros((int(1e5), 48, 50))
combinations = [(i, j, k) for i, j, k in itertools.product(range(48), range(50),range(50))]
args = [((48, 50, 50, 2, 2), job, list1, list2, combinations) for job in range(cpu_count)]
pool = multiprocessing.Pool(processes=cpu_count)
worker_out = pool.starmap(worker, args)
Сообщение об ошибке, которое я получаю, выглядит следующим образом:
File "corrOptions.py", line 109, in <module>
fameCorr.fameCorr(FOLDER, CHUNK_SIZE, PATH, BN, BP, SYSNAME, SYSTYPE, ERG_THRESHOLD, TIME_UP_THRESHOLD, KINCUT_MODE, KINCUT_MIN, KINCUT_MAX, ADVANCED_MODES)
File "/eoins/fame/corrFAME/fameCorr_v4.py", line 214, in fameCorr
worker_out = pool.starmap(worker, args)
File "/sw/arcts/centos7/python3.7-anaconda/2020.02/lib/python3.7/multiprocessing/pool.py", line 276, in starmap
return self._map_async(func, iterable, starmapstar, chunksize).get()
File "/sw/arcts/centos7/python3.7-anaconda/2020.02/lib/python3.7/multiprocessing/pool.py", line 657, in get
raise self._value
File "/sw/arcts/centos7/python3.7-anaconda/2020.02/lib/python3.7/multiprocessing/pool.py", line 431, in _handle_tasks
put(task)
File "/sw/arcts/centos7/python3.7-anaconda/2020.02/lib/python3.7/multiprocessing/connection.py", line 206, in send
self._send_bytes(_ForkingPickler.dumps(obj))
File "/sw/arcts/centos7/python3.7-anaconda/2020.02/lib/python3.7/multiprocessing/connection.py", line 393, in _send_bytes
header = struct.pack("!i", n)
struct.error: 'i' format requires -2147483648 <= number <= 2147483647
Я погуглил это сообщение об ошибке, и кажется, что это как-то связано с ограничениями памяти в python для разных операционных систем, что может быть немного выше моего понимания. Я также запускаю этот код в вычислительном кластере SLURM, поэтому я не уверен, как действительно получить информацию об операционной системе. В целом, сможет ли кто-нибудь пролить некоторый свет на это сообщение об ошибке или направить меня куда-нибудь, где я мог бы найти решение?