本人系第九届华为ICT大赛实践赛云赛道选手,曾包揽省赛、中国总决赛及全球总决赛三项一等奖,并持有HCIE-Cloud Service认证。现通过本平台分享备赛经验与参赛心得,供各位同学参考。文中所述内容若有疏漏之处,恳请各位不吝指正,在此先行致谢!(建议首先阅读专栏首篇文章——【备赛指南】华为ICT大赛 实践赛 云赛道01,之后再逐步阅读后续内容)
(1) 卷积神经网络CNN的特性
①局部感知:人对外界的认知是从局部到全局的,而图像的空间联系也是局部的像素联系较为紧密,距离较远的像素相关性较弱。因此每个神经元没必要对全局图像进行感知,只需对局部进行感知,卷积状态,不用全连接
②参数共享:对输入的图片用一个或多个卷积核扫描照片的像素值,卷积核自带的参数就是权重,权值共享意味着每一个卷积核在遍历整个图像时,卷积核的参数固定不变【每个卷积核参数相同】
· 优点:
(1)解决图像位置不变性的问题
(2)减少计算和内存需求
· 实现:用参数相同的Kernel去扫描整副图像
只需做反向传播算法BP
(2) 卷积神经网络CNN的网络架构
①卷积层
· 卷积层的功能:卷积层通过不同的特征核提取图像的局部特征信息
不同深度的卷积层提取的特征:
(1)输入图像像素
(2)边缘纹理
(3)局部特征
(4)目标特征
· 有卷积核做卷积计算,3通道RGB(Red、Green、Blue)做相同的卷积计算,最后输出张量【线性+非线性】
(1)线性:导入输入张量做卷积,加上偏置
(2)非线性:将前面导入激活函数做非线性变化
· 单卷积核计算:可以设置不同步长straide
(1)输入图片大小WxW
(2)卷积核大小FxF
(3)步长用S计算
(4)Padding保留边缘信息用P表示:若步长为2,到第3个图遇到空列,Padding可以做补充
(5)卷积之后的尺寸图片大小(W-F+2P)÷S+1
②池化层( - 向量化 > 全连接层)
· 池化层的功能:
池化的目的是减少图像特征图(feature map)的空间尺寸
有时图像太大,我们需要减少训练参数的数量,因此会在随后的卷积层之间周期性地引进池化层
· 存在一个局部窗口在运动,同样设计步长,使图片变小,减少下层输出的尺寸,起到降维效果,相当于特征选择
· 池化方法:
(1)最大池化:解决卷积层里产生的误差造成均值有偏差的问题,最大池化更注重图片纹理,能缓解卷积层误差。是最常见形式
(2)平均池化:解决局部领域的大小误差,可以保留背景
③全连接层
· 全连接的功能
全连接层可用来将最后得到的特征映射到线性可分的空间,卷积神经网络会将末端得到的特征图平摊成一个长的列向量,经过全连接层的计算得到最终的输出层
全连接层在整个卷积神经网络中起到“分类器”的作用
连接所有特征,将所有特征传递给具体的分类器进行分类或者回归处理,一般都使用的Softmax激活函数将最终的输出数值向量化 -> 输出多分类比重,激活函数Softmax
· 将最后一个卷积层的特征图展开在加入全连接层计算
(3) 卷积神经网络CNN的重要概念
①卷积核(convolution kerel)
根据一定规则进行图片扫描并进行卷积计算的对象称为卷积核。卷积核可以提取局部特征
②卷积核尺寸(kernel size)
卷积核是3维的矩阵,可以用立方体表示,宽w,高h,深度d。深度d由输入的通道数决定,描述卷积核尺寸时,可以只描述宽w和高h
③特征图(feature map)
经过卷积核卷积后得到的结果矩阵就是特征图。每一个卷积核会得到一层特征图,有多个卷积核则会得到多层的特征图
④特征图尺寸(feature map size)
特征图也是3维的矩阵,可以用立方体图示,宽w,高h,深度d。深度d由当前层的卷积核个数决定,描述特征图尺寸时,可以只描述宽w和高h
⑤步长(stride)
卷积核在输入图像上滑动的跨度。如果卷积核一次移动一个像素,我们称其步长为1
⑥零填充(zero padding)
为了提取图像的边缘信息,并且保证输出特征图的尺寸满足要求,可以对输入图像边缘填充一个全为0的边框,边框的像素宽度就是padding
(4) 卷积神经网络CNN的模型
①AlexNet
不算输入层,AlexNet只有八层,但它有60M以上的参数总量,参数量比后面的网络都大。由于早期GPU显存的限制,最早的AlexNet包括了双数据流的设计,能让网络一半的节点存入一个GPU。用多个GPU训练
AlexNet特点:
(1)ReLU:使用ReLU代替sigmoid激活函数,以达到快速收敛的目的
(2)重叠的Pooling:stride < kernel size,这种池化策略能减轻过拟合
(3)数据增强:为防止过拟合,AlexNet对原始图像(256*256)随机剪裁为224*224的图像,图像水平单转以及随机增加光照等操作
(4)Dropout:每个隐藏层神经元的输入以0.5的概率输出为0。目的同样是防止过拟合
②VGGNet
VGGNet研究深度对卷积网络的影响。使用3x3卷积核,不断重复卷积层,池化,最后经过全连接Softmax,得到输出类别概率
VGG16相比AlexNet的改进是采用连续的几个3x3的卷积核代替AlexNet中的较大卷积核(11x11,5x5)。对于给定的感受野(与输出有关的输入图片的局部大小),采用堆积的小卷积核是优于采用大的卷积核,因为多层非线性层可以增加网络深度来保证学习更复杂的模式,而且代价还比较小(参数更少) -> VGG16和VGG19是图像和语音的特征提取任务所常用的模块
③GoogLeNet
提出是为了探索不同大小的卷积核和更宽的CNN对分类的影响
GoogLeNet设计了一种称为Inception的模块,这模块使用密集结构来近似一个稀疏的CNN,使用不同大小的卷积核来抓取不同大小的感受
④ResNet
随着网络深度增加,网络的准确度应该同步增加。但增加网络深度后,靠前的网络层梯度会很小。意味着这些层基本上学习停滞了,产生了梯度消失问题 -> 当网络更深时,网络的参数空间更大,优化问题变得更难,因此简单地去增加网络深度反而会导致更高的训练误差
残差网络的提出就是为了解决以上两个问题
残差网络提出了一个可以防止训练时的梯度消失的结构,称为残差结构 -> 残差模块在输入和输出之间建立了一个直接连接,这样新增的网络层仅仅需要在原来的输入层基础上学习新的特征,即学习残差
⑤SENet
SENet,压缩和激励网络。主要由两部分组成:Squeeze部分与Excitation部分
Squeeze-and-Excitation(SE)模块
(1)Squeeze操作:将一个channel上整个空间特征编码为一个全局特征,用global average pooling来实现,最终得到特征图每个channel的全局描述特征
(2)Excitation操作:采用包含两个全连接层的bottle neck结构来提取channel之间的关系
· Scale:Excitation的最后一步是各个channel的激活值(sigmoid激活,值0~1)乘以u上的原始特征
(1) 循环神经网络RNN
1. 对于捕捉序列化数据有好的表现,能保持持续的变化。如一帧帧图像组成的视频、一个个片段组成的音频、一个个词汇组成的句子文本
是一种通过隐藏层节点周期性的连接,来捕捉序列化数据中动态信息的神经网络,可以对序列化的数据进行分类
可以保存一种上下文的状态,甚至能够在任意长的上下文窗口中存储、学习、表达相关信息,而且不再局限于传统神经网络在空间上的边界,可以在时间序列上有延拓
2. 时序反向传播算法BPTT
①t时刻的梯度是前t-1时刻所有梯度的累积,会产生梯度消失问题
梯度消失和梯度爆炸都与路径长度太长有关,前面的权重都基本固定不变,没有训练效果
②BPTT的步骤:
(1)前向计算每个神经元的输出值
(2)反向计算每个神经元的误差值
(3)计算每个权重的梯度,使用随机梯度下降算法更新权重。如使用ReLU激活函数依然有梯度消失问题需要更改模型
· 使用梯度下降法学习出好的参数。为了计算这些梯度,需要使用微分的链式法则
将RNN展开之后,前向传播就是依次按照时间的顺序计算一次,BPTT就是从最后一个时间将累积的残差传递回来即可
这与普通的神经网络训练本质上是相似的,BPTT主要的差异就是我们将每一时刻的梯度相加
3. 循环神经网络RNN的特性:权重共享,w都相同
4. 循环神经网络RNN的网络架构:引入记忆单元,缓存之前的信息
5. 循环神经网络RNN的适用场景:
①不太长的相关信息和位置信息
②适用于需要连接前面短期内的信息到当前的任务上
6. 循环神经网络RNN的计算过程:
①RNN是包含循环的网络,允许信息的持久化
②循环可以使得信息从当前步传递到下一步,这些循环使RNN非常神秘
③RNN可被看作是同一神经网络的多次赋值,每个神经网络模块会把消息传递给下一个
· 所有RNN都具有重复神经网络模块的链式形式
· 标准的RNN中,这个重复的模块只有一个非常简单的结构,例如一个tanh层
(2) 长短记忆性网络LSTM
1. 长短记忆性网络(LSTM),是时间递归神经网络,适合于处理和预测时间序列间隔和延迟相对较长的重要事件,解决了梯度消失问题,能够选择性记忆重要信息
缺点:LSTM使用的函数太多,计算量太大
2. LSTM与RNN的区别:在算法中加入判断信息有用与否的“处理器”,结构被称为cell,cell当中被放置了三扇门
①输入门:确定什么样的新信息被存放在细胞状态中,包含两个部分
(1)sigmoid层称“输入门层”决定什么值将要更新
(2)tanh层创建一个新的候选值向量,会被加入到状态中
②遗忘门:信息进入LSTM的网络,可根据规则来判断是否有用。只有符合算法认证的信息才会留下,不符的信息则通过遗忘门被遗忘
(1)在LSTM中的第一步是决定会从细胞状态中丢弃什么信息
(2)该门会读取ht和xt,输出一个在0到1之间的数值,给每个在细胞状态Ct-1中的数字
· 1表示“完全保留”
· 0表示“完全舍弃”
③输出门
(1)首先运行一个sigmoid层来确定细胞状态的哪个部分输出
(2)接着把细胞状态与tanh层进行处理(得到一个在-1到1之间的值)并将它和sigmoid层的输出相乘,最终只会输出确定输出的那部分
④初始状态
(1)LSTM的关键就是细胞状态,类似于传送带。直接在整个链上运行,只有少量的线性交互。信息在上面流传保持不变会很容易
⑤更新信息
(1)更新旧细胞状态,Ct-1更新为Ct
(2)把旧状态与ft相乘,丢弃确定需要丢弃的信息。接着加上it*ct,这就是新的候选值,根据决定更新每个状态的程度进行变化
3. LSTM与语音识别
①RNN通过递归来挖掘序列中的上下文信息,在一定程度上克服了DNN的缺点。但是RNN在训练中会出现梯度消失的问题,无法记忆长时信息
②在HMM基础上DNN(深度神经网络)的应用提升了语音识别系统的性能。DNN将每一帧语音及其前后的几帧语音拼接在一起作为网络的输入,从而利用序列中上下文的信息
· DNN中每次输入的帧数是固定的,不同的窗长对最终的识别结果会有影响
③LSTM通过特定的门控单元使当前时刻的误差能够保存下来并选择性传给特定的单元,从而避免了梯度消失的问题
· LSTM+CTC
· LSTM+HMM
4. LSTM的适用场景
①相当长的相关信息和位置间隔
②适用于需要连接前面长期内的信息到当前的任务上
(3) 门控循环单元GRU
①门控循环单元(GRU)是LSTM的一个变体,GRU结构更简单,计算量更少更快。将遗忘门和输入门合并为更新门,解决梯度消失问题。同样还混合了细胞状态和隐藏状态
(1)更新门:用于控制前一时刻的状态信息被代入到当前状态的程度,更新门的值越大说明前一时刻的状态信息带入越多
(2)重置门:用于控制忽略前一时刻的状态信息的程度,重置门的值越小说明忽略得越多
②GRU特点
(1)如果将更新门设置为0,重置门设置为 1,将获得标准RNN模型
(2)为了解决短期记忆问题,每个递归单元能够自适应捕捉不同尺度的依赖关系
(3)在隐层输出的地方h_t,h_{t-1}ht,ht-1的关系用加法而不是RNN当中乘法+激活函数
(4) LSTM和GRU的比对
①GRU比LSTM少了一个门,计算速度会更快
②LSTM对保留的记忆是可控的,而GRU不可控
(5) BiRNN
双向RNN是每个训练序列向前和向后分别是两个循环神经网络(RNN)而且这两个RNN同时连接着一个输出层。在每一个时刻t,输入会同时提供给这两个方向相反的RNN,输出由这两个单向的RNN的状态共同决定
(1) ME模块
①model_zoo:网络模型的定义,里面有很多预置的模型库
②communication:加载数据
③dataset:数据的处理和读取
④context:设置模型的运行参数
⑤train:训练模型的方法
⑥utils:进行参数校验
⑦common:Tensor,Parameter,dtype,initializer的定义
⑧akg:自动微分和自定义算子库
⑨ops:基本算子定义和反向算子注册
⑩nn:Mindspore cell神经网络单元,损失函数,优化器的定义,Cell里面包含了场景的损失函数和优化器等
(2) Mindspore的数据类型
Mindspore支持Int、Unit、Float等数据类型
Mindspore兼容numpy和Python的数据类型
(3) Mindspore的数据存储是张量tensor,下面是基于tensor的操作:
张量定义:一个多维数组,可以存放数据,数据说明维度即张量说明维度,是数据的载体
零阶张量:标量,一阶张量:向量,二阶张量:矩阵
①asnumpy( ):转换为NumPy数组
②size( ):获取张量对象的形状
③dim( ):获取张量对象的维度数
④dtype( ):获取张量对象的数据类型
⑤shape( ):获取张量对象的形状
⑥_str_:生成张量对象的字符串表示
⑦tensor_add(other:Tensor):将当前张量与另一个张量other进行逐元素相加操作
⑧tensor_mul(other:Tensor):将当前张量与另一个张量other进行逐元素相乘操作
⑨tensor.sum():对张量进行求和操作
mindspore.Tensor:创建张量(一组数据决定维度也可以指定维度没有数据)
mindspore.dtype:指定数据类型
mindspore.dtype_to_nptype:数据类型转换,mindspore.dtype_to_pytype:数据类型转换
mindspore.context.set_context:设置运行环境的context,mindspore.context.get_context:根据输入Key获取context属性值,mindspore.context.set_ps_context:设置参数服务器训练模式的上下文
· mindspore.context:Mindspore运行时需指定运行时的环境参数,包括计算图的模式、运行时的设备、内存空间大小等,同时也可以使用API获取当前运行环境的具体信息
mindspore.context.ParallelMode:并行模式
mindspore.dataset:提供加载和处理各种通用数据集的API,也支持加载标准格式的数据集,包括MindRecord、TFRecord、Manifest等。还可以使用自己的数据集
· 提供针对语音、文本、图像等数据的数据增强功能
· MindRecord:在AI训练过程涉及大量的训练数据,会对数据进行频繁的读取操作,涉及高频IO操作,比较耗时。MindRecord将我们数据进行序列号,并存储在可线程读取的文件中,不用频繁对每个文件进行IO -> mindspore.mindrecord:提供方法将不同数据集转换为MindRecord格式,也提供一些操作MindRecord数据文件的方法如读取、写入、检索
mindspore.nn:构建神经网络中的预定义模块或计算单元,该模块还包含了(封装)构建神经网络的组件
(1)RNN、CNN、LSTM等网络结构
(2)MSELoss、SoftmaxCrossEntropyWithLogits等损失函数
(3)Momentum、Adam等优化器
(4)FI Score、AUC等模型评价指标
mindspore.Model:模型训练或推理的高阶接口
(4) Operation操作
①array:Array相关的算子
②math:数学计算相关的算子
③nn:网络类算子
④control:控制类算子
⑤random:随机数相关算子
(5) MindsporeIR:MSIR基于计算图的模块,可以用来表示自由遍历、高阶函数、递归等
(6) 回调函数Callback本身不是函数,而是一个类。使用回调函数来观察训练过程中网络内部的状态和相关信息,或在特定时期执行特定动作。例如监控loss、保存模型参数、动态调整参数、提前终止训练任务等
Mindspore框架提供Callback类,也支持用户自定义Callback
①mindspore.ModelCheckpoint
②mindspore.LossMonitor
③mindspore.SummaryColletcor
(1) Model Zoo:模型库
(2) Mindspore Devkit:开发套件
(3) Mindspore Extend:高阶扩展库
(4) MindSpore训练和验证
Mindspore Hub:预训练模型,下载模型MindIR
MindIR(MindSpore训练和验证 - 模型导出 > MindIR):端云统一IR,一次训练和编译到处运行(MindIR作为MindSpore的统一模型文件,同时存储了网络结构和权重参数值。MindSpore通过统一IR定义了网络的逻辑结构和算子的属性,将MindR格式的模型文件与硬件平台解耦,实现一次训练多次部署。同一个MindIR文件支持多种硬件形态的部署)
1. 推理-模型文件:Mindspore可以基于训练好的模型在不同的硬件平台上执行推理任务。模型推理文件保存支持两者类型的数据
①训练参数:Checkpoint格式文件,采用了Protocol Buffers格式,存储了网络中所有的参数值,使用时需要先搭建模型
(1)训练任务中断后恢复训练
(2)训练后的微调(Fine Tune)任务
②网络模型:MindIR、AIR、ONNX三种格式文件
· MindIR格式
(1)MindIR:中间表示(IR)是程序编程过程中介于源语言和目标语言之间的程序表示,以便编译器进行程序分析和优化。能消除不同后端的模型差异,一般用于跨硬件平台执行推理任务
(2)Mindspore使用的是一种基于图表示的函数式IR,即MindIR。其目的是服务于自动微分变换,采用接近于ANF函数式的语义(借助于MindIR,可以实现一次训练多处部署,实现端云互通)
· AIR格式
(1)是华为定义的针对机器学习所设计的开放式文件格式
(2)更好适应华为AI处理器,用于Ascend 310上执行推理任务
· ONNX格式
(1)是一种针对机器学习模型的通用表达
(2)用于不同框架间模型迁移或在推理引擎TensorRT上使用
③推理-执行
本机推理:通过加载训练产生的Checkpoint文件,调用model.predict接口进行推理验证
跨平台推理:使用网络定义和Checkpoint文件,调用export接口导出模型文件,在不同平台执行推理,目前支持导出MindIR、AIR(仅支持Ascend AI处理器)、ONNX模型
Ascend 310推理:是面向边缘场景的高能效高集成度AI处理器,支持对MindIR格式和AIR格式模型进行推理
Ascend 310上使用MindIR模型进行推理:
· Atlas 200开发者套件(Atlas 200 DK),是以Atlas 200 AI加速模块为核心的开发者板形态的终端类产品,集成了海思Ascend 310 AI处理器 -> 可以实现图像、视频等多种数据分析与推理计算,可广泛用于智能监控、机器人、无人机、视频服务器等场景
· 流程
(1)开发环境准备,包括制作Atlas 200 DK的SD卡、配置Python环境和刷配套开发软件包
(2)导出MindIR模型文件
(3)编译推理代码,生成可执行main文件
(4)加载保存的MindIR模型,执行推理并查看结果
Ascend 910推理
· 使用checkpoint格式文件单卡推理
(1)使用model.eval接口进行模型验证
(2)使用MindSpore Hub从华为云加载模型
(3)使用model.predict接口进行推理操作
· 使用checkpoint格式文件分布式推理
(1)执行训练,生成checkpoint文件和模型参数切分策略文件
(2)设置context,根据推理数据推导出推理策略
(3)导入checkpoint文件,根据推理策略加载相应的模型切片至每张卡中
(4)使用model.predict进行推理,得到推理结果
2. Mindspore Serving:云侧推理、在线推理【Ascned、GPU】
①MindSpore Serving的概念
是一个服务模块,帮助MindSpore开发者在生产环境中高效部署在线推理服务。用户使用MindSpore完成模型训练后,导出MindSpore模型,即可使用MindSpore Serving创建该模型的推理服务
MindSpore训练生成MindIR模型文件后,可直接发给MindSpore Serving加载,执行推理任务,而无需额外的模型转化,做到Ascend、GPU、CPU等多硬件的模型统一
②MindSpore Serving的特性
(1)使用简单
(2)一键发布和部署
(3)支持batching
(4)高性能高扩展
③基于MindSpore Serving的部署推理:有三种方式可以访问该服务
(1)MindSpore Serving提供gRPC接囗访问Serving服务
(2)基于RESTful接口访问MindSpore Serving服务
(3)MindSpore Serving的Servable提供推理服务,包含两种类型:
· 推理服务来源于单模型
· 推理服务来源于多模型组合,多模型组合正在开发
· 模型需要进行配置以提供Serving推理服务
3. Mindspore Lite:端侧推理、离线推理【IOT、CPU、NNIE、Ascend、GPU】
①MindSpore Lite的概念
MindIR可直接供Lite部署使用,同时由于端侧轻量化需求,提供了模型小型化和转换功能,支持将原始MindR模型文件由Protocol Buffers格式转换为Flat Buffers格式存储,以及网络结构轻量化,以满足端侧性能、内存等要求
②MindSpore Lite的特性
(1)兼容所有AI框架
· 兼容Mindspore、ONNX、TF、TFLITE、Caffe
· MindSpore Lite转换工具支持AI框架模型的转换和优化,无缝支持MindSpore训练的模型进行端侧学习和推理
· 支持MindSpore/TensorFlow Lite/Caffe/Onnx等模型,提供模型压缩、数据处理能力,统一训练和推理IR,方便用户快速部署
(2)极致性能
· 高效内核算法和汇编级优化,支持CPU,GPU,NPU
· 异构调度,最大化发挥硬件算力,最小化推理时延和功耗
(3)轻量化
· 提供超轻量的解决方案,支持模型量化压缩
· 模型更小跑得更快,使AI模型极限环境下的部署执行
(4)全场景支持
· 支持iOS、Android等手机操作系统以及LiteOS嵌入式操作系统,支持手机、大屏、平板、IOT等各种智能设备上的AI应用
· MindSpore Lite支撑HMS的服务
③MindSpore Lite的组件
(1)离线模块
(2)在线模块
· 模型离线优化 -> 推理:需要使用convert工具对模型进行离线优化
4. 端边增量学习Fine-tuning训练等
(5) Mindspore Insight:可视化,调试调优
①Mindspore Insight的概念
是Mindspore的可视化调试调优工具。可以可视化地查看训练过程、优化模型性能、调试精度问题、优化参数、迁移模型
是Mindspore的调试调优子系统,提供训练过程可视化、模型溯源、debugger、性能profiling
②Mindspore Insight的功能
(1)API接口,训练过程中,用户可以收集训练过程指标,包括计算图、标量数据(loss/accuracy)、直方图数据(梯度/权重)、性能数据,并通过Web UI界面展示
(2)可以通过MindInsight提供的命令行搜索超参,迁移模型。通过收集训练的超参、数据集、数据增强信息实现模型溯源,并可在多次训练间进行对比
③Mindspore Insight的运行流程
(1)训练信息收集:用户通过callback接口,收集训练指标,用户也可以按需收集自定义信息
· 通过summary算子收集计算图中信息
· 通过Python接口收集Python层信息
(2)训练日志生成:用户在训练过程中收集到的过程信息,最终会生成训练日志
(3)训练信息展示:MindInsight通过打开并解析训练日志,以图形化方式展示训练过程信息
④MindInsight的内容
(1)训练过程可视 (收集summary数据、查看训练看板)
(2)训练溯源及对比
(3)性能调优、超参调优
(4)精度调试
(5)模型迁移
(6) Mindspore Data:数据处理
(7) Mindspore Armour:AI安全机制
(1) 静态图
①静态图:这流程我们会构建一幅图,要将数据导入图才会开始计算,计算完成后才能看结果和值
该模式将计算图的构建和计算分开,在构建阶段,根据完整的计算流程对原始的计算图(即前面的动态计算图)进行优化和调整得到更省内存和计算量更少的计算图,这个过程称为编译,编译之后图的结构不再发生改变,也就是所谓的“静态”
②在调试上比较困难,但效率比较高。适用于训练完模型以后,对模型进行部署和推理所使用
优点:高效的图编译优化,性能高
缺点:难以调试
③静态图的应用
静态图应用典型框架:Tensorflow
TensorFlow:输入数据经过层层计算,像水流一样流向输出节点,最终得到输出数据的整个过程。从神经网络框架的角度而言,定义好计算图也就意味着框架能够在运行时知道计算图的所有细节,就能对计算图进行更深层次的优化
运行高效,整图编译执行
(2) 动态图
①动态图:实时查看每个节点输出
特点是计算图的构建和计算同时发生,在计算图中定义一个Tensor时,其值就已经被计算且确定
②在调试模型时较为方便,能够实时得到中间结果的值,有助于对代码Debug调试。但由于所有节点都需要被保存并且可以被访问,导致我们难以对整个计算图进行优化
优点:灵活的开发调试
缺点:难以优化
③动态图应用
动态图应用典型框架:PyTorch
PyTorch:采用命令式编程,计算图动态生成,每执行一句语句,系统便构建出相应的计算图,且数据在实时进行计算
PyTorch是一个针对深度学习, 并且使用GPU和CPU来优化的tensor library
· PyTorch特性:
(1)Python优先:PyTorch不是简单地在C++框架上绑定Python。PyTorch从细粒度上直接支持Python的访问。你可以像使用Numpy或者Scipy那样轻松地使用PyTorch
(2)动态神经网络:TensorFlow1.X运行必须提前建好静态计算图,然后通过feed和run重复执行建好的图。但PyTorch却不需这么麻烦,PyTorch的程序可以在执行时动态构建/调整计算图
(3)易于Debug:PyTorch在运行时可以生成动态图,开发者可以在调试器中停掉解释器并查看某个节点的输出
(4)PyTorch提供了支持CPU和GPU的Tensor,可以加速计算
调试灵活,单算子/子图执行
(3) MindSpore的动静态图
①在Mindspore中,静态图又称为Graph模式:静态图模式或者图模式,将神经网络模型编译成一整张图,然后下发执行。该模式利用图优化技术提高运行性能,同时有助于规模部署和跨平台运行
(1)通过set_context(mode=GRAPH_MODE)默认模式设置为静态图模式
(2)也可以使用@ms_function装饰器来调用Graph模式,对局部函数
在Graph模式,Mindspore通过源码转换的方式,将Python的源码转换成IR(MindIR),再在此基础上对计算图优化,最终在硬件设备上执行优化后的图
②在Mindspore中,动态图又称PyNative模式:动态图模式,将神经网络中的各个算子逐一下发执行,方便用户编写和调试神经网络模型
(1)通过set_context(mode=PYNATIVE_MODE)设置为动态图模式
在PyNative模式,用户可使用完整PythonAPI,动态图没有事先构建好完整计算图,框架或底层也没有对它做优化,效率不如静态图
③动静统一:Mindspore针对动态图和静态图模式,使用相同API
④异构并行训练:将计算图切分,将内存消耗型子图交给CPU,将计算密集型子图交给Ascend。Ascend和CPU并行执行
(1) DeepSpeed
DeepSpeed是大规模模型分布式训练的工具。旨在提高大规模模型训练的效率和可扩展性。它通过多种技术手段来加速训练,包括模型并行化、梯度累积、动态精度缩放、本地模式混合精度
DeepSpeed还提供了一些辅助工具,如分布式训练管理、内存优化、模型压缩等,帮助开发者更好地管理和优化大规模深度学习训练任务
DeepSpeed基于PyTorch构建,只需要简单修改即可迁移
(2) Megatron-LM
Megatron-LM是由于分布式训练大规模语言模型的架构,针对Transformer进行了专门的优化
· 提出了通过将矩阵分块提高并行度的方法
· 对于分布式中的重要的设计,如Tensorparallel、Pipeline parallel、Micro batch size等进行分析。同时提出更精细的pipeline结构与communication模式
(3) MindFormers大模型开发套件
MindSpore Transformers套件的目标是构建一个大模型开发、训练、微调、评估、推理、部署的全流程开发套件,提供业内主流的Transformer类预训练模型和SOTA下游任务应用,涵盖丰富的并行特性
· 大模型开发
(1)集成SOTA大模型结构,提供模块化、配置化开发方式
(2)提供各类高阶API模块,使能用户自定义灵活开发
(3)提供Profile性能分析、MindInsight可视化调优能力,使能大模型调试调优
· 大模型训练
(1)提供各领域大模型预训练任务流、训练流程、接口统一化
(2)提供昇思Mindspore多维并行和内存优化配置化开发接口,使能大模型高效并行训练
(3)提供线下物理机集群和人工智能计算中心(AICC)集群训练能力,使能大模型高效稳定训练
· 下游任务
(1)提供各领域下游任务微调、评估推理任务流,使能大模型效果快速验证和推理体验
(2)提供huggingface权重转换能力,使能第三方大模型生态无缝衔接
(3)提供各领域预训练及下游任务权重自动加载能力,使能大模型下游任务评测复现
(1) 知识图谱概述:本质上是语义网络的知识库,它以结构化的形式描述客观世界中各种概念、实体及其之间的关系,以此构成一张语义网络,节点表示实体,边由其属性或实体间关系构成
①语义网络:用图来表示知识的方式,由互相连接的节点和边组成,节点表示概念或对象,边表示关系
②知识库:存储了很多数据
③实体:存在于现实世界中并且可与其他物体区分开来的物体
④属性:把具体事物的性质与关系叫做事物的属性
⑤概念:具有同样特征的实体构成的集合,抽象概念,如概念关键词
⑥本体:是某个领域中抽象概念的集合,能够描述某个范围内一切事物的共有特征及事物间的关系
(2) 知识图谱的构建流程
①确定领域:确定知识图谱面向的专业领域,越大不一定越好
②了解领域:充分了解知识图谱针对的领域,知识体系构建
③数据获取:结构化数据、半结构化数据、非结构化数据
④信息抽取:属性抽取、关系抽取、实体抽取
⑤知识映射及融合:知识映射、知识融合
⑥知识加工及推理
⑦图谱应用