TensorFlow性能优化

尽量减少operation的个数,尽量多用矩阵或者张量运算而不是for循环,这样可以让后端更有空间对你的模型计算进行并行优化,计算机做矩阵张量运算是有很高效的方法的(这点和MATLAB很像)

相对于模型的训练而言,有时候预处理反而是一件更为耗时的工作,搞不好训练只花1秒结果准备数据花了5秒,这时候你再怎么提高模型性能都没辙,优化预处理的步骤以及调整pipeline才是关键。这方面tf.data或许可以帮到你的忙,可以参考这篇文章。 https://www.tensorflow.org/guide/performance/datasets

模型本身的类型也会对性能有影响,一个非常不严谨的大致印象是加速效率CNN>RNN>RL。CNN相对比较好GPU加速,RNN因为存在时间依赖的序列结构,很多运算必须顺序进行,因此GPU带来的性能提升相对较少。RL(增强学习)不仅存在时间依赖的序列结构,还要频繁和环境交互,GPU带来的提升就更为有限。由于CPU和GPU之间的切换本身需要耗费资源,有些时候使用GPU进行强化学习反而性能明显次于CPU,尤其是模型本身较小而交互特别频繁的场景(比如非联合动作的多智能体强化学习)。

总之,模型运行得慢,不见得一定是机器性能不够好的缘故,在购买高性能硬件的时候可以多思考一下自己有没有充分使用现有硬件的性能,或者借/租一台高性能机器(如GCP)看看性能到底能提升多少。(当然如果只是想找个买新机器的借口的话当我没说)