New Introduction Section. (#410)

* New Introduction.

* Fix comments.
This commit is contained in:
Luo Mai
2022-11-02 09:33:14 +00:00
committed by GitHub
parent db9e392ac1
commit 362b18d7f3
14 changed files with 142 additions and 121 deletions

View File

@@ -1,12 +0,0 @@
## 适用读者
本书由浅入深地讨论机器学习系统的设计原理和实现经验。其读者包括:
- **学生:**
本书将帮助学生获得大量机器学习系统的设计原则和一手实践经验。从而帮助其更全面理解机器学习算法的实践挑战和理论优劣。
- **科研人员:**
本书将帮助科研人员学习到机器学习落地实践中遇到的种种挑战,引导设计出能解决大规模实际问题的下一代机器学习算法。
- **开发人员:**
本书将帮助开发人员深刻理解机器学习系统的内部架构,从而帮助其优化系统性能,调试问题,并且根据业务需求对机器学习系统进行定制。

View File

@@ -0,0 +1,18 @@
## 机器学习应用
通俗来讲机器学习是指从数据中学习出有用知识的技术。以学习模式分类机器学习可以分为监督学习Supervised Learning、无监督学习Unsupervised Learning和强化学习Reinforcement Learning等。
* 监督学习是已知输入和输出的对应关系下的机器学习场景。比如给定输入图像和它对应的离散标签。
* 无监督学习是只有输入数据但不知道输出标签下的机器学习场景。比如给定一堆猫和狗的图像自主学会猫和狗的分类这种无监督分类也称为聚类Clustering
* 强化学习则是给定一个学习环境和任务目标,算法自主地去不断改进自己以实现任务目标。比如 AlphaGo围棋就是用强化学习实现的给定的环境是围棋的规则而目标则是胜利得分。
从应用领域上划分,机器学习应用包括计算机视觉、自然语言处理和智能决策等。
狭义上来讲,基于图像的应用都可归为计算机视觉方面的应用,典型的应用有人脸识别、物体识别、目标跟踪、人体姿态估计、图像理解等。
计算机视觉方法广泛应用于自动驾驶、智慧城市、智慧安防等领域。
自然语言处理涉及文本或者语音方面的应用,典型的应用包括语言翻译、文本转语音、语音转文本、文本理解、图片风格变换等。
计算机视觉和自然语言处理有很多交集,如图像的文本描述生成、基于文本的图像生成、基于文本的图像处理等应用都同时涉及语言和图像两种数据类型。
智能决策的应用往往通过结合计算机视觉、自然语言处理、强化学习、控制论等技术手段,实现决策类任务。智能决策方法广泛用于机器人、自动驾驶、游戏、推荐系统、智能工厂、智能电网等领域。
不同的机器学习应用底层会应用不同的机器学习算法,如支持向量机(Support Vector MachineSVM)、逻辑回归Logistic Regression、朴素贝叶斯Naive Bayes算法等。近年来得益于海量数据的普及神经网络Neural Networks算法的进步和硬件加速器的成熟深度学习Deep Learning开始蓬勃发展。虽然机器学习算法很多但无论是经典算法还是深度学习算法的计算往往以向量和矩阵运算为主体因此本书主要通过神经网络为例子展开机器学习系统的介绍。

View File

@@ -0,0 +1,31 @@
## 机器学习框架的基本组成原理
一个完整的机器学习框架一般具有如图 :numref:`framework-architecture` 所示的基本架构。
![机器学习框架基本构成](../img/ch01/framework-architecture.png)
:width:`600px`
:label:`framework-architecture`
- **编程接口:**
考虑到机器学习开发人员背景的多样性机器学习框架首先需要提供以高层次编程语言如Python为主的编程接口。同时机器学习框架为了优化运行性能需要支持以低层次编程语言如C和C++)为主的系统实现,从而实现操作系统(如线程管理和网络通讯等)和各类型硬件加速器的高效使用。
- **计算图:**
利用不同编程接口实现的机器学习程序需要共享一个运行后端。实现这一后端的关键技术是计算图技术。计算图定义了用户的机器学习程序其包含大量表达计算操作的算子节点Operator Node以及表达算子之间计算依赖的边Edge
- **编译器前端:**
机器学习框架往往具有AI编译器来构建计算图并将计算图转换为硬件可以执行的程序。这个编译器首先会利用一系列编译器前端技术实现对程序的分析和优化。编译器前端的关键功能包括实现中间表示、自动微分、类型推导和静态分析等。
- **编译器后端和运行时:**
完成计算图的分析和优化后机器学习框架进一步利用编译器后端和运行时实现针对不同底层硬件的优化。常见的优化技术包括分析硬件的L2/L3缓存大小和指令流水线长度优化算子的选择或者调度顺序。
- **异构处理器:**
机器学习应用的执行由中央处理器Central Processing UnitCPU和硬件加速器如英伟达GPU、华为Ascend和谷歌TPU共同完成。其中非矩阵操作如复杂的数据预处理和计算图的调度执行由中央处理器完成。矩阵操作和部分频繁使用的机器学习算子如Transformer算子和Convolution算子由硬件加速器完成。
- **数据处理:**
机器学习应用需要对原始数据进行复杂预处理同时也需要管理大量的训练数据集、验证数据集和测试数据集。这一系列以数据为核心的操作由数据处理模块例如TensorFlow的tf.data和PyTorch的DataLoader完成。
- **模型部署:**
在完成模型训练后机器学习框架下一个需要支持的关键功能是模型部署。为了确保模型可以在内存有限的硬件上执行会使用模型转换、量化、蒸馏等模型压缩技术。同时也需要实现针对推理硬件平台例如英伟达Orin的模型算子优化。最后为了保证模型的安全如拒绝未经授权的用户读取还会对模型进行混淆设计。
- **分布式训练:**
机器学习模型的训练往往需要分布式的计算节点并行完成。其中常见的并行训练方法包括数据并行、模型并行、混合并行和流水线并行。这些并行训练方法通常由远端程序调用Remote Procedure Call, RPC、集合通信Collective Communication或者参数服务器Parameter Server实现。

