使用多处理从多个进程中排队tf.RandomShuffleQueue

Ujj*_*wal 5 python multiprocessing tensorflow

我想使用多个进程(not threads)进行一些预处理并将结果排入tf.RandomShuffleQueue,我的主图可以使用它来进行训练.

有没有办法做到这一点 ?

我的实际问题

我已将我的数据集转换为分割为256个分片的TFRecords.我想开始使用20个进程multiprocessing,让每个进程处理一系列分片.每个过程都应该读取图像,然后对它们进行扩充并将它们推入一个tf.RandomShuffleQueue可以将输入提供给图形进行训练的图像.

有人建议我通过这个inception例子tensorflow.但是,这是一种非常不同的情况,因为只有数据分片的读取是由多个线程(not processes)完成的,而预处理(例如 - 扩充)是在主线程中进行的.

Max*_*axB 1

这旨在解决您的实际问题

在另一个主题中,有人告诉您Python具有全局解释器锁(GIL),因此多核不会带来速度优势,除非您使用多个进程。

这可能是促使您想要使用multiprocessing.

然而,对于 TF,Python 通常仅用于构建“图”。实际执行发生在本机代码(或 GPU)中,GIL 在其中不起任何作用。

鉴于此,我建议干脆让 TF 使用多线程。这可以使用intra_op_parallelism_threads参数来控制,例如:

with tf.Session(graph=graph, 
    config=tf.ConfigProto(allow_soft_placement=True, 
    intra_op_parallelism_threads=20)) as sess:
    # ...
Run Code Online (Sandbox Code Playgroud)

(旁注:如果您有一个 2-CPU、32 核的系统,最好的论据很可能是intra_op_parallelism_threads=16,这取决于很多因素)