gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:26:38 24 4
gpt4 key购买 nike

我想使用多个进程(不是线程)进行一些预处理并将结果排入 tf.RandomShuffleQueue 队列,我的主图可以使用它进行训练。

有办法吗?

我的实际问题

我已将我的数据集转换为 TFRecords,分为 256 个分片。我想使用 multiprocessing 启动 20 个进程,并让每个进程处理一定范围的分片。每个进程都应读取图像,然后扩充它们并将它们插入 tf.RandomShuffleQueue,从中可以将输入提供给图形进行训练。

有些人建议我看一下 tensorflow 中的 inception 示例。然而,这是一种非常不同的情况,因为只有数据分片的读取是由多个线程(不是进程)完成的,而预处理(例如 - 扩充)发生在主线程中。

最佳答案

(旨在解决您的实际问题)

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

这可能是促使您希望使用 multiprocessing 的原因。

但是,对于 TF,Python 通常仅用于构建“图形”。实际执行发生在 native 代码(或 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:
# ...

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

关于python - 使用多处理从多个进程中排队 tf.RandomShuffleQueue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43889941/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com