python - 当工人数量增加并且 numpy 生成一个大数组时,Keras 使用的 CPU 更少
问题描述
我的代码使用了相对广泛的增强策略,但我注意到 CPU 利用率N
在fit_generator(...workers=N)
增加时不成比例。我有一个 4 核 CPU。
- 当
N=1
,htop
显示大约 105% 的使用率 - 当
N=2
,htop
显示大约 202% 的使用率 - 当
N=3
,htop
显示大约 287% 的使用率 - 当
N=4
,htop
显示大约 342% 的使用率
GPU 使用率始终低于 40%。
如果我削减增强策略以省略噪声添加,我可以在N=4
. 噪音是由
x += numpy.random.normal(0, noise_sigma, x.shape) / 255.0
其中x
是 640x480 BGR 输入图像。这是一个缓慢的调用,平均每次调用大约 24.3 毫秒,但是 CPU 不应该在什么时候继续工作N=4
吗?为什么 numpy 在生成大量随机数时似乎会阻塞其他线程?
解决方案
normal
来电cont2_array*
https://github.com/numpy/numpy/blob/master/numpy/random/mtrand/mtrand.pyx#L1651
并且有一个lock
这是原因吗?
您可以尝试使用个人RandomState
来生成随机数吗?
r = numpy.random.RandomState()
.....
for ... :
x += r.normal(0, noise_sigma, x.shape) / 255.0
推荐阅读
- python - 有没有办法在google colab中查看执行时间和执行状态?
- apache - Htaccess RewriteRules 导致重定向链
- flask - 如何在 CRUD 应用程序中测试编辑路线
- r - 使用时间间隔填充新列
- apache-spark - 是否可以访问有关当前 SparkSession 中已运行的作业的详细信息
- c++ - 当 ar 是结构时,什么是 (void)(ar)
- python - 我们可以控制 WRITE/WRITELINE 函数写入文件的速度吗?
- rust - 我怎样才能明确地说关联类型应该是什么?
- c++ - MFC不能重绘CTabCtrl?
- authentication - 为多个应用程序阶段实施中央身份验证服务器