pass of mlsys position.

This commit is contained in:
Luo Mai
2022-04-27 21:18:15 +01:00
parent 1e3baaa7b7
commit 43a8f37eb8
3 changed files with 16 additions and 287 deletions

View File

@@ -1,39 +1,38 @@
## 机器学习系统的需求
![机器学习框架](../img/ch01/framework_position.svg)
![机器学习框架](../img/ch01/framework_position.png)
:width:`600px`
:label:`framework_position`
为了支持日益增长的机器学习应用,开发者普遍需要依赖机器学习系统(如 :numref:`framework_position`所示)。在设计这种系统的过程中,人们总结出了以下几个设计需求:
为了支持日益增长的机器学习应用,开发者需要设计机器学习系统来满足以下需求(如 :numref:`framework_position`所示):
- **支持多种神经网络:**
深度学习的崛起使得神经网络成为了机器学习应用的核心。不同的应用具有多种数据形态和学习目标,因此人们设计出了不同的神经网络,例如,卷积神经网络(Convolutional
深度学习的巨大成功使得神经网络成为了机器学习应用的核心。不同的应用需要不同的神经网络,例如,卷积神经网络(Convolutional
Neural Networks),图神经网络(Graph Neural
Networks),自注意力神经网络(Self-attention Neural
Networks)等等。这些不同的神经网络需要一个共同的系统软件来进行开发。
Networks)等等。这些神经网络需要一个共同的系统软件来进行开发。
- **支持自动微分:**
神经网络模型的核心计算需求是:系统需要利用数据、标注(Label)和目标损失函数(Loss
Function)计算梯度(Gradients),并将梯度用以更新神经网络参数。这其中的挑战是如何让系统对于各式各样的神经网络都能**自动化**推导出梯度的计算方法,这个推导过程往往被称之为自动微分。
为了训练神经网络,我们需要利用数据、标注(Label)和目标损失函数(Loss
Function)来计算梯度(Gradients)。因此,我们需要一个通用系统**自动化**推导出梯度的计算方法,这个推导过程被称之为自动微分。
- **支持数据管理和处理:**
机器学习的核心是数据,这其中不仅包括训练、评估和测试数据集,还包括训练后产生的模型参数(Checkpoint),以及训练过程中产生的调试数据(Debugging
Data)。为了方便这些数据快速导入机器学习框架,我们需要框架本身支持不同类型的数据,以及进行高效的数据处理(如:数据增强和数据清洗)。
机器学习的核心是数据。这些数据不仅包括训练、评估和测试数据集,还包括训练后产生的模型参数。因此,我们需要系统本身支持数据读取,存储和预处理(例如,数据增强和数据清洗)。
- **支持模型的训练和部署:**
为了让机器学习模型达到最佳的性能,人们需要使用各种优化方法(例如Mini-Batch
SGD和其变种)来迭代计算梯度,最终模型的性能达到令开发者满意的状态(该过程称为训练)。同时,根据应用的要求,训练好的模型也需要部署到各种计算设备中,以提供模型推理服务(Inference)。
为了让机器学习模型达到最佳的性能,人们需要使用优化方法(例如,Mini-Batch
SGD)来**迭代**计算梯度(这一过程称之为训练)。训练完成后,系统需要将训练好的模型部署推理设备。
- **高效使用计算加速器:**
神经网络的相关计算可以被表达成矩阵计算,而这一类计算可以被计算加速器(如GPU)极大地加速。因此,机器学习框架需要具备高效利用加速器的能力。
- **高效使用硬件加速器:**
神经网络的相关计算往往通过矩阵计算实现。这一类计算可以被硬件加速器(例如,通用图形处理器-GPU)加速。因此,机器学习系统需要高效利用硬件加速器。
- **分布式计算:**
随着数据量的增大和应用的复杂度上升,人们正设计出与之相对应的大型深度神经网络。这一类神经网络往往需要大量的内存来存储参数。同时它们也需要大量的加速器从而实现计算的加速。因此,机器学习框架需要具备分布式执行的能力。
随着训练数据量和神经网络参数量的上升,机器学习系统的内存用量远远超过了单机内存的容量。因此,机器学习框架需要天然具备分布式执行的能力。
在设计机器学习系统之初,开发者曾尝试通过传统的**神经网络开发库**(如Theano和Caffe)、以及**大数据计算框架**(如Apache
在设计机器学习系统之初,开发者曾尝试通过拓展**神经网络开发库**(如Theano和Caffe)和**大数据计算框架**(如Apache
Spark和Google
Pregel)等方式来达到以上设计目标。可是他们发现(如 :numref:`comparison_of_ml_frameworks`所示),
神经网络库虽然提供了神经网络开发、自动微分和加速器的支持,但是其缺乏管理和处理大型数据集、模型部署和分布式执行的能力,使得其无法满足产品级机器学习应用的开发。
此外,虽然大数据计算框架具有成熟的分布式执行和数据管理能力,但是其缺乏对神经网络、自动微分和加速器的支持,使得其并不适合开发以神经网络为核心的机器学习应用。因此,业界从头设计出了包括MindSpore、PaddlePaddle、TensorFlow,PyTorch等一系列机器学习框架。
Pregel)来达到以上目标。可是他们发现(如 :numref:`comparison_of_ml_frameworks`所示),
神经网络库虽然提供了神经网络开发、自动微分和加速器的支持,但是其缺乏管理和处理大型数据集、模型部署和分布式执行的能力,无法满足产品级机器学习应用的开发任务。
另一方面,虽然大数据计算框架具有成熟的分布式执行和数据管理能力,但是其缺乏对神经网络、自动微分和加速器的支持,使得其并不适合开发以神经网络为核心的机器学习应用。因此,业界从头开始,设计出了包括MindSpore、PaddlePaddle、TensorFlow,PyTorch等一系列机器学习框架。
:机器学习框架和相关系统的比较

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 KiB

