Files
openmlsys-zh/chapter_introduction/requirements_for_machine_learning_systems.md
Luo Mai de381df160 Fix issues and figures in Introduction. (#322)
* WIP

* pass of mlsys position.

* Fix Ch01

* Checkpoint

* update figure 2.

* update
2022-04-28 09:32:46 +08:00

3.4 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。因此机器学习通系统需要有一个通用的方法来自动化计算梯度(这一过程被称之为自动微分)。

  • 支持数据管理和处理: 机器学习的核心是数据。这些数据包括训练、评估、测试数据集和模型参数。因此,我们需要系统本身支持数据读取、存储和预处理(例如,数据增强和数据清洗)。

  • 支持模型的训练和部署: 为了让机器学习模型达到最佳的性能人们需要使用优化方法例如Mini-Batch SGD来通过多步迭代反复计算梯度这一过程称之为训练。训练完成后系统需要将训练好的模型部署推理设备。

  • 高效使用硬件加速器: 神经网络的相关计算往往通过矩阵计算实现。这一类计算可以被硬件加速器(例如,通用图形处理器-GPU加速。因此机器学习系统需要高效利用多种硬件加速器。

  • 分布式计算: 随着训练数据量和神经网络参数量的上升,机器学习系统的内存用量远远超过了单个机器可以提供的内存。因此,机器学习框架需要天然具备分布式执行的能力。

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

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

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