为解决这些依赖库和工具的缺点,减轻手动优化每个硬件运行模型的负担,深度学习社区诉诸于专门的编译器。已经有几种流行的编译器出现,例如TVM,Tensor Comprehension,Glow,nGraph和Tensorflow XLA(Accelerated Linear Algebra)。编译器将深度学习框架描述的模型在各种硬件平台上生成有效的代码实现,其完成的模型定义到特定代码实现的转换将针对模型规范和硬件体系结构高度优化。具体来说,它们结合了面向深度学习的优化,例如层融合和操作符融合,实现高效的代码生成。此外,现有的编译器还采用了来自通用编译器(例如LLVM)的成熟工具链,对各种硬件体系结构提供了更好的可移植性。与传统编译器类似,深度学习编译器也采用分层设计,包括前端、中间表示(IR)和后端。但是,这种编译器的独特之处在于多级IR和特定深度学习模型实现优化的设计。
如图是深度学习框架概况:1)当前流行的框架;2)历史框架;3)支持ONNX格式的框架。
The Open Neural Network Exchange(ONNX),定义了可扩展的计算图模型,可以将不同框架构建的计算图轻松转换为ONNX,这样在不同框架之间转换模型变得容易。ONNX已集成到PyTorch、MXNet和PaddlePaddle中。对于尚不直接支持的多个框架(例如TensorFlow和Keras),ONNX对它们添加了转换器。
【101】Y Xing, J Weng, Y Wang, L Sui, Y Shan, and Y Wang. “An In-depth Comparison of Compilers for Deep Neural Networks on Hardware”. IEEE International Conference on Embedded Software and Systems (ICESS). 2019.