use*_*481 10 amazon-ec2 amazon-web-services tensorflow
如何充分利用我的每个EC2内核?
我正在使用c4.4xlarge AWS Ubuntu EC2实例和TensorFlow来构建一个大型复杂的神经网络.nproc说我的EC2实例有16个核心.当我运行我的convnet培训代码时,顶级实用程序说我只使用400%的CPU.由于有16个内核,我原以为它使用1600%的CPU.AWS EC2监控选项卡确认我只使用了25%的CPU容量.这是一个巨大的网络,在我的新Mac Pro上,它消耗大约600%的CPU并且需要几个小时来构建,所以我不认为原因是因为我的网络太小.
我相信下面这一行最终决定了CPU的使用情况:
sess = tf.InteractiveSession(config=tf.ConfigProto())
Run Code Online (Sandbox Code Playgroud)
我承认我并不完全理解线程和内核之间的关系,但我尝试增加内核数量.它与上面的行具有相同的效果:仍然是400%的CPU.
NUM_THREADS = 16
sess = tf.InteractiveSession(config=tf.ConfigProto(intra_op_parallelism_threads=NUM_THREADS))
Run Code Online (Sandbox Code Playgroud)
编辑:
你可以尝试几件事:
你已经尝试过更改了intra_op_parallelism_threads.根据您的网络,增加它也是有意义的inter_op_parallelism_threads.来自doc:
inter_op_parallelism_threads:
执行阻塞操作的节点
在每个进程中可用的inter_op_parallelism_threads 池中排队.0表示系统选择一个合适的号码.
intra_op_parallelism_threads:
可以在intra_op_parallelism_threads池上并行执行单个op(对于某些op类型).0表示系统选择一个合适的号码.
(旁注:上面引用的配置文件中的值不是tensorflow使用的实际默认值,而只是示例值.您可以通过手动检查tf.ConfigProto()返回的对象来查看实际的默认配置.)
Tensorflow对上述选项使用0表示它尝试自己选择适当的值.我不认为tensorflow选择了导致您出现问题的不良值,但您可以尝试使用上述选项的不同值来保证安全.
它可以让你像这样.在这张图片中,您可以看到实际计算发生在比可用线程少得多的线程上.这也可能是您的网络的情况.我标记了潜在的同步点.在那里,您可以看到所有线程都在短时间内处于活动状态,这可能是您遇到的CPU利用率偶尔出现峰值的原因.
| 归档时间: |
|
| 查看次数: |
3497 次 |
| 最近记录: |