View File

@@ -1,35 +0,0 @@
## 基本组成
一个完整的机器学习系统往往具有如 :numref:`framework_architecture`所示的基本架构。
![机器学习框架基本构成](../img/ch01/framework_architecture.png)
:width:`600px`
:label:`framework_architecture`
- **编程接口:** 为了支持广泛的开发者机器学习框架的编程接口不仅需要高层次简易编程例如PythonJulia和Java同时也需要支持低层次高性能编程利用C和C++函数调用操作系统和硬件加速器)。
- **计算图:**
利用不同编程接口实现的机器学习程序需要共享一个运行后端。实现这一后端的关键技术是:应用无关的计算图。计算图包含计算节点,节点之间的边表达计算依赖。计算图可以被同步和异步执行。
- **编译器前端:**
给定一个计算图,机器学习框架会对计算图做一系列优化。和硬件无关的优化由编译器前端实现。编译器前端实现包括:中间表达,自动微分,类型推导和静态分析等等。
- **编译器后端和运行时:**
机器学习框架利用编译器后端对计算图可以进一步针对硬件的特性例如说L2/L3大小指令流水线长度进行性能优化。最终优化后的计算图通过运行时执行在通用处理器CPU或者是硬件加速器之上。运行时需要实现算子选择和内存分配等技术。
- **硬件加速器:**
现代硬件加速器提供了丰富的编程接口。在本书中我们将会介绍硬件加速器的基本组成原理和编程接口。我们同时会给出一个硬件加速器使用案例来从0到1讲述如何高效使用加速器。
- **数据处理:**
机器学习系统拥有专门的数据处理框架来实现数据读取存储和预处理的功能由数据处理模块例如TensorFlow的tf.data和PyTorch的DataLoader。这一框架需要针对机器学习应用实现易用性保序性和高效性等设计目标。
- **模型部署:**
在模型完成训练后下一个常用的系统功能是模型部署。为了确保模型可以在内存有限的硬件上执行我们会使用模型转换量化蒸馏等模型压缩技术。同时我们也需要实现针对推理硬件平台例如英伟达Jetson的模型算子优化。最后为了保证模型的安全不被黑客窃取实践者还会对模型进行混淆设计。
- **分布式训练:**
分布式训练日渐成为一个机器学习框架的核心组件。本书将介绍常见的分布式训练方法(数据并行,模型并行,混合并行和流水线并行)。同时我们会深入介绍这些方法的高效系统实现(包括集合通讯库和参数服务器)。
- **拓展模块:**
机器学习系统的广泛部署使得许多的扩展模块陆续出现。本书将会介绍得到大量实践部署的拓展模块深度学习推荐系统联邦学习系统强化学习系统可解释性AI系统和机器人系统。
机器学习算法相关的理论知识是本书的预备知识,本书不做深入讨论。基础的机器学习理论知识可以在附录中找到。

