Files
openmlsys-zh/chapter_introduction/requirements_for_machine_learning_systems.md
2022-03-20 10:07:32 +08:00

4.3 KiB
Raw Blame History

机器学习系统的需求

机器学习框架 :width:600px 🏷️framework_position

为了支持日益增长的机器学习应用,开发者普遍需要一个新型的系统软件:机器学习框架(如 :numref:framework_position所示)。这种框架一方面可以帮助用户进行高效的开发,另一方面使得机器学习模型的训练和部署可以高效使用通用处理器和计算加速器。在设计机器学习框架的过程,人们总结出了以下几个设计需求:

  • 支持多种神经网络: 深度学习的崛起使得神经网络成为了大量机器学习应用的核心。不同的应用具有多种数据形态和机器学习的目标因此人们设计出了大量不同的神经网络例如卷积神经网络Convolutional Neural Networks图神经网络Graph Neural Networks自注意力神经网络Self-attention Neural Networks等等。人们需要一个统一的框架来开发各种各种的神经网络。

  • 支持自动微分: 神经网络模型的的一个核心优点是其可以利用数据、标注Label和目标损失函数Loss Function来自动计算梯度Gradients以实现机器学习模型的参数更新。一套神经网络模型可以应用在不同的数据场景中。为了实现这个目标人们希望机器学习框架可以对任意神经网络自动化地计算出梯度。

  • 支持数据管理和处理: 机器学习的核心是数据这其中不仅包括训练、评估和测试数据集还包括训练后产生的模型参数Checkpoint以及训练过程中产生的调试数据Debugging Data。为了方便这些数据快速导入机器学习框架我们需要框架本身支持不同类型的数据以及进行高效的数据处理数据增强和数据清洗

  • 支持模型的训练和部署: 为了让机器学习模型达到最佳的性能人们需要使用各种优化方法例如Mini-Batch SGD和其变种来迭代计算梯度最终模型的性能达到令开发者满意的状态该过程称为训练。同时根据应用的要求训练好的模型也需要部署到各种计算设备中以提供模型推理服务Inference

  • 高效使用计算加速器: 神经网络的相关计算可以被表达成矩阵计算而这一类计算可以被计算加速器如GPU极大地加速。因此机器学习框架需要具备高效利用加速器的能力。

  • 分布式计算: 随着数据量的增大和应用的复杂度上升,人们正设计出与之相对应的大型深度神经网络。这一类神经网络往往需要大量的内存来存储参数。同时它们也需要大量的加速器从而实现计算的加速。因此,机器学习框架需要具备分布式执行的能力。

在设计机器学习系统之初,开发者曾尝试通过传统的神经网络开发库如Theano和Caffe、以及大数据计算框架如Apache Spark和Google Pregel等方式来达到以上设计目标。可是他们发现如 :numref:comparison_of_ml_frameworks所示), 神经网络库虽然提供了神经网络开发、自动微分和加速器的支持,但是其缺乏管理和处理大型数据集、模型部署和分布式执行的能力,使得其无法满足产品级机器学习应用的开发。 此外虽然大数据计算框架具有成熟的分布式执行和数据管理能力但是其缺乏对神经网络、自动微分和加速器的支持使得其并不适合开发以神经网络为核心的机器学习应用。因此业界从头设计出了包括MindSpore、PaddlePaddle、TensorFlowPyTorch等一系列机器学习框架。

:机器学习框架和相关系统的比较

神经网络 自动微分 数据管理 训练和部署 加速器 分布式
神经网络库
大数据框架
机器学习框架
🏷️comparison_of_ml_frameworks