我的代码使用了相对广泛的增强策略,但我注意到当fit_generator(...workers=N)
中的N
增加时,CPU 利用率不成比例。我有一个 4 核 CPU。
- 当
N=1
时,htop
显示大约 105% 的使用率 N=2
时,htop
显示大约 202% 的使用率- 当
N=3
时,htop
显示大约 287% 的使用率 N=4
时,htop
显示使用率约为 342%
GPU 使用率始终低于 40%。
如果我减少增强策略以省略噪声添加,我可以在N=4
时实现大约 360% 或更高的 GPU 使用率。噪声由
x += numpy.random.normal(0, noise_sigma, x.shape) / 255.0
其中x
是 640x480 BGR 输入图像。这是一个缓慢的调用,平均每次调用约24.3ms,但是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