深度学习框架层次结构

本文介绍目前主流的深度学习框架层次结构,包括TensorFlow2、PyTorch、MindSpore


TensorFlow层次结构

 
TensorFlow2的层次结构为:硬件层,内核层,低阶API,中阶API,高阶API。
硬件层:TensorFlow所支持的硬件如CPU,GPU,TPU。
内核层:内核是C++ 实现的,包括函数库,本地运行时,分布式运行时,OP定义及其Kernel的实现等。
低阶API:低阶API也被称为算子,封装了C++内核的低阶API,主要包括各种张量,算子,计算图,自动微分等。如tf.nn.matmul、tf.Variable、tf.GradientTape,tf.constat等。
中阶API:中阶API是对低阶API的封装,封装了以层为核心的神经网络层,TensorFlow2的中阶API是Keras的layers,实现了各种模型层、损失函数、优化器、数据管道等。如tf.keras.layers.Conv1D、tf.keras.lossed.Loss、tf.data.Dataset、tf.keras.optimizers。
高阶API:高阶API是按照面向对象方式封装的高级API,TensorFlow2的高阶API是Keras的Model,如tf.keras.models。
深度学习框架层次结构_第1张图片
上图很清楚的展示了TensorFlow的层次结构。Keras和TensorFlow的关系很明显了,Keras是对TensorFlow提供的低阶API进行封装,TensorFlow属于框架(Google开源的第二代用于数字计算(numerical computation)的软件库),Keras属于深度学习编程库,两者的定位不同。框架提供了低阶API其粒度较小,使用灵活,方便用户组合;框架除了应用于深度学习、机器学习方面还可以用于科学计算、高阶求导等。深度学习编程库,则是使用了框架提供的低阶API,编写了适用于深度学习领域的高层次封装库。

PyTorch层次结构

 
PyTorch的层次结构包括,硬件层、内核层、低阶API、中阶API、高阶API。
硬件层:Pytorch支持的硬件CPU、GPU。
内核层:C++ 实现的内核包括,内存管理,即时编译等。
低阶API:Python实现的算子,提供了封装C++内核的低级API指令,主要包括各种张量操作算子、自动微分、变量管理。如torch.tensor、torch.autograd.grad、nn.Module。
中阶API:Python实现的模型构建组件,对低级API进行了类的封装,主要包括各种模型层,损失函数,优化器,数据管道等等。如torch.nn.Linear、torch.optim.Adam、torch.utils.data.DataLoader。
高阶API:Python实现的模型接口。Pytorch没有官方的高阶API。可以自己封装一些高阶操作,如训练接口,类似Keras的fit函数。

MindSpore层次结构(来自官网)


MindSpore向用户提供了3个不同层次的API,支撑用户进行网络构建、整图执行、子图执行以及单算子执行,从低到高分别为Low-Level Python API、Medium-Level Python API以及High-Level Python API。
深度学习框架层次结构_第2张图片
Low-Level Python API
第一层为低阶API,主要包括张量定义、基础算子、自动微分等模块,用户可使用低阶API轻松实现张量定义和求导计算,例如用户可通过Tensor接口自定义张量,使用ops.composite模块下的GradOperation算子计算函数在指定处的导数。
Medium-Level Python API
第二层为中阶API,其封装了低阶API,提供网络层、优化器、损失函数等模块,用户可通过中阶API灵活构建神经网络和控制执行流程,快速实现模型算法逻辑,例如用户可调用Cell接口构建神经网络模型和计算逻辑,通过使用loss模块和Optimizer接口为神经网络模型添加损失函数和优化方式,利用dataset模块对数据进行处理以供模型的训练和推导使用。
High-Level Python API
第三层为高阶API,其在中阶API的基础上又提供了训练推理的管理、混合精度训练、调试调优等高级接口,方便用户控制整网的执行流程和实现神经网络的训练推理及调优,例如用户使用Model接口,指定要训练的神经网络模型和相关的训练设置,对神经网络模型进行训练,通过Profiler接口调试神经网络性能。
MindSpore的层次结构和其他框架也是类似,官网只写出了低阶,中阶,高阶(Python层面的接口),在低阶之下也有C++ 实现的各类函数库;再往下到硬件层MindSpore支持CPU、GPU、Ascend。

总结


目前各类深度学习框架在层次结构上大都类似,在用户层面提供用户友好的Python接口,与用户层交互的是硬件友好的C++/C来保证高效。各个框架都有低阶API,低阶API使用灵活粒度较小,因此对低阶封装有了中阶API,中阶封装有了高阶API,使得用户开发更高效。

 欢迎访问我的个人博客,此系列文章在博客中第一时间连载。

我的GitHub

你可能感兴趣的:(Deep,learning,机器学习,tensorflow,深度学习,keras)