Files
openmlsys-zh/chapter_programming_interface/development_history.md
Jia 0be67c508d update chapter 2 (#137)
* update chapter 2

* Update neural_network_layer.md

Co-authored-by: Cheng Lai <laicheng_VIP@163.com>
Co-authored-by: Dalong <39682259+eedalong@users.noreply.github.com>
2022-03-20 10:01:08 +08:00

4.0 KiB
Raw Permalink Blame History

机器学习系统编程模型的演进

机器学习编程库发展历程 :width:800px 🏷️img_framedh

随着机器学习系统的诞生,如何设计易用且高性能的编程接口就一直成为了框架设计者首要解决的问题。在早期的机器学习框架中(如 :numref:img_framedh所示人们选择用LuaTorch和PythonTheano等高层次编程语言来编写机器学习程序。这些早期的机器学习框架提供了机器学习必须的模型定义自动微分等功能其适用于编写小型和科研为导向的机器学习应用。

在2011年深度神经网络快速崛起并很快在各个AI应用领域计算机视觉语音识别自然语言处理等取得了最先进的性能。训练深度神经网络需要消耗大量的算力而这些算力无法被以Lua和Python所主导开发的Torch和Theano所满足。与此同时计算加速卡如英伟达GPU的通用编程接口例如CUDA C日趋成熟而构建于CPU多核技术之上的多线程库POSIX Threads也被广大开发者所接受。因此许多的机器学习用户希望基于C和C++来开发高性能的深度学习应用。这一类需求被Caffe等一系列以C和C++作为核心编程接口的框架所满足。

然而机器学习模型往往需要针对部署场景数据类型识别任务等需求进行深度定制而这类定制任务需要被广大的AI应用领域的开发者所实现。这类开发者的背景多样其往往不具有熟练使用C和C++的背景因此Caffe这一类库与C和C++深度绑定的编程模型快速成为了制约这一类框架快速推广的巨大瓶颈。

在2016年谷歌率先推出了TensorFlow。相比于传统的CaffeTorch和TheanoTensorFlow提出利用高层次编程语言Python作为面向用户的主要前端语言而利用C和C++实现高性能后端。大量基于Python的前端API确保了TensorFlow可以被大量的数据科学家和机器学习科学家接受同时帮助TensorFlow能够快速融入Python为主导的大数据生态大量的大数据开发库如NumpyPandasSciPy Matplotlib和PySpark。同时Python具有出色的和C语言的互操作性这种互操作性已经在多个Python库中得到验证。因此TensorFlow兼有Python的灵活性和生态同时也通过C/C++后端得以实现高性能。这种设计在日后崛起的PyTorchMXNet和CNTK的机器学习框架得到传承。

随着多个机器学习框架的出现Keras和TensorLayer等高层次机器学习开发库提供了更高层次的Python API从而可以快速导入已有的模型 这些高层次API进一步屏蔽了底层框架的实现细节因此Keras和TensorLayer可以运行在不同的机器学习框架之上。

随着深度神经网络的进一步发展对于机器学习框架编程接口的挑战也日益增长。因此在2020年前后新型的机器学习框架如MindSpore和JAX进一步出现。其中MindSpore在继承了TensorFlowPyTorch的Python和C/C++的混合接口的基础上进一步拓展了机器学习编程模型从而可以高效支持多种AI后端芯片如华为Ascend英伟达GPU和ARM芯片实现了机器学习应用在海量异构设备上的快速部署。

同时超大型数据集和超大型深度神经网络崛起让分布式执行成为了机器学习框架编程模型的核心设计需求。为了实现分布式执行TensorFlow和PyTorch的使用者需要进行大量编程来将数据集和神经网络分配到分布式节点上而大量的AI开发人员并不具有分布式编程的能力。因此MindSpore进一步完善了机器学习框架的分布式编程模型的能力从而让单节点的MindSpore程序可以无缝地运行在海量节点上。

在本小节中我们将以MindSpore作为例子讲解一个现代机器学习框架的Python前端API和C/C++后端API的设计原则。这些设计原则和PyTorchTensorFlow相似。