【发布时间】:2021-06-27 00:29:04
【问题描述】:
我正在尝试使用多处理运行 tensorflow 推理。每个进程使用 1 个 GPU。我有一个文件列表 input_files[]。每个进程获取一个文件,在其上运行 model.predict 并将结果写入文件。要继续下一个文件,我需要关闭进程并重新启动它。这是因为 tensorflow 不会释放内存。所以如果我使用相同的进程,我会得到内存泄漏。
我在下面编写了一个有效的代码。我启动 5 个进程,关闭它们并启动另一个 5。问题是所有进程都需要等待最慢的进程才能继续。如何独立于其他进程启动和关闭每个进程?
请注意,Pool.map 位于 input_files_small 而不是 input_files。
file1 --> start new process --> run prediction --> close process --> file2 --> start new process --> etc.
for i in range(0, len(input_files), num_process):
input_files_small = input_files[i:i+num_process]
try:
process_pool = multiprocessing.Pool(processes=num_process, initializer=init_worker, initargs=(gpu_ids))
pool_output = process_pool.map(worker_fn, input_files_small)
finally:
process_pool.close()
process_pool.join()
【问题讨论】:
-
在创建
pool时使用mastasksperchild参数,而不是自己尝试...
标签: python tensorflow asynchronous multiprocessing