当工作人员数量增加并且numpy生成大型阵列时,Keras使用较少的CPU

Joh*_* M. 5 python numpy keras tensorflow

我的代码使用了相对广泛的扩充策略,但我注意到CPU利用率Nfit_generator(...workers=N)增加时并不成比例.我有一个4核CPU.

  • 何时N=1,htop显示约105%的使用率
  • 何时N=2,htop显示约202%的使用率
  • 当时N=3,htop显示约287%的使用率
  • N=4,htop显示大约342%的使用率

GPU使用率始终低于40%.

如果我减少增强策略以省略噪声添加,我可以实现大约360%和更高的GPU使用率N=4.增加噪音

x += numpy.random.normal(0, noise_sigma, x.shape) / 255.0

其中x是640x480 BGR输入图像.这是一个慢速呼叫,每次呼叫平均大约24.3ms,但CPU不应该在N=4什么时候工作?numpy如何在生成大量随机数时阻塞其他线程?

sha*_*awn 3

normal来电cont2_array*

https://github.com/numpy/numpy/blob/master/numpy/random/mtrand/mtrand.pyx#L1651

并且有一个lock

是这个原因吗?

你能尝试使用 individualRandomState来生成随机数吗?

r = numpy.random.RandomState() 

.....

for ... :
    x += r.normal(0, noise_sigma, x.shape) / 255.0
Run Code Online (Sandbox Code Playgroud)