gpt4 book ai didi

multithreading - 关于 Keras fit_generator() 中的多处理和工作人员与 spyder 中的 Windows 10 的混淆

转载 作者:行者123 更新时间:2023-12-04 06:43:54 25 4
gpt4 key购买 nike

在 fit_generator() 的文档(文档:https://keras.io/models/sequential/#fit_generator)中,它说参数 use_multiprocessing 接受一个 bool 值,如果设置为 True 则允许基于进程的线程。

它还说参数 worker 是一个整数,它指定在使用基于进程的线程时要启动多少进程。显然它默认为 1(基于单进程的线程),如果设置为 0,它将在主线程上执行生成器。

我认为这意味着如果 use_multiprocessing=True 和 workers > 0(让我们以 6 为例),它将启动 6 个独立运行生成器的进程。但是,当我测试这个时,我想我一定是误解了一些东西(见下文)。

我的困惑源于这样一个事实:如果我将 use_multiprocessing 设置为 False 并且 workers = 1 那么在我的任务管理器中,我可以看到我的所有 12 个虚拟核心都在某种程度上被均匀地利用,并且在训练我的模型时我的 CPU 使用率约为 50% (作为引用,我有一个支持虚拟化的 6 核 i7-8750H CPU,并且我在 BIOS 中启用了虚拟化)。如果我增加工作人员的数量,CPU 使用率将达到 100%,并且训练速度要快得多。如果我将 worker 数量减少到 0 使其在主线程上运行,我可以看到我的所有虚拟核心仍在使用中,但似乎有些不平衡,CPU 使用率约为 36%。

不幸的是,如果我设置了 multiprocessing = True,那么我会收到一个brokenpipe 错误。我还没有解决这个问题,但我想更好地了解我在这里要解决的问题。

如果有人可以解释使用 use_multiprocessing = True 和 use_multiprocessing = False 进行训练之间的区别,以及当 worker = 0、1 和 >1 时,我将不胜感激。如果重要的话,我使用 tensorflow(gpu 版本)作为 keras 的后端,在带有 IPython 控制台的 Spyder 中使用 python 3.6。

我的怀疑是 use_multiprocessing 实际上是在 True 时启用多处理,而在 use_multiprocessing=False 时 worker > 1 正在设置线程数,但这只是一个猜测。

最佳答案

我唯一知道的是,当 use_multiprocessing=Falseworkers > 1 ,有很多并行数据加载线程(我不太擅长这些名称、线程、进程等)。但是有五个并行前端将数据加载到队列中(因此,加载数据更快,但不会影响模型的速度 - 当数据加载时间过长时这可能很好)。

每当我尝试 use_multiprocessing=True ,一切都被卡住了。

关于multithreading - 关于 Keras fit_generator() 中的多处理和工作人员与 spyder 中的 Windows 10 的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54620551/

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