che*_*mer 5 multithreading multiprocessing windows-10 keras python-3.6
在fit_generator()的文档(文档:https ://keras.io/models/sequential/#fit_generator )中,它说参数use_multiprocessing接受一个布尔值,如果将其设置为True,则该布尔值允许基于进程的线程。
它还说,参数worker是一个整数,它指定如果使用基于进程的线程处理,要启动多少个进程。显然,它默认为1(基于单个进程的线程),如果设置为0,它将在主线程上执行生成器。
我的意思是,如果use_multiprocessing = True且workers> 0(以6为例),它将启动6个独立运行生成器的进程。但是,当我对此进行测试时,我认为我一定会误会某些东西(请参阅下文)。
我感到困惑的原因是,如果我将use_multiprocessing设置为False并且worker = 1,那么在我的任务管理器中,我可以看到我的所有12个虚拟内核都被平均地利用,并且在训练模型时我的CPU使用率约为50% (作为参考,我有一个i6-8750H CPU,它具有6个支持虚拟化的内核,并且在BIOS中启用了虚拟化)。如果增加工人数量,CPU使用率将达到100%,培训速度将大大提高。如果我将工作程序的数量减少到0以便它在主线程上运行,我可以看到我的所有虚拟内核仍在使用中,但是似乎有些不平衡,CPU使用率约为36%。
不幸的是,如果我将multiprocessing设置为True,那么我将得到一个坏管道错误。我尚未解决此问题,但我想更好地了解我要在此处解决的问题。
如果有人可以解释use_multiprocessing = True和use_multiprocessing = False进行训练之间的区别,以及当worker = 0、1和> 1时的区别,我将不胜感激。如果有关系,我将tensorflow(gpu版本)作为IPython控制台在Spyder中使用python 3.6的keras后端。
我的怀疑是,当True时use_multiprocessing实际上启用了多处理,而当use_multiprocessing = False时worker> 1设置了线程数,但这只是一个猜测。
Dan*_*ler 14
我唯一知道的是当use_multiprocessing=False和 时workers > 1,有许多并行数据加载线程(我不太擅长这些名称、线程、进程等)。但是有五个并行前端将数据加载到队列中(因此,加载数据更快,但不会影响模型的速度 - 当数据加载时间过长时这可能很好)。
每当我尝试时use_multiprocessing=True,一切都被冻结了。
| 归档时间: |
|
| 查看次数: |
4952 次 |
| 最近记录: |