我在一个共享计算资源的环境中工作,也就是说,我们有一些服务器机器配备了几个Nvidia Titan X GPU.
对于小到中等大小的型号,12GB的Titan X通常足以让2-3人在同一GPU上同时进行训练.如果模型足够小以至于单个模型没有充分利用Titan X的所有计算单元,那么与在另一个训练过程之后运行一个训练过程相比,这实际上可以导致加速.即使在并发访问GPU确实减慢了单个培训时间的情况下,仍然可以灵活地让多个用户同时在GPU上运行.
TensorFlow的问题在于,默认情况下,它在启动时会在GPU上分配全部可用内存.即使对于一个小的2层神经网络,我也看到12 GB的Titan X已用完.
有没有办法让TensorFlow只分配4GB的GPU内存,如果有人知道这个数量对于给定的模型来说足够了?
我使用TensorFlow r1.0和GPU Nvidia Titan X训练一个类似Inception的模型.
我添加了一些摘要操作来可视化训练过程,使用如下代码:
def variable_summaries(var):
"""Attach a lot of summaries to a Tensor (for TensorBoard visualization)."""
with tf.name_scope('summaries'):
mean = tf.reduce_mean(var)
tf.summary.scalar('mean', mean)
with tf.name_scope('stddev'):
stddev = tf.sqrt(tf.reduce_mean(tf.square(var - mean)))
tf.summary.scalar('stddev', stddev)
tf.summary.scalar('max', tf.reduce_max(var))
tf.summary.scalar('min', tf.reduce_min(var))
tf.summary.histogram('histogram', var)
Run Code Online (Sandbox Code Playgroud)
当我运行这些操作时,训练一个纪元的时间成本约为400秒.但是当我关闭这些操作时,训练一个纪元的时间成本仅为90秒.
如何优化图表以最小化汇总操作时间成本?
我想知道是否有人可以帮助我弄清楚 nVidia 的新 Titan V 是否支持 GPUDirect。据我所知,它似乎仅限于 Tesla 和 Quadro 卡。
感谢您抽出时间来阅读。