3.2 KiB
机器学习系统基本组成
为了达到上述设计目标,一个现代的机器学习框架往往具有如 :numref:framework_architecture所示的基本架构。
:width:
600px
🏷️framework_architecture
-
编程接口: 一个机器学习框架面向用户的编程接口(Programming interface)需要特殊设计。编程接口提供简单易用的编程函数(往往是Python)从而让用户定义出各式各样的神经网络和相关的训练过程。同时,编程接口要兼顾性能:神经网络的执行可以调用硬件相关C和C++函数(许多加速器和操作系统的编程接口)。该部分的内容将在第2章展开。
-
计算图: 用户定义的机器学习程序往往会表达成一个计算图(Computational graph)。这个计算图使得用户并行计算和异步执行得以实现。该部分内容将在第3章展开。
-
计算加速器: 现代计算加速器提供了丰富的编程接口让应用来优化其相关性能。而如何高效使用计算加速器是许多机器学习框架的核心。我们将在第4章中讨论加速器的加速原理和相关使用技巧。
-
编译器前端: 在将计算图发送到加速器执行之前,机器学习框架往往会对计算图做一系列硬件无关的一系列优化,这一过程被称之为:编译器前端。其中核心步骤是对用户定义的神经网络训练实现自动微分。在此期间,计算图会被表示为中间表达(Intermediate Representation),并同时应用类型系统和静态分析等一系列技术。我们将在第5章中讨论相关内容。
-
编译器后端: 编译器前端生成的中间表达可以进一步针对硬件的特性(例如说,L2/L3大小,指令流水线长度)进行性能优化,硬件算子选择,内存分配。这一以硬件为核心的编译过程被称为:编译器后端,该部分内容将在第6章中讨论。
-
数据处理: 机器学习框架会集成多种数据管理模块。其中包括数据预处理模块,模型参数checkpoint,模型可视化和训练结果可视化等。该部分内容将在第7章中讨论。
-
模型部署: 在模型完成训练后,用户需要对模型进行部署。该过程中,我们会根据部署硬件的特点进行模型格式的转换,针对硬件特性进行推理性能优化。同时,移动硬件往往具有小内存的特点。因此大量的模型压缩技术也在部署中得到应用。这些相关内容将在第8章中讨论。
-
分布式训练: 当模型的训练需要大量内存和算力的时候,机器学习框架会提供原生的分布式执行编程接口。分布式机器学习系统已经在工业界得到大量的部署。相关内容会在第9章讨论。
除了上述核心组件以外,机器学习系统作为一个依然高速发展的前沿学科,还有大量的问题正在被密集研究,相关的前沿问题将在本书的第10章中展开讨论。另外,机器学习算法相关的理论知识是本书的预备知识,本书不做深入讨论。基础的机器学习理论知识可以在附录中找到。