View File

@@ -1,270 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg2"
xml:space="preserve"
width="601.33331"
height="461.33334"
viewBox="0 0 601.33331 461.33334"
sodipodi:docname="framework_position.svg"
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs6"><clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath18"><path
d="M 0,0.1818173 H 450.9818 V 346.00002 l -450.9818,0 z"
id="path16" /></clipPath></defs><sodipodi:namedview
id="namedview4"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="1.1020443"
inkscape:cx="232.74926"
inkscape:cy="263.14732"
inkscape:window-width="1920"
inkscape:window-height="1137"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="g22" /><g
id="g8"
inkscape:groupmode="layer"
inkscape:label="framework-position"
transform="matrix(1.3333333,0,0,-1.3333333,0,461.33333)"><g
id="g10" /><g
id="g22"><g
id="g26"
transform="matrix(7.874016e-5,0,0,-7.874016e-5,1.072749,305)"><path
d="M 0,0 H 958734 V 1064029 H 0 Z"
style="fill:none;stroke:#000000;stroke-width:19050;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:8;stroke-dasharray:none;stroke-opacity:1"
id="path28" /></g><g
id="g30"
transform="matrix(0.2181818,0,0,0.2181818,11.7288,-77.49089)"><text
transform="matrix(1,0,0,-1,0,1585)"
style="font-variant:normal;font-weight:normal;font-size:83px;font-family:STSongti-SC;-inkscape-font-specification:STSongti-SC-Regular;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="text34"><tspan
x="0"
sodipodi:role="line"
id="tspan32"
y="0">自然语</tspan></text></g><g
id="g36"
transform="matrix(0.2181818,0,0,0.2181818,11.7288,-99.09089)"><text
transform="matrix(1,0,0,-1,0,1585)"
style="font-variant:normal;font-weight:normal;font-size:83px;font-family:STSongti-SC;-inkscape-font-specification:STSongti-SC-Regular;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="text40"><tspan
x="0"
sodipodi:role="line"
id="tspan38"
y="0">言处理</tspan></text></g><path
d="M 1.072749,196.7818 H 449 V 112.3454 H 1.072749 Z"
style="fill:#deebf7;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path42" /><g
id="g44"
transform="matrix(7.874016e-5,0,0,-7.874016e-5,1.072749,196.7818)"><path
d="M 0,0 H 5688676 V 1072342 H 0 Z"
style="fill:none;stroke:#000000;stroke-width:19050;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:8;stroke-dasharray:none;stroke-opacity:1"
id="path46" /></g><g
id="g48"
transform="matrix(0.2181818,0,0,0.2181818,170.9274,-185.9273)"><text
transform="matrix(1,0,0,-1,0,1585)"
style="font-variant:normal;font-weight:normal;font-size:83px;font-family:STSongti-SC;-inkscape-font-specification:STSongti-SC-Regular;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="text52"><tspan
x="0 82.501991 165.00398 247.50597 330.00797 412.50995"
y="0"
sodipodi:role="line"
id="tspan50">机器学习框架</tspan></text></g><g
id="g54"
transform="matrix(0.2181818,0,0,0.2181818,69.67742,-207.5273)"><text
transform="scale(1,-1)"
style="font-variant:normal;font-weight:normal;font-size:83px;font-family:STSongti-SC;-inkscape-font-specification:STSongti-SC-Regular;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="text58"
x="-103.12501"
y="-1585"><tspan
x="-103.12501"
y="-1585"
id="tspan56">(</tspan></text></g><g
id="g60"
transform="matrix(0.2181818,0,0,0.2181818,53.92742,-207.5273)"><text
transform="matrix(1,0,0,-1,0,1585)"
style="font-variant:normal;font-weight:normal;font-size:83px;font-family:STSongti-SC;-inkscape-font-specification:STSongti-SC-Regular;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="text64"><tspan
x="0 82.501991 165.00398"
y="0"
sodipodi:role="line"
id="tspan62">例如:</tspan></text></g><g
id="g66"
transform="matrix(0.2181818,0,0,0.2181818,106.4274,-207.5273)"><text
transform="scale(1,-1)"
style="font-variant:normal;font-weight:normal;font-size:83px;font-family:STSongti-SC;-inkscape-font-specification:STSongti-SC-Regular;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="text70"
x="-40.549644"
y="-1581.8807"><tspan
sodipodi:role="line"
id="tspan68"
x="-40.549644"
y="-1581.8807">TensorFlow,PyTorch,MindSpore</tspan></text></g><g
id="g72"
transform="matrix(0.2181818,0,0,0.2181818,224.3024,-207.5273)"><text
transform="matrix(1,0,0,-1,0,1585)"
style="font-variant:normal;font-weight:normal;font-size:83px;font-family:STSongti-SC;-inkscape-font-specification:STSongti-SC-Regular;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="text76"><tspan
sodipodi:role="line"
id="tspan74"
x="0"
y="0" /></text></g><g
id="g78"
transform="matrix(0.2181818,0,0,0.2181818,285.9274,-207.5273)"><text
transform="matrix(1,0,0,-1,0,1585)"
style="font-variant:normal;font-weight:normal;font-size:83px;font-family:STSongti-SC;-inkscape-font-specification:STSongti-SC-Regular;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="text82"><tspan
x="0"
y="0"
id="tspan80" /></text></g><g
id="g84"
transform="matrix(0.2181818,0,0,0.2181818,294.4274,-207.5273)"><text
transform="matrix(1,0,0,-1,0,1585)"
style="font-variant:normal;font-weight:normal;font-size:83px;font-family:STSongti-SC;-inkscape-font-specification:STSongti-SC-Regular;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="text88"><tspan
sodipodi:role="line"
id="tspan86"
x="0"
y="0" /></text></g><g
id="g90"
transform="matrix(0.2181818,0,0,0.2181818,377.9274,-207.5273)"><text
transform="matrix(1,0,0,-1,0,1585)"
style="font-variant:normal;font-weight:normal;font-size:83px;font-family:STSongti-SC;-inkscape-font-specification:STSongti-SC-Regular;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="text94"><tspan
x="0"
y="0"
id="tspan92">)</tspan></text></g><g
id="g98"
transform="matrix(7.874016e-5,0,0,-7.874016e-5,1.072749,85.50905)"><path
d="M 0,0 H 5688676 V 1075112 H 0 Z"
style="fill:none;stroke:#000000;stroke-width:19050;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:8;stroke-dasharray:none;stroke-opacity:1"
id="path100" /></g><g
id="g102"
transform="matrix(0.2181818,0,0,0.2181818,179.9274,-297.4182)"><text
transform="matrix(1,0,0,-1,0,1585)"
style="font-variant:normal;font-weight:normal;font-size:83px;font-family:STSongti-SC;-inkscape-font-specification:STSongti-SC-Regular;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="text106"><tspan
x="0"
y="0"
id="tspan104">异</tspan></text></g><g
id="g108"
transform="matrix(0.2181818,0,0,0.2181818,197.9274,-297.4182)"><text
transform="matrix(1,0,0,-1,0,1585)"
style="font-variant:normal;font-weight:normal;font-size:83px;font-family:STSongti-SC;-inkscape-font-specification:STSongti-SC-Regular;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="text112"><tspan
x="0"
y="0"
id="tspan110">构</tspan></text></g><g
id="g114"
transform="matrix(0.2181818,0,0,0.2181818,215.9274,-297.4182)"><text
transform="matrix(1,0,0,-1,0,1585)"
style="font-variant:normal;font-weight:normal;font-size:83px;font-family:STSongti-SC;-inkscape-font-specification:STSongti-SC-Regular;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="text118"><tspan
x="0 82.501991 165.00398"
y="0"
sodipodi:role="line"
id="tspan116">处理器</tspan></text></g><g
id="g120"
transform="matrix(0.2181818,0,0,0.2181818,80.92742,-319.0182)"><text
transform="matrix(1,0,0,-1,0,1585)"
style="font-variant:normal;font-weight:normal;font-size:83px;font-family:STSongti-SC;-inkscape-font-specification:STSongti-SC-Regular;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="text124"><tspan
x="0 82.501991 165.00398 247.50597"
y="0"
sodipodi:role="line"
id="tspan122">(例如:</tspan></text></g><g
id="g126"
transform="matrix(0.2181818,0,0,0.2181818,152.9274,-319.0182)"><text
transform="matrix(1,0,0,-1,0,1585)"
style="font-variant:normal;font-weight:normal;font-size:83px;font-family:STSongti-SC;-inkscape-font-specification:STSongti-SC-Regular;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="text130"><tspan
x="0"
y="0"
sodipodi:role="line"
id="tspan128">通用</tspan></text></g><g
id="g132"
transform="matrix(0.2181818,0,0,0.2181818,188.9274,-319.0182)"><text
transform="matrix(1,0,0,-1,0,1585)"
style="font-variant:normal;font-weight:normal;font-size:83px;font-family:STSongti-SC;-inkscape-font-specification:STSongti-SC-Regular;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="text136"><tspan
x="0 82.501991 165.00398 247.50597 330.00797 412.50995 495.01193 577.51392 660.01593 742.51788"
y="0"
sodipodi:role="line"
id="tspan134">处理器和计算加速器)</tspan></text></g><g
id="g140"
transform="matrix(7.874016e-5,0,0,-7.874016e-5,88.12724,305)"><path
d="M 0,0 H 958735 V 1064029 H 0 Z"
style="fill:none;stroke:#000000;stroke-width:19050;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:8;stroke-dasharray:none;stroke-opacity:1"
id="path142" /></g><g
id="g144"
transform="matrix(0.2181818,0,0,0.2181818,98.79257,-77.49089)"><text
transform="matrix(1,0,0,-1,0,1585)"
style="font-variant:normal;font-weight:normal;font-size:83px;font-family:STSongti-SC;-inkscape-font-specification:STSongti-SC-Regular;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="text148"><tspan
x="0 82.501991 165.00398"
y="0"
sodipodi:role="line"
id="tspan146">计算机</tspan></text></g><g
id="g150"
transform="matrix(0.2181818,0,0,0.2181818,107.7926,-99.09089)"><text
transform="matrix(1,0,0,-1,0,1585)"
style="font-variant:normal;font-weight:normal;font-size:83px;font-family:STSongti-SC;-inkscape-font-specification:STSongti-SC-Regular;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="text154"><tspan
x="0 82.501991"
y="0"
sodipodi:role="line"
id="tspan152">视觉</tspan></text></g><g
id="g158"
transform="matrix(7.874016e-5,0,0,-7.874016e-5,175.1818,305)"><path
d="M 0,0 H 958735 V 1064029 H 0 Z"
style="fill:none;stroke:#000000;stroke-width:19050;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:8;stroke-dasharray:none;stroke-opacity:1"
id="path160" /></g><g
id="g162"
transform="matrix(0.2181818,0,0,0.2181818,185.8564,-88.1818)"><text
transform="matrix(1,0,0,-1,0,1585)"
style="font-variant:normal;font-weight:normal;font-size:83px;font-family:STSongti-SC;-inkscape-font-specification:STSongti-SC-Regular;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="text166"><tspan
x="0 82.501991"
y="0"
sodipodi:role="line"
id="tspan164">机器人</tspan></text></g><g
id="g170"
transform="matrix(7.874016e-5,0,0,-7.874016e-5,359.3272,305)"><path
d="M 0,0 H 1138844 V 1064029 H 0 Z"
style="fill:none;stroke:#000000;stroke-width:19050;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:8;stroke-dasharray:none;stroke-opacity:1"
id="path172" /></g><g
id="g174"
transform="matrix(0.2181818,0,0,0.2181818,368.007,-88.1818)"><text
transform="matrix(1,0,0,-1,0,1585)"
style="font-variant:normal;font-weight:normal;font-size:83px;font-family:STSongti-SC;-inkscape-font-specification:STSongti-SC-Regular;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="text178"><tspan
x="0 82.501991 165.00398 247.50597"
y="0"
sodipodi:role="line"
id="tspan176">推荐系统</tspan></text></g><g
id="g180"
transform="matrix(7.874016e-5,0,0,-7.874016e-5,269.7636,263)"><path
d="M 0,0 865414,1"
style="fill:none;stroke:#000000;stroke-width:28575;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:8;stroke-dasharray:28575, 28575;stroke-dashoffset:0;stroke-opacity:1"
id="path182" /></g><g
id="g184"
transform="matrix(0.2181818,0,0,0.2181818,158.6047,-22.07271)"><text
transform="matrix(1,0,0,-1,0,1585)"
style="font-variant:normal;font-weight:normal;font-size:83px;font-family:STSongti-SC;-inkscape-font-specification:STSongti-SC-Regular;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="text188"><tspan
x="0 82.501991 165.00398 247.50597 330.00797"
y="0"
sodipodi:role="line"
id="tspan186">机器学习应用</tspan></text></g></g></g></svg>

Before

Width:  |  Height:  |  Size: 15 KiB