谷歌发布可批处理动态计算图的深度学习库 TensorFlow Fold
谷歌通过博客正式发布了 TensorFlow Fold,该库针对 TensorFlow 1.0 框架量身打造,可以帮助深度学习开发者根据不同结构的输入数据建立动态的计算图(Dynamic Computation Graphs),简化了模型训练阶段对输入数据的预处理过程,提升了系统的运行效率。
一般而言,大部分的深度学习项目都需要对模型的训练数据进行一定程度的预处理。在这个过程中,各种不同规模和结构的输入数据(例如不同分辨率的图片数据)将被裁剪成相同的维度和尺寸,然后被压入栈,等待模型训练阶段的批处理流程。这一步骤之所以至关重要,是因为它使得 TensorFlow 等高性能的深度学习框架可以并行地针对不同的输入数据运行同一个计算图,加上当前的 GPU 和多核 CPU 普遍支持的 SIMD(Single Instruction Multiple Data,单指令多数据流) 等加速技术,大大提升了深度学习模型的运算速度。
然而,依然存在诸多问题域无法进行一般的预处理,因此模型必须针对不同的输入数据建立不同的计算图。例如自然语言理解中的解析树(parse trees),源代码中的抽象语法树(abstract syntax trees)以及网页中的 DOM 树等等。在这些问题中,不同的输入数据具有不同的计算图,而且这些计算图并不能划分到同一个批处理流程中,因而也就无法实现对处理器、内存和高速缓存的最高效利用。
谷歌此次发布的 TensorFlow Fold 完美解决了这一问题。按照谷歌官方博客的介绍,TensorFlow Fold 库会根据每个不同的输入数据建立单独的计算图,因为各个输入数据都可能具有各自不同的规模和结构,因此计算图也应该各不相同。此后,动态批处理功能将自动组合这些计算图,以实现在输入数据内部和不同输入数据之间的批处理操作,同时还可以通过插入一些附加指令来实现不同批处理操作之间的数据互通。更重要的是,相比于其他实现,TensorFlow Fold 将 CPU 的速度提高了 10 倍以上,GPU 的速度提高了 100 倍。