首页 文章

最大化Tensorflow性能

提问于
浏览
1

我正在使用Tensorflow 1.2 . 用于AWS p2实例(Tesla K80)上的图像分割 . 有没有一种简单的方法让我知道我是否可以提高代码的性能?

这就是我所知道的:

  • 我测量了程序各个部分的执行时间,99%的时间用于调用会话运行 .

sess.run([train_op,loss,labels_modified,output_modified],feed_dict = feed_dict)

其中feed_dict是从占位符到张量的映射 .

  • session.run方法仅需要0.43秒来执行以下参数:batch_size = 1,image_height = 512,image_width = 512,channels = 3 .

  • 网络有14个卷积层(没有密集层),总共有1100万个可训练参数 .

  • 因为我正在进行分段,所以使用批量大小为1,然后计算像素损失(512 * 512交叉熵损失) .

  • 我试图从源代码编译Tensorflow并且性能改进为零 .

我通读了性能指南https://www.tensorflow.org/performance/performance_guide,但我不想花很多时间来尝试所有这些建议 . 我花了8个小时来编译Tensorflow,它给了我零利益!

如何找出会话的哪些部分大部分时间都在运行?我觉得这可能是损失计算 .

是否有任何明确的研究表明我可以从性能指南中提到的事物中获得多少加速?

3 回答

  • 0

    您正在执行计算密集型任务,需要大量计算和大量内存 . 您的模型有很多参数,每个参数都需要向前,向后和更新计算 .

    您链接的页面中的建议是正常的,如果您按照它们进行操作,除了创建另一个(1个或多个)实例并并行运行火车外,您无法做任何其他事情 . 这将为您提供Nx加速(其中N是计算输入批次的渐变的实例数)但它非常昂贵且并不总是适用(此外,它需要更改您的代码以使其跟随客户端 - 用于梯度计算和权重更新的服务器体系结构)

  • 0

    根据您的一小段代码,如果可以使用队列,我会尽量避免使用Feed字典(请参阅https://github.com/tensorflow/tensorflow/issues/2919) . Tensorflow文档涵盖了队列here的使用 . 切换到队列肯定会提高您的性能 .

  • 0

    也许您可以使用tfprof运行代码来进行一些分析以找出瓶颈所在 .

    对于猜测,性能问题可能是由数据提供引起的 . 不要如何准备你的feed_dict,如果你必须从磁盘读取数据以便为每个sess.run准备feed_dict,它将减慢读取数据的程序并且训练是同步的 . 您可以尝试将数据转换为tfrecords,使用tf.FIFOQueue进行异步加载数据和培训

相关问题