View File

@@ -0,0 +1,37 @@
## 机器学习框架的设计目标
为了支持在不同应用中高效开发机器学习算法,人们设计和实现了**机器学习框架**如TensorFlow、PyTorch、MindSpore等。广义来说这些框架实现了以下共性的设计目标
- **神经网络编程:**
深度学习的巨大成功使得神经网络成为了许多机器学习应用的核心。根据应用的需求人们需要定制不同的神经网络如卷积神经网络Convolutional Neural Networks和自注意力神经网络Self-Attention Neural Networks等。这些神经网络需要一个共同的系统软件进行开发、训练和部署。
- **自动微分:**
训练神经网络会具有模型参数。这些参数需要通过持续计算梯度Gradients迭代改进。梯度的计算往往需要结合训练数据、数据标注和损失函数Loss
Function。考虑到大多数开发人员并不具备手工计算梯度的知识机器学习框架需要根据开发人员给出的神经网络程序全自动地计算梯度。这一过程被称之为自动微分。
- **数据管理和处理:**
机器学习的核心是数据。这些数据包括训练、验证、测试数据集和模型参数。因此,需要系统本身支持数据读取、存储和预处理(例如数据增强和数据清洗)。
- **模型训练和部署:**
为了让机器学习模型达到最佳的性能需要使用优化方法例如Mini-Batch SGD来通过多步迭代反复计算梯度这一过程称之为训练。训练完成后需要将训练好的模型部署到推理设备。
- **硬件加速器:**
神经网络的相关计算往往通过矩阵计算实现。这一类计算可以被硬件加速器(例如,通用图形处理器-GPU加速。因此机器学习系统需要高效利用多种硬件加速器。
- **分布式执行:**
随着训练数据量和神经网络参数量的上升,机器学习系统的内存用量远远超过了单个机器可以提供的内存。因此,机器学习框架需要天然具备分布式执行的能力。
在设计机器学习框架之初,开发者曾尝试通过传统的**神经网络开发库**如Theano和Caffe、以及**数据处理框架**如Apache Spark和Google Pregel等方式达到以上设计目标。可是他们发现
神经网络库虽然提供了神经网络开发、自动微分和硬件加速器的支持,但缺乏管理和处理大型数据集、模型部署和分布式执行的能力,无法满足当今产品级机器学习应用的开发任务。
另一方面,虽然并行数据计算框架具有成熟的分布式运行和数据管理能力,但缺乏对神经网络、自动微分和加速器的支持,并不适合开发以神经网络为核心的机器学习应用。
考虑到上述已有软件系统的种种不足许多公司开发人员和大学研究人员开始从头设计和实现针对机器学习的软件框架。在短短数年间机器学习框架如雨后春笋般出现较为知名的例子包括TensorFlow、PyTorch、MindSpore、MXNet、PaddlePaddle、OneFlow、CNTK等极大推进了人工智能在上下游产业中的发展。表 :numref:`comparison_of_ml_frameworks` 总结了机器学习框架和相关系统的区别。
:机器学习框架和相关系统的区别
| 方式 | 神经网络 | 自动微分 | 数据管理 | 训练和部署 | 硬件加速器 | 分布式执行 |
|:-: |:-:| :-: |:-:|:-: |:-:|:-:|
| 神经网络库 | 是 | 是 | 否 | 否 | 是 | 否 |
| 大数据框架 | 否 | 否 | 是 | 否 | 否 | 是 |
| 机器学习框架 | 是 | 是 | 是 | 是 | 是 | 是 |
:label:`comparison_of_ml_frameworks`

View File

@@ -0,0 +1,36 @@
## 机器学习系统生态
以机器学习框架为核心,人工智能社区创造出了庞大的**机器学习系统**生态。广义来说,机器学习系统是指实现和支持机器学习应用的各类型软硬件系统的泛称。图 :numref:`system-ecosystem` 总结了各类型的机器学习系统。
![机器学习系统和相关生态](../img/ch01/system-ecosystem.png)
:width:`600px`
:label:`system-ecosystem`
- **联邦学习:**
随着用户隐私保护和数据保护法的出现许多机器学习应用无法直接接触用户数据完成模型训练。因此这一类应用需要通过机器学习框架实现联邦学习Federated Learning
- **推荐系统:**
将机器学习(特别是深度学习)引入推荐系统在过去数年取得了巨大的成功。相比于传统基于规则的推荐系统,深度学习推荐系统能够有效分析用户的海量特征数据,从而实现在推荐准确度和推荐时效性上的巨大提升。
- **强化学习:**
强化学习具有数据收集和模型训练方法的特殊性。因此,需要基于机器学习框架进一步开发专用的强化学习系统。
- **可解释AI**
随着机器学习在金融、医疗和政府治理等关键领域的推广基于机器学习框架进一步开发的可解释性AI系统正得到日益增长的重视。
- **机器人:**
机器人是另一个开始广泛使用机器学习框架的领域。相比于传统的机器人视觉方法,机器学习方法在特征自动提取、目标识别、路径规划等多个机器人任务中获得了巨大成功。
- **图学习:**
Graph是最广泛使用的数据结构之一。许多互联网数据如社交网络、产品关系图都由图来表达。机器学习算法已经被证明是行之有效的分析大型图数据的方法。这种针对图数据的机器学习系统被称之为图学习系统Graph Learning System
- **科学计算:**
科学计算覆盖许多传统领域(如电磁仿真、图形学、天气预报等),这些领域中的许多大规模问题都可以有效利用机器学习方法求解。因此,针对科学计算开发机器学习系统变得日益普遍。
- **机器学习集群调度:**
机器学习集群一般由异构处理器、异构网络甚至异构存储设备构成。同时机器学习集群中的计算任务往往具有共同的执行特点如基于集合通信算子AllReduce迭代进行。因此针对异构设备和任务特点机器学习集群往往具有特定的调度方法设计。
- **量子计算:**
量子计算机一般通过混合架构实现。其中量子计算由量子计算机完成而量子仿真由传统计算机完成。由于量子仿真往往涉及到大量矩阵计算许多量子仿真系统如TensorFlow Quantum和MindQuantum都基于机器学习框架实现。
本书受限于篇幅将不会对所有机器学习系统进行深入讲解。目前本书会从系统设计者的角度出发对应用在联邦学习、推荐系统、强化学习、可解释AI和机器人中的相关核心系统进行讲解。

View File

@@ -1,14 +1,13 @@
# 导论
本章第一部分首先介绍机器学习的概貌,以及其在系统角度的共性问题
本章第二部分介绍系统设计的需求和目标,让读者从宏观上来了解系统需要满足的内容,对系统设计的主要用例、设计规格有一个清晰的了解。
本章最后部分介绍机器学习系统的组成原理,让读者对系统整体的实现有一个初步的、宏观的理解。
本章将会介绍机器学习应用,梳理出机器学习系统的设计目标,总结出机器学习系统的基本组成原理,让读者对机器学习系统有自顶而下的全面了解
```toc
:maxdepth: 2
machine_learning_applications
requirements_for_machine_learning_systems
components_of_machine_learning_systems
applicable_readers
applications
design
architecture
ecosystem
readers
```

View File

@@ -1,23 +0,0 @@
## 机器学习应用
通俗来讲机器学习是指从数据中学习出有用知识的技术。从学习模式来说机器学习可以分为监督学习Supervised
Learning、无监督学习Unsupervised Learning、强化学习Reinforcement
Learning
* 监督学习是已知输入输出对应关系情况下的学习,比如: 给定输入图像和它对应的内容标签学习图像分类Classification
* 无监督学习是只有输入数据但不知道输出标签情况下的学习比如给定一堆猫和狗的图像自主学会猫和狗的分类这种无监督分类也称为聚类Clustering
* 强化学习则是给定一个学习环境和任务目标,算法自主地去不断尝试、改进自己、以实现任务目标 ,比如: AlphaGo围棋就是用强化学习实现的给定的环境是围棋的规则、而目标则是胜利得分。
从应用领域上划分,主要包括计算机视觉、自然语言处理和智能决策这三大部分,而且这三大部分之间也有交集。
狭义上来讲基于图像的应用都可归为计算机视觉方面的应用,典型的应用有人脸识别、物体识别、目标跟踪、人体姿态估计、以及图像的理解、修复、分割与检测等等。
计算机视觉方法广泛应用于自动驾驶、智慧城市、智慧安防等领域。
自然语言处理涉及文本或者语音方面的应用,典型的应用包括语言翻译、文本转语音、语音转文本、以及文本理解、分类、风格变换与纠错等等。
计算机视觉和自然语言处理有很多交集,例如图像的文本描述生成、基于文本的图像生成、基于文本的图像处理等应用都同时涉及到了语言和图像两种数据类型。
智能决策方面,往往通过结合计算机视觉、自然语言处理、强化学习、控制论等技术手段,实现决策类任务,广泛用于机器人、自动驾驶、游戏、推荐系统、智能工厂、智能电网等领域。
经典的机器学习算法有支持向量机Support Vector
MachineSVM、逻辑回归Logistic Regression、朴素贝叶斯Naive
Bayes
等方法。然而得力于大数据互联网和计算机性能的提升以深度学习Deep
Learning为代表的方法得到了广泛的研究和应用。
虽然机器学习算法很多,但无论是经典算法还是深度学习算法的计算往往以向量、矩阵运算为主体的,因此本书主要通过深度神经网络为例子展开机器学习系统的介绍。下面我们来快速了解一下机器学习系统的设计需求、实现目标以及组成原理。

View File

@@ -0,0 +1,14 @@
## 图书结构和读者
本书由浅入深地讨论机器学习系统的设计原理和实现经验。其中,**基础篇**覆盖编程接口设计和计算图等框架使用者需要了解的核心概念。**进阶篇**覆盖编译器前端、编译器后端、数据管理等框架设计者需要了解的核心概念。最后,**拓展篇**覆盖重要的机器学习系统类别(如联邦学习和推荐系统等),从而为各领域的机器学习爱好者提供统一的框架使用和设计入门教学。
本书的常见读者包括:
- **学生:**
本书将帮助学生获得大量机器学习系统的设计原则和一手实践经验,从而帮助其更全面理解机器学习算法的实践挑战和理论优劣。
- **科研人员:**
本书将帮助科研人员解决机器学习落地实践中面临的种种挑战,引导设计出能解决大规模实际问题的下一代机器学习算法。
- **开发人员:**
本书将帮助开发人员深刻理解机器学习系统的内部架构,从而帮助其开发应用新功能、调试系统性能,并且根据业务需求对机器学习系统进行定制。

View File

@@ -1,44 +0,0 @@
## 设计目标
![机器学习框架](../img/ch01/framework_position.png)
:width:`600px`
:label:`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等一系列新型机器学习系统框架
:机器学习框架和相关系统的比较
| | 神经网络 | 自动微分 | 数据管理 | 训练和部署 | 加速器 | 分布式 |
|:-: |:-:| :-: |:-:|:-: |:-:|:-:|
| 神经网络库 | 是 | 是 | 否 | 否 | 是 | 否 |
| 大数据框架 | 否 | 否 | 是 | 否 | 否 | 是 |
| 机器学习框架 | 是 | 是 | 是 | 是 | 是 | 是 |
:label:`comparison_of_ml_frameworks`

Binary file not shown.

After

Width:  |  Height:  |  Size: 257 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 418 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 174 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 531 KiB