通过第二章对常见神经网络层的介绍,不难发现深度神经网络算法具有高度模块化的特点。算法研究者在为具体应用设计神经网络模型时,能够通过沿着宽度和深度方向堆叠组合基本处理层的方式,构建起任意复杂的神经网络模型。然而,扩大神经网络规模对算力需求也相应提升,就需要使用并行计算机进行加速以提高训练效率。编程并行计算机对开发者有很高的要求,往往需要掌握较为底层的并行编程模型来显示地控制并行任务划分、任务间的数据传输和通信这些制约性能的关键因素。为了简化编程并行计算机的复杂性,深度学习框架通过建立起对深度学习软件栈的分层抽象,力图在可编程性和系统性能之间达到平衡,让软件栈中的不同角色:算法研究者,系统工程师,或是硬件工程师,不仅能够在各自的专业领域独立于其他抽象层进行开发,同时又能与软件栈中其他层接口无缝集成。
深度学习框架的设计选择经历了几次重要的发展和变化。这些选择受前沿深度学习算法和硬件加速器发展的共同推动,也反应了深度学习系统设计在可编程性,灵活性和性能之间的不断权衡。
本章将围绕以下内容展开: