机器学习系统、使用方法及存储介质与流程-开云(中国)Kaiyun·官方网站 -APP下载

文档序号:34131600发布日期:2023-11-28阅读:979来源:国知局


1.本技术实施例涉及机器学习领域,机器及存并且更为具体地,学习系统涉及一种机器学习系统、使用使用方法及存储介质。储介程


背景技术:

2.随着机器学习技术的质流发展,涌现出多种机器学习框架,机器及存供开发者构造机器学习模型。学习系统但是使用,不同机器学习框架算子api的储介程参数命名和使用规则不同,相似的质流算子和api提供的功能也有差异。
3.相关技术通过在机器学习框架上层的机器及存封装,实现对多种机器学习框架的学习系统兼容。通常来讲,使用系统调用的储介程层级越接近底层,系统越灵活,质流因此相关技术基于上层的兼容会降低机器学习系统的灵活性和性能。


技术实现要素:

4.本技术实施例提供了一种机器学习系统、使用方法及存储介质,可以兼容现有各种机器学习框架,且减少了兼容所带来的灵活性和性能的损失。
5.第一方面,本技术实施例提供一种机器学习系统,包括:算子层,包括一个或多个机器学习算子;兼容层,用于将机器学习框架中的机器学习算子转换成所述算子层中的机器学习算子。
6.可选地,作为一种可能的实现方式,所述算子层支持用户对所述算子层中的机器学习算子的直接调用。
7.可选地,作为一种可能的实现方式,还包括:公共层,包括公共api和/或公共类,所述算子层中的机器学习算子是基于所述公共层中的代码实现。
8.可选地,作为一种可能的实现方式,还包括:硬件加速层,包括接口和/或指令,所述机器学习系统通过所述接口和/或指令调用所述硬件加速层。
9.可选地,作为一种可能的实现方式,所述机器学习框架为深度学习框架。
10.可选地,作为一种可能的实现方式,所述算子层包括第一算子和第二算子,所述第一算子和第二算子兼容不同的机器学习框架。
11.第二方面,本技术实施例提供一种机器学习系统的使用方法,包括:接收机器学习框架中的机器学习算子的调用请求;将所述机器学习框架中的机器学习算子转换成算子层中的机器学习算子。
12.可选地,作为一种可能的实现方式,所述算子层支持用户对所述算子层中的机器学习算子的直接调用。
13.可选地,作为一种可能的实现方式,所述算子层包括第一算子和第二算子,所述第一算子和第二算子兼容不同的机器学习框架。
14.第三方面,提供一种计算机可读存储介质,其上存储有可执行代码,当所述可执行代码被执行时,能够实现如第二方面所述的方法。
15.第四方面,提供一种计算机程序产品,包括可执行代码,当所述可执行代码被执行时,能够实现如第二方面所述的方法。
16.本技术实施例对算子层的机器学习算子进行优化,通过兼容层在各种机器学习框架中调用底层的同一套机器学习算子。通常来讲,系统调用的层级越接近底层,系统越灵活。因此与相关技术在上层兼容多种机器学习框架的方案相比,本技术实施例兼容多种框架的机器学习系统可调用底层算子,有助于减少兼容所带来的灵活性和性能的损失。
附图说明
17.图1是机器学习模型开发的简要流程的示意图。
18.图2是不兼容的深度学习系统的架构示意图。
19.图3是相关技术提供的基于keras的可兼容的深度学习系统架构示意图。
20.图4是相关技术提供的基于onnx的可兼容的深度学习系统架构示意图。
21.图5是本技术一实施例提供的机器学习系统的结构示意图。
22.图6是本技术另一实施例提供的机器学习系统的结构示意图。
23.图7是本技术又一实施例提供的机器学习系统的结构示意图。
24.图8是本技术一实施例提供的深度学习系统的架构示意图。
25.图9是本技术一实施例提供的代码文件的结构示例图。
26.图10是本技术实施例提供的机器学习系统使用方法的流程示意图。
具体实施方式
27.机器学习作为实现人工智能(artificial intelligence,ai)的主要途径,在许多领域得到了广泛应用。近些年来,深度学习(deep learning,dl)已成为机器学习领域一个新的研究方向。深度学习在机器视觉、自动驾驶、自然语言处理等领域都取得了良好的效果。
28.下面结合附图,对机器学习在实际应用中的相关技术进行说明。
29.图1是机器学习模型开发的简要流程的示意图,机器学习模型的开发大致可以依次分为预研、训练、测试、部署等阶段。
30.参见图1,在步骤s110,预研阶段主要包含搭建机器学习模型结构和数据集,例如编码构造机器学习模型等。
31.在步骤s120,采用步骤s110的数据集对机器学习模型进行训练。
32.在步骤s130,对步骤s120的机器学习模型进行测试。
33.在步骤s140,判断模型是否达标。如果模型达标,表现稳定,则执行步骤s150。如果模型不达标,则回到步骤s110。
34.在步骤s150,将达标的机器学习模型根据实际应用的需求进行部署。
35.在步骤s160,结束机器学习模型的开发流程。
36.步骤s110~步骤s130的三个阶段通常会作为一个整体进行多次迭代,直至模型表现稳定达标。因此,这三个阶段消耗的人力、算力都比较大。相对而言,步骤s150的部署阶段以及后续维护期间的消耗较少。因为在设计阶段通常已经考虑到了长期运行的成本以及产品平台的实际情况,并对最终部署模型的算力在精度达标的前提下施加了一些设计限制。
37.为了提高机器学习模型的开发效率,减少前三个阶段的人力、算力消耗,开发者一般基于合适的机器学习编程框架进行模型结构的设计。
38.随着机器学习领域的发展,多种机器学习编程框架不断涌现,以达到不同的研究目的。以深度学习为例,现有用于深度学习的机器学习框架包括tensorflow、pytorch、paddlepaddle、mindspore、cntk等。但是,各框架算子应用编程接口(application programming interface,api)的参数命名和使用规则各不相同,造成机器学习领域开发的碎片化。例如,当前学术论文代码多基于pytorch,而工业界硬件部署多基于tensorflow。如果要将最新的科研成果转化到实际生产中(反之亦然),则需要开发者同时对机器学习算法的数学背景、编程实现以及多种框架的区别具备深入的了解,且会耗费大量的时间精力。因此,开发者减少了专注于提升算法和产品本身的时间,阻碍了机器学习的进一步快速发展和应用。
39.另一方面,多种框架之间,相似的算子和api提供的功能也未必相同。以卷积运算为例,教科书中的卷积(convolution)一般可以简单表示为y=w
t
x,即卷积核(kernel)w先转置(transpose)为w
t
(
t
代表转置),然后再与输入图像x进行卷积,得到输出张量y。一些框架的卷积算子会基于教科书的方法进行计算。但tensorflow的卷积(以conv2d算子实现)并非如此,而是直接对原始的图像和卷积核做了卷积(可以简单表示为y=xw)。由于tensorflow研发厂商在手机领域和工业界机器学习开发中等相关领域有较多支持者,tensorflow的用户相对较多,导致tensorflow这种与原始数学定义不符的实现在无意中成为了主流。因此,由于某种框架相比其他同类框架更为流行,可能导致前者并非公允的行为变成至少是某一领域范围内(若非整个学术界或工业界的话)的事实标准。
40.在机器学习快速发展的多年来,机器学习领域的碎片化问题对其发展产生了负面影响,业内技术人员相继提出了一些可兼容多种机器学习框架的技术方案。为便于理解,下面以深度学习系统的具体架构为例,结合图2~图4,对相关技术提供的解决方案进行具体地说明。
41.图2是不考虑兼容的深度学习系统的架构示意图。针对图2中的系统架构,按从底层到顶层的架构层级进行说明。
42.最底层为硬件层21,深度学习系统架构一般可以同时支持在不同时期的各类硬件平台上的运行。各类硬件平台例如中央处理器(central processing unit,cpu)、图形处理单元(graphic processing unit,gpu)、神经处理单元(neural processing unit,npu)、张量处理单元(tensor processing unit,tpu)、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)以及微控制器单元(microcontroller unit,mcu)等。
43.硬件层21的上一层可以称为硬件加速层(图中未示出)。硬件加速层可以包含硬件加速库22和编程语言标准库23。硬件加速库22通常是硬件商基于自身特性开发的,例如eigen、mkl、cudnn、tensorrt等。硬件加速库22具有可用于调用的接口和/或指令。在深度学习系统的底层可以分情况调用不同的硬件加速库22。
44.编程语言标准库23可以包含不同语言的标准模板库,例如(c++)标准模板库(standard template library,stl)等。编程语言标准库23可以与不同函数组成相应的算子。
45.硬件加速层的上一层为dl框架层24。开发者可以根据自身的实际需求,选择一种合适的框架搭建模型层25的各种模型。目前,各种深度学习框架在开源模式下经历着活跃开发、快速迭代的发展状态,新的深度学习框架也在不断涌现。图2的dl框架层24仅是示意性地列出了几种深度学习框架,例如tensorflow、pytorch、cntk、theano等。
46.dl框架层24的上一层为模型层25。模型层25包括开发者基于其选择的深度学习框架开发的各种应用模型。各种应用模型可以包括卷积神经网络(convolutional neural network、cnn)、循环神经网络(recurrent neuralnetwork,rnn)等可用于深度学习的深度神经网络(deep neural network,dnn)。
47.模型层25的上一层为应用层26。应用层26主要体现模型的应用领域。例如可以将模型层25的模型用于人脸识别、ai摄影、机器翻译等ai项目中。
48.图3是基于keras的可兼容的深度学习系统架构示意图。keras是工程师chollet基于python编写的开源深度学习框架。keras的目标是快速实现cnn、rnn等dnn,专注于用户友好、模块化和可扩展性。
49.对比图2和图3,在dl框架层24和模型层25之间建立了抽象层31。keras是位于抽象层31的一种神经网络(neural network,nn)层级抽象。keras可以对tensorflow、cntk、theano等不同深度学习框架后端提供的算子进行高级的抽象、封装和调用。因此,keras的同一套api可以同时兼容多种深度学习框架。
50.keras的封装简洁,开发者易于上手,在早期算法快速迭代的验证阶段可以降低模型的开发强度。但是,keras过于简洁的封装隐藏了大量算子的实现细节,且对算子的调用逻辑较为固定,难以实现定制化功能,以及从底层进行性能优化。因而相比原生深度学习框架,可以兼容多种框架的keras存在灵活性和性能较为低下的问题。一般地,开发者在前期验证阶段采用keras,到模型部署阶段又为了性能回到较为底层的原生深度学习框架。针对这种情况,一些使用者在keras的基础上进行了改进。例如专利cn112784959a提出的深度学习系统架构,适当地从keras中减少了抽象层级,从而提升性能。
51.图4是相关技术提供的基于开放神经网络交换格式(open neural network exchange,onnx)的深度学习系统架构示意图。onnx被引入深度学习系统架构中,用以作为兼容tensorflow、pytorch、caffe2、cntk等多种深度学习框架的开放式文件格式。onnx可以在训练后存储训练好的深度学习模型信息,从而使得不同的深度学习框架可以输出相同格式并交互。
52.对比图2和图4,onnx位于dl框架层24和模型层25之间的模型交互格式层41。基于不同深度学习框架搭建的应用模型,采用相同文件格式进行存储,可以降低模型在不同框架之间交互的门槛。
53.但是,onnx的引入仅仅改善了整个深度学习模型开发流程中各阶段之间的模型存储和交互。对于图1中消耗算力和人力最多的预研、训练和推理等阶段,仍然需要使用原本的深度学习框架。因此相比图3基于keras的方案,图4基于onnx的方案对于解决碎片化的作用是更有限的。进一步地,由于兼容的各个深度学习框架均处于活跃开发、快速迭代的状态,很难保证onnx的开发效率与所有框架保持同步。onnx的开发效率一旦低于深度学习框架的更新速度,可能无法实现让同一个文件格式兼容所有框架的性能,也无法进一步开发新的功能。因此,功能和性能上的落后,可能降低开发者对onnx的使用意愿。
54.图3基于keras对兼容多种深度学习框架的尝试,是自下而上从深度学习框架内部开始的。图4引入onnx的尝试,则是自上而下从深度学习框架外部着手。图3和图4的兼容方案都是在深度学习框架之上、用户模型之下的层级,尝试建立深度学习框架和用户模型的连接,从而降低构造和/或交互模型的门槛。但是,模型的运行(训练和推理)最终还是需要调用现有深度学习框架的底层算子(卷积、池化、矩阵乘、转置等较小单位的运算)。为了兼容多种框架,在深度学习框架和模型层级之间进行的封装隐藏了算子的实现细节,且算子调用逻辑固定,因此会低于原生深度学习框架的灵活度和性能。
55.现有各种深度学习框架一般已经是在自身设计所限之下,在性能和易用性之间的最佳平衡点。为了满足兼容需求,任何深度学习框架无法融合进去的封装都降低了灵活度和性能,因此需要从更加底层的位置着手。从软件开发可以优化的层级来看,硬件加速库通常是硬件商基于自身特性开发的,进一步优化的空间不大。为了提高性能,只能从深度学习框架入手。但多年来各个深度学习框架都积累了大量建基于此的代码资源,若从头开发一套新的深度学习框架,则上层的各个模型、应用也得相应适配,是对资源的极大浪费。
56.前文以深度学习为例,介绍了相关技术提供的机器学习系统中,为兼容多种机器学习框架导致灵活性和性能的损失,而从头开发一套新的机器学习框架又很浪费资源。本技术实施例提出一种新的兼容多种机器学习框架的算子实现方法,通过对各算子本身的优化,辅以对多种机器学习框架的兼容层,实现一套简洁、轻量化的机器学习系统。
57.下面结合图5~图7,对本技术实施例提供的机器学习系统的结构进行详细地举例说明。显然地,所描述的实施例仅是本技术一部分实施例,而不是全部的实施例。
58.参见图5,机器学习系统500包括算子层510和兼容层520。算子层510包括一个或多个机器学习算子。
59.机器学习系统500可以是各种实现机器学习算法的系统。在一些实施例中,机器学习是深度学习,机器学习系统500是深度学习系统。
60.机器学习系统500可以支持任意一种或几种硬件平台的运行,包括但不限于cpu、gpu、npu、tpu、dsp、asic、mcu等。
61.机器学习系统500可以按需支持任意一个或多个机器学习模型和应用。
62.算子层510可以用多种编程语言实现。编程语言包括但不限于c、c++、java、objective-c、c#、swift、python等之中的任意一种或几种。编程语言可以根据运行平台的实际需求机能而定。在一些实施例中,算子层510可以仅使用编程语言标准库实现底层的机器学习算子,提升了代码的可读性和通用性。
63.算子层510中的机器学习算子可以有多种实现方式。在一些实施例中,可以参考成熟机器学习框架的算子列表,实现部分或全部算子。例如在深度学习系统中,可以参考tensorflow、pytorch等深度学习框架的算子列表。
64.在另一些实施例中,算子层510也可以根据实际需要添加自定义算子。算子内部的实现逻辑可以参考成熟机器学习框架,也可以自行按需编写。
65.机器学习算子可以包括运算、卷积、池化、矩阵乘(matmul)、记忆单元等一个或多个算子。对于每个算子,可以参考已有的大量开源机器学习框架,通过多种方式实现。在一些实施例中,可以用编程语言原生的能力来实现。在另一些实施例中,可以利用一些公共api和类,以及编程语言原生的能力,来实现算子所需的运算逻辑。例如,图6为包括公共层
的机器学习系统,后文将具体介绍。
66.机器学习算子也可以在算子层510进行组合。在一些实施例中,可以将应用模型中常用的组成单元利用各基础算子组合成融合算子,一并提供给上层使用。例如,dnn中常用的组成单元包括全连接层(fully connected,fc)、长短期记忆单元(long short-term memory,lstm)、循环门控单元(gate recurrent unit,gru)、残差单元等。以fc为例,fc算子由矩阵乘(matmul)、加法(add)和激活函数(可由用户指定,包括但不限于sigmoid、relu、tanh、softmax等)等机器学习算子组成,则可以将这三个基础算子用fc层的逻辑组合后,作为融合算子封装。对机器学习算子进行组合,可以进一步提升用户使用上的便利性。
67.算子层510可以支持多种调用机器学习算子的方式。算子层510可以支持用户直接调用算子层510中的机器学习算子。算子层510可以自行实现各底层的机器学习算子,从而可与具体的机器学习框架解耦。因此,用户可以不经过机器学习框架,直接调用机器学习算子,从而达成对机器学习系统所有软件层级由下至上的自主可控。
68.算子层510也可以支持开发者用自身熟悉的机器学习框架,通过兼容层520调用机器学习算子。
69.兼容层520可以支持一种或多种机器学习框架的兼容。例如在深度学习系统中,兼容层520可以兼容的深度学习框架包括但不限于tensorflow、pytorch、paddlepaddle、cntk等现有框架以及目前尚未出现的未来框架。
70.兼容层520可以按需选择兼容一个或多个机器学习框架。在一些实施例中,兼容层520可以只兼容使用率较高的几个机器学习框架。
71.兼容层520可以接收机器学习框架中的机器学习算子的调用请求,将机器学习框架中的机器学习算子转换成算子层510中的机器学习算子,然后调用算子层510中的机器学习算子。在一些实施例中,如果某些机器学习框架需调用某些机器学习算子,兼容层520可以针对每一种机器学习框架、每一个机器学习算子编写一套兼容代码。以深度学习系统为例,假设算子层510包含加法zadd算子(现有加法算子为add,为避免混淆,可以将自主实现的add算子重命名为zadd)。如果tensorflow调用算子层510中的zadd算子,可以将tensorflow输入的张量转换为算子层510的数据格式,然后传入算子zadd中。将zadd运算后的数据再转换为tensorflow的张量格式,并按照tensorflow对自定义算子的要求,进行适当的注册工作。这样,就可以将zadd算子编译为tensorflow可调用的自定义算子。
72.作为一种可能的实现方式,兼容层520可以仅涉及较为轻量化的数据格式转换和算子注册等操作,核心运算仍在算子层510的机器学习算子。因此,可以在较少的性能损失下同时兼容多套机器学习框架,提升了机器学习系统的易用性,且无需对基于现有机器学习框架的上层应用代码做大量修改。
73.兼容层520可以根据每个机器学习算子不同的实际需求,选择每个机器学习算子兼容相同或不同的机器学习框架的集合。在一些实施例中,算子层510中的某个深度学习算子可以兼容tensorflow、pytorch和cntk,而另一个深度学习算子可以只兼容tensorflow和paddlepaddle。进一步地,每个算子按需分别指定所兼容的深度学习框架集合,可以去除多余的兼容需求,提升编译效率,降低代码出错风险。
74.兼容层520可以利用算子层510中的机器学习算子对硬件进行调用。在一些实施例中,算子层510可以通过图6公共层对硬件进行直接调用,具体在下文结合图6进行说明。在
另一些实施例中,算子层510也可以通过公共层调用硬件加速库,来实现对硬件的调用,具体在后文结合图7进行说明。
75.图6中的机器学习系统600包括公共层610、算子层620和兼容层630。算子层620和兼容层630与图5中相应的算子层510和兼容层520相同,在此不再赘述。
76.公共层610位于算子层620的下层,因为公共层610的内容相比算子层620更加基础。在一些实施例中,算子层620中所有的机器学习算子原则上都应该由公共层610中的函数,辅以编程语言标准库中的功能组成。
77.公共层610包括公共api和/或公共类。在一些实施例中,公共api和/或公共类可以实现一系列基础数据存储和运算接口。这些基础数据存储和运算接口可以包括张量形状、张量读写、四则运算、矩阵运算、实用函数等。
78.公共api和/或公共类可以和编程语言原生的能力一起实现算子所需的运算逻辑。以加法算子为例,一旦确定其接口为两输入、单输出,便可以利用在公共类中已经实现的广播(broadcasting,用于统一输入维度)实用函数和加法运算函数,很快实现算子层620所必须的功能。
79.公共层610可以根据实际开发需要,包含更多或更少的公共功能。
80.公共层610和硬件之间,可以具有或不具有硬件加速层。在一些实施例中,公共层610可以直接和机器学习系统的硬件相连。公共层610实现公共类时可以直接调用硬件的接口和/或指令。例如低功耗的mcu一般不为ai应用提供专门的加速库。
81.在另一些实施例中,公共层610可以通过硬件加速层与硬件相连。公共层610可以在硬件加速库可用的情况下接入加速接口。
82.图7是公共层与硬件之间具有硬件加速层的结构示意图。参见图7,机器学习系统700包括硬件加速层710、公共层720、算子层730以及兼容层740。其中,硬件加速层710位于公共层720的下层。
83.硬件加速层710包括接口和/或指令,机器学习系统通过接口和/或指令调用硬件加速层710。
84.硬件加速层710中的硬件加速库可以由公共层720进行调用。常见的硬件加速库已在前文描述。在一些实施例中,硬件商提供了相应的硬件加速库,公共层720可以根据实际效能情况,选择调用硬件加速库的接口和/或指令。
85.图5至图7描述的多种机器学习系统,在同一套机器学习算子代码的基础上添加对各个机器学习框架的兼容层代码,通过引入算子层面的优化,解决了相关兼容性技术的灵活度和性能问题。
86.下面结合图8和图9,以深度学习系统为例,对本技术实施例中的技术方案进行更加清楚、完整地描述。
87.图8为本技术一实施例提供的深度学习系统的架构示意图,图9是本技术一实施例提供的代码文件的结构示例图。
88.参见图8,由底层到顶层分别为硬件层21、包含硬件加速库22和编程语言标准库23的硬件加速层、包含原生公共api和类的公共层81、包含原生算子的算子层82、dl框架兼容层83、dl框架层24、模型层25以及应用层26。
89.硬件层21、硬件加速库22和编程语言标准库23、dl框架层24、模型层25和应用层26
已在图2中分别进行说明,在此不再赘述。
90.公共层81中保留了极少量的公共api和/或公共类。公共api和/或公共类包含可以实现一系列基础数据存储和运算的接口,也可以称为原生公共api和类。
91.结合图9,代码结构包含底层91、公共层92和算子层93。公共层92中包括可以实现张量形状、张量读写、四则运算、实用函数等存储和运算的接口。例如,可以实现张量形状的z_shape.h,可以实现张量读写的z_bcast.h,可以实现四则运算的z_math.h,可以实现广播实用函数的z_bcast.h等。
92.图8算子层82中的算子也可以称为原生算子。原生算子可以包括加法算子add、卷积算子conv2d、池化算子pooling2d、矩阵乘matmul、转置transpose等底层算子。
93.结合图9,算子层93的算子包含多个机器学习算子和函数,用以实现不同的运算。例如,图9中的算子1可以是加法算子add、算子2可以是平均池化算子avg_pooling,也可以是函数argmax等。
94.dl框架兼容层83可以针对算子层中的不同算子,编写针对不同深度学习框架的兼容代码。根据不用深度学习框架的规范,dl框架兼容层83可以使用算子层中同一套算子的运算逻辑去兼容多种深度学习框架。
95.在一些实施例中,产品代码可以将算子与深度学习框架进行分层,也可以在算子内部包含按深度学习框架区分的兼容代码。例如,图9的结构中,在每个算子或函数下设计兼容不同深度学习框架的代码文件。以图9算子层93下的算子1为例,算子1可以是加法算子add。算子1下的兼容框架1可以是兼容tensorflow的代码文件。文件名可以是zadd_compat_tf.cc,用于将输入的张量转换为公共张量类的数据格式。再例如,算子1下的兼容框架2可以兼容torch的代码文件,文件名可以是zadd_compat_torch.cc。
96.dl框架兼容层83可以根据每个算子不同的实际需求,选择每个算子兼容的深度学习框架。例如在图9所示的结构中,算子1可以兼容框架1和框架2,框架1和框架2可以是tensorflow和torch。同时,算子2可以兼容框架3和框架1,框架3可以是paddlepaddle。在一些实施例中,无论经过何种深度学习框架都使用的是同一算子,运行日志可能会输出一部分或全部相同的内容,以及/或者出现“core op”、“enter pytorch compatibility layer”等字样。
97.回到图8,dl框架兼容层83和dl框架层24均为可选层。开发者在构造深度学习模型时,如果直接调用算子层82的原生算子,可以不设计dl框架兼容层83和dl框架层24。相应地,开发者也可以选用熟悉的深度学习框架,通过dl框架兼容层83相应该框架的方式调用原生算子。
98.硬件加速层中的硬件加速库22也是可选的。当算子层82通过公共层81调用硬件时,如果硬件商没有提供相应的硬件加速库22,公共层81在实现原生公共类时可以直接调用硬件原生的接口和/或指令。
99.图9所示的代码文件结构可以按编程语言c++展示如下。应理解,下文的代码文件结构仅是作为展示样例,并不限制其只能用c/c++进行实现。
[0100][0101][0102]
图8所示的深度学习系统在dl框架层24以下的算子层82进行优化和兼容多框架的尝试,避免了在上层进行兼容所带来的灵活性和性能损失,有望提升开发者的使用意愿。另外,从算子层面入手,实现了深度学习系统各软件层级的自主可控。进一步地,将深度学习框架重新划分为公共层81、算子层82和dl框架兼容层83,解耦相关技术算子实现中的繁杂逻辑,简明清晰,适合需要了解算子内部逻辑的学习者,并以灵活、轻量化的方式实现对多种深度学习框架的兼容。
[0103]
另一方面,图8所示的深度学习系统在进行底层硬件开发时,可以重点关注运算本身的逻辑,而非跨平台的兼容性,解决了相关技术中硬件开发难度大的问题。以兼容tensorflow等多种深度学习框架的npu的开发工作为例,由于移动平台允许经编译器转换为某种唯一支持的格式,npu可能不直接运行tensorflow。在相关技术中,tensorflow为了同时支持在不同时期的cpu、gpu、tpu、移动端等各类平台上的运行,在代码中进行了多个层级的抽象和封装,底层分情况调用不同的硬件加速库,顶层则提供较为统一的算子api但保留了大量可配置的参数,导致各个算子的核心运算逻辑散布于tensorflow本身的代码库及其引用的各个第三方库中。因此,工程人员在进行npu的开发工作时,需要对每个算子的内
部运作和所有调用场景具备充分的认识,才能设计场景适应性强的硬件电路。而且深度学习框架的架构对于主要来自硬件开发基础的工程人员来说较为晦涩,开发难度大。对于图8所示的深度学习系统来说,因为是在同一套原生算子代码的基础上添加对各个深度学习框架的兼容层代码,工程人员可以主要关注npu实现原生算子代码的运算逻辑,而较少考虑npu对不同深度学习框架的兼容问题,硬件的开发难度降低。
[0104]
图8所示的深度学习系统考虑到图3和图4两种相关技术在深度学习框架以上的层级进行兼容效果不佳的问题,在底层算子级别使用纯c/c++等原生编程语言实现,仅保留极少量公共api和类,与深度学习框架完全解耦,确保逻辑清晰易懂且运行效率高。进一步地,若想支持算子经某些深度学习框架调用,则针对每一个框架,对每个所需算子增加一个兼容层封装,旨在扩展出每个深度学习框架各自的数据格式要求。这样从深度学习框架的角度来看只是增加了一些自定义算子,而底层调用的则是可以自主实现的算子。
[0105]
图8所示的深度学习系统产品可以使用同一套核心算子兼容多种深度学习框架,将运算与框架代码完全分离,并通过自主开发的深度学习算子以一种核心逻辑支持多种知名深度学习库,如tensorflow、pytorch等。
[0106]
上文结合图1至图9,详细描述了本技术的系统实施例,下面结合图10,详细描述本技术的方法实施例。应理解,方法实施例的描述与系统实施例的描述相互对应,因此,未详细描述的部分可以参见前面装置实施例。
[0107]
图10是本技术实施例提供的机器学习系统的使用方法的示意性流程图。图10的方法包括步骤s1010~s1020。
[0108]
在步骤s1010,接收机器学习框架中的机器学习算子的调用请求。
[0109]
在步骤s1020,将机器学习框架中的机器学习算子转换成算子层中的机器学习算子。
[0110]
可选地,作为一种可能的实现方式,所述算子层支持用户对所述算子层中的机器学习算子的直接调用。
[0111]
可选地,作为一种可能的实现方式,所述算子层中的机器学习算子是基于公共层中的代码实现,所述公共层包括公共api和/或公共类。
[0112]
可选地,作为一种可能的实现方式,所述方法还包括:通过硬件加速层的接口和/或指令调用所述硬件加速层。
[0113]
可选地,作为一种可能的实现方式,所述机器学习框架为深度学习框架。
[0114]
可选地,作为一种可能的实现方式,所述算子层包括第一算子和第二算子,所述第一算子和第二算子兼容不同的机器学习框架。
[0115]
本技术实施例还提供了一种计算机可读存储介质,该计算机存储介质存储有计算机程序,所述计算机程序被执行时,实现前述方法步骤。
[0116]
应理解,在本技术的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本技术实施例的实施过程构成任何限定。
[0117]
在本技术所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的系统实施例仅仅是示意性的,例如,所述层级的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个层级或组件
可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,系统或层级的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0118]
所述作为分离部件说明的层级可以是或者也可以不是物理上分开的,作为层级显示的部件可以是或者也可以不是物理层级,即可以位于一个地方,或者也可以分布到多个网络层级上。可以根据实际的需要选择其中的部分或者全部层级来实现本实施例方案的目的。
[0119]
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本技术实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber line,dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够读取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,数字通用光盘(digital video disc,dvd))或者半导体介质(例如,固态硬盘(solid state disk,ssd))等。
[0120]
以上所述,仅为本技术的具体实施方式,但本技术的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本技术揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本技术的保护范围之内。因此,本技术的保护范围应以所述权利要求的保护范围为准。
网友询问留言已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
技术分类