数据处理方法、计算设备以及智能驾驶设备与流程

文档序号:37194537发布日期:2024-03-01 13:08阅读:13来源:国知局
数据处理方法、计算设备以及智能驾驶设备与流程

本技术涉及计算机,尤其涉及一种数据处理方法、计算设备以及智能驾驶设备。


背景技术:

1、在人工智能(artificial intelligence,ai)、机器学习(machine learning,ml)等领域中,可通过设计或训练不同的ai模型(如深度学习模型、神经网络模型、机器学习模型等)来实现不同的功能。ai模型中一般包括多个算子,算子表示ai模型中对数据进行的计算操作。不同算子之间具有连接关系,表示算子之间的数据传输关系。每个算子可以对输入该算子的数据执行相应的计算操作,并输出对应的计算结果。其中,ai模型的每个算子都需要申请一个输入内存空间来存放输入该算子的数据,并申请一个输出内存空间来存放该算子输出的计算结果。

2、然而,随着ai模型越来越复杂,ai模型中ai算子的类型也越来越多,比如求和算子、卷积算子、非零(nonzero)算子、去重算子等。其中,对于非零、去重这一类输出数据量大小可变的算子,在遍历完输入该算子的每一个数据前,是无法知道会有多少数据输出的,也就无法知道需要为该算子申请多大的输出内存空间。目前,通常是在ai模型的运行过程中,动态地为这类算子进行内存用量的计算,以进行内存的动态分配。然而,在模型运行过程中对内存进行动态分配,会影响内存运行速度,从而导致模型运行效率降低。


技术实现思路

1、本技术提供一种数据处理方法、计算设备以及智能驾驶设备,能够在模型运行前,预先为非零、去重这一类算子分配好足够大的内存空间,而无需在模型的运行阶段再去做内存的动态分配,有效缩短模型的运行时间,提高模型的运行速度。

2、为达到上述目的,本技术采用如下技术方案:

3、第一方面,提供一种数据处理方法,应用于计算设备,该方法包括:获取计算模型,其中,计算模型包括至少一个动态算子,至少一个动态算子中每个动态算子的输入内存空间和输出内存空间为预先配置的内存空间;在计算模型的运行过程中,获取第一动态算子的第一输入和第二输入,第一输入为第一动态算子的输入内存空间中存放的数据,第二输入为第一输入中的有效数据个数,第一动态算子为至少一个动态算子中的一个;根据第一输入和第二输入,执行第一动态算子以得到第一动态算子的第一输出和第二输出,第一输出为第一动态算子的输出内存空间中存放的第一动态算子的运算结果,第二输出为第一输出中的有效数据个数;将第一输出作为第二动态算子的第一输入,第二输出作为第二动态算子的第二输入,执行第二动态算子以得到第二动态算子的第一输出和第二输出,直至遍历计算模型的每个算子,得到计算模型的运行结果,其中,第二动态算子为第一动态算子的下一个算子

4、其中,动态算子为在遍历完输入算子的每一个数据前,无法预先知道具体输出多少数据的算子。如非零、去重、取正数等动态算子。也即,动态算子实际输出数据的多少,与模型运行过程中动态算子实际输入数据的数值有关。因此,在模型运行过程中,动态算子实际输出多少数据并不固定,其可以是动态变化的。

5、上述第一方面的方案中,动态算子的输入内存空间的大小和输出内存空间的大小,是在模型运行前就预先配置好的,其足够大到能覆盖输入的所有情况和输出的所有情况,不会出现数据溢出的问题。这也就意味着,动态算子的实际输入(即输入的有效数据)所占用的内存空间大小,小于或等于预先配置的输入内存空间的大小,动态算子的实际输出(即输出的有效数据)所占用的内存空间大小,小于或等于预先配置的输出内存空间的大小。这也就使得输入内存空间可能存在一部分数据并不是动态算子实际要处理的输入数据。同理,输出内存空间中也可能存在一部分数据并不是动态算子实际输出的数据。这部分数据是没有意义的垃圾值(即无效数据),且容易被当作有效数据以进行动态算子的逻辑运算,造成动态算子的运算结果不正确。

6、因此,上述第一方面的方案中,模型中的每个动态算子通过引入输入的有效数据个数和输出的有效数据个数,以维护模型的运行过程中的有效数据变化,从而模型能够根据输入中的有效数据执行动态算子的逻辑运算,确保了动态算子的运算结果的准确性。同时模型也能够将当前动态算子的输出中的有效数据信息传递至下一个动态算子,避免下一个动态算子出现脏读,进而避免下一个动态算子由于脏读导致的错误运算。如此,本方案在模型运行前,预先为模型中的动态算子分配好足够大的内存空间,而无需在模型的运行阶段再去执行耗时耗资源的内存的动态分配,有效缩短模型的运行时间,提高模型的运行速度。且通过引入输入和输出的有效数据个数,能够有效防止因预分配内存空间较大所导致的脏读出现,确保了模型中算子运算结果的准确性。

7、在一种可能的实施方式中,上述根据第一输入和第二输入,执行第一动态算子以得到第一动态算子的第一输出和第二输出,包括:根据第二输入,确定第一输入中的有效数据;初始化第一动态算子的第二输出;遍历第一输入中的有效数据以执行第一动态算子,以得到第一动态算子的运算结果;根据运算结果,确定第一动态算子的第一输出和第二输出,其中,第一动态算子每运算出一个结果,第二输出的数值加1。如此,在模型的运行过程中,能够只遍历输入内存空间中的有效数据执行动态算子的逻辑运算,无需遍历输入内存空间中的所有数据,避免出现脏读,确保了算子运算结果的准确性的同时,提升了模型运行速度。

8、在一种可能的实施方式中,上述根据第一输入和第二输入执行第一动态算子以得到第一动态算子的第一输出和第二输出,包括:根据第二输入,确定第一输入中的有效数据;初始化第二输入;遍历第一输入中的有效数据以执行第一动态算子,以得到第一动态算子的运算结果;根据运算结果,确定第一动态算子的第一输出,并更新第二输入,其中,第一动态算子每运算出一个结果,第二输入的数值加1;将更新后的第二输入作为第一动态算子的第二输出。如此,多个动态算子的有效数据个数参数可以为同一个,无需每个动态算子都单独分配一个有效数据个数参数来维护各自动态算子的有效数据个数。这样,在执行到相应动态算子时通过重新初始化该有效数据个数参数,即可实现对相应动态算子的有效数据维护,减少了有效数据个数的内存占用。

9、在一种可能的实施方式中,上述数据处理方法还包括:在计算模型的运行过程中,检测当前算子是否配置有第一标识;若配置有第一标识,则确定当前算子的类型为动态算子,当前算子包括第一动态算子。如此,通过对模型中的动态算子添加标识信息,能够将动态算子与模型中的其他算子进行区分。从而模型运行过程中能够通过该标识信息,判断算子内部是否需要引入输入的有效数据个数和输出的有效数据个数,以维护该算子的实际输入数据和实际输出数据。

10、可选地,模型运行过程中,若当前执行到第一动态算子,即上述当前算子为该第一动态算子,则此时可检测到当前算子配置有第一标识,从而可确定当前算子的类型为动态算子,从而可控制当前算子内部引入输入的有效数据个数和输出的有效数据个数,以维护当前算子的实际输入数据和实际输出数据。

11、可选地,模型运行过程中,若当前执行到第二动态算子,即上述当前算子为该第二动态算子,则此时可检测到当前算子配置有第一标识,从而可确定当前算子的类型为动态算子,从而可控制当前算子内部引入输入的有效数据个数和输出的有效数据个数,以维护当前算子的实际输入数据和实际输出数据。

12、在一种可能的实施方式中,除动态算子外,上述计算模型还包括至少一个静态算子。其中,静态算子为能够在模型运行之前根据算子的逻辑运算,预先确定具体输出多少数据的算子。如激活函数sigmoid函数、卷积等静态算子。因此,在模型运行过程中,静态算子实际输出多少数据是固定不变化的。

13、由于静态算子具体输出多少数据能够预先确定,即静态算子需要申请多大的输出内存空间和输入内存空间也能够预先确定,因此,在一种可能的实施方式中,也可以在模型运行前,就预先准确配置好静态算子的输入内存空间的大小和输出内存空间的大小。如此,无需在模型的运行阶段再去执行耗时耗资源的内存的动态分配,有效缩短模型的运行时间,提高模型的运行速度。

14、可以理解的是,当动态算子的下一个算子是静态算子时,即使动态算子的输出内存空间中存在的无效数据被静态算子当作有效数据进行逻辑运算,也不会影响静态算子运算结果的准确性。因此,在一种可能的实施方式中,针对模型中的静态算子可以不用维护实际的有效数据,也即可以不用引入输入的有效数据个数和输出的有效数据个数。静态算子可以采用原有的一个输入和一个输出。

15、在一种可能的实施方式中,当动态算子的下一个算子为静态算子时,可以仅将该动态算子的第一输出作为静态算子的输入,传递至该静态算子,无需传递第一输出中的有效数据个数给该静态算子。

16、以第一动态算子的下一个算子为第一静态算子为例,上述数据处理方法还包括:将第一动态算子的第一输出作为第一静态算子的第三输入,执行第一静态算子以得到第一静态算子的第三输出,第三输入为第一静态算子的输入内存空间中存放的数据,第三输出为第一静态算子的输出内存空间中存放的第一静态算子的运算结果,第一静态算子为至少一个静态算子中的一个。如此,无需为静态算子增加一个包含有效数据个数的输入以及一个包含有效数据个数的输出,达到在原有模型中以较小的改动实现动态算子的内存空间预分配的效果。

17、可选地,可以仅对动态算子配置有第一标识。这样,模型运行过程中,可检测当前算子是否配置有第一标识。若检测到当前算子未配置有第一标识,即可确定当前算子的类型为静态算子。如此,无需对模型中的静态算子添加标识信息,即可将动态算子与静态算子进行区分。从而模型运行过程中能够通过是否额外增加有该标识信息,判断算子内部是否需要引入输入的有效数据个数和输出的有效数据个数,以维护该算子的实际输入数据和实际输出数据。

18、例如,若当前执行到第一静态算子,即上述当前算子为该第一静态算子,则此时可检测到当前算子未配置有第一标识,从而可确定当前算子的类型为静态算子,从而可控制当前算子内部不引入输入的有效数据个数和输出的有效数据个数,直接遍历当前算子的输入内存空间中的全部数据,进行静态算子的逻辑运算即可。

19、可选地,也可以对静态算子配置第二标识。这样,模型运行过程中,可检测当前算子是否配置有第二标识。若检测到当前算子配置有第二标识,即可确定当前算子的类型为静态算子。如此,通过对模型中的静态算子和动态算子添加不同的标识信息,即可将动态算子与静态算子进行区分。从而模型运行过程中能够通过对应的标识信息,控制当前算子内部是否引入输入的有效数据个数和输出的有效数据个数。

20、如此,通过为模型中的算子增加标识位,不仅能够实现动态算子和静态算子的区分,也能够实现算子执行过程中的差异化处理。

21、在一种可能的实施方式中,当动态算子的下一个算子为静态算子时,也可以将该动态算子的第一输出和第一输出中的有效数据个数,都传递至该静态算子。以第一动态算子的下一个算子为第一静态算子为例,上述数据处理方法还包括:将第一动态算子的第一输出作为第一静态算子的第三输入,第一动态算子的第二输出作为第一静态算子的第四输入,执行第一静态算子以得到第一静态算子的第三输出和第四输出;其中,第三输入为第一静态算子的输入内存空间中存放的数据,第四输入为第三输入中的有效数据个数,第三输出为第一静态算子的输出内存空间中存放的第一静态算子的推理运算结果,第四输出为第三输出中的有效数据个数,第一静态算子为至少一个静态算子中的一个。如此,针对模型中的静态算子也可以引入输入的有效数据个数和输出的有效数据个数,以维护模型的运行过程中的有效数据变化,从而模型能够根据输入中的有效数据执行静态算子的逻辑运算,降低了静态算子的运算量,有效缩短模型的运行时间,提高模型的运行速度。

22、同理,模型运行过程中,执行到第一静态算子时,可通过第四输入,确定第三输入中的有效数据。然后初始化第一静态算子的第四输出。然后遍历第三输入中的有效数据以执行第一静态算子,以得到第一静态算子的运算结果,并根据运算结果,确定第一静态算子的第三输出和第四输出,其中,第一静态算子每运算出一个结果,第四输出的数值加1。如此,在模型的运行过程中,同样也可以只遍历输入内存空间中的有效数据执行静态算子的逻辑运算,无需遍历输入内存空间中的所有数据,大大降低了静态算子的运算量,提升了模型运行速度。

23、同理,多个静态算子的有效数据个数参数也可以为同一个,无需每个静态算子都单独分配一个有效数据个数参数来维度各自静态算子的有效数据个数。在这种情况下,执行到第一静态算子时,可在通过第四输入,确定第三输入中的有效数据后,初始化第四输入,然后遍历第三输入中的有效数据以执行第一静态算子,以得到第一静态算子的运算结果,并根据运算结果,确定第一静态算子的第三输出,并更新第四输入,其中,第一静态算子每运算出一个结果,第四输入的数值加1。然后将更新后的第四输入作为第一动态算子的第四输出。如此,通过在执行到相应动态算子时,重新初始化有效数据个数参数,即可实现对相应动态算子的有效数据维护,实现了有效数据个数参数的复用的同时,减少了有效数据个数的内存占用。

24、在一种可能的实施方式中,动态算子的上一个算子为静态算子时,若静态算子采用原有的一个输入和一个输出,则静态算子输出的所有数据都可以是有效数据。以第一动态算子的上一个算子为第一静态算子为例,在获取第一动态算子的第一输入和第二输入之前,上述数据处理方法还包括:获取第一静态算子的第三输入,第三输入为第一静态算子的输入内存空间中存放的数据,第一静态算子为至少一个静态算子中的一个;根据第三输入,执行第一静态算子以得到第一静态算子的第三输出,第三输出为第一静态算子的输出内存空间中存放的第一静态算子的运算结果。在执行完第一静态算子后,若第一静态算子的下一个算子为第一动态算子,则上述获取第一动态算子的第一输入和第二输入,包括:获取第三输出作为第一动态算子的第一输入,获取第三输出中的总数据个数作为第一动态算子的第二输入。如此,当静态算子将自己的输出,作为下一个算子的输入时,若下一个算子为动态算子,则由于动态算子还需要输入中的有效数据个数,因此可直接统计上一个静态算子输入的总数据个数作为输入的有效数据个数,传递给动态算子。

25、可选地,若静态算子也增加了有效数据个数的输入和输出,则在动态算子的上一个算子为静态算子时,静态算子也可以将输出中的有效数据个数传递至下一个动态算子。以第一动态算子的上一个算子为第一静态算子为例,在获取第一动态算子的第一输入和第二输入之前,上述数据处理方法还包括:获取第一静态算子的第三输入和第四输入,第三输入为第一静态算子的输入内存空间中存放的数据,第四输入为第三输入中的有效数据个数,第一静态算子为至少一个静态算子中的一个;根据第三输入和第四输入,执行第一静态算子以得到第一静态算子的第三输出和第四输出,第三输出为第一静态算子的输出内存空间中存放的第一静态算子的运算结果,第四输出为第三输出中的有效数据个数。在执行完第一静态算子后,若第一静态算子的下一个算子为第一动态算子,则上述获取第一动态算子的第一输入和第二输入,包括:获取第三输出作为第一动态算子的第一输入,获取第四输出作为第一动态算子的第二输入。如此,在静态算子和动态算子都引入了输入的有效数据个数和输出的有效数据个数后,算子之间不仅传输待处理的数据,还传递待处理的数据中的有效数据信息。从而模型能够根据输入中的有效数据执行静态算子和动态算子的逻辑运算,降低了模型中各种算子的运算量,有效缩短模型的运行时间,提高模型的运行速度。

26、在一种可能的实施方式中,上述数据处理方法还包括:在计算模型的编译阶段,为计算模型的每个动态算子配置输入内存空间和输出内存空间。如此,能够提前在编译期,就确定模型中的每个动态算子所需要申请的输入输出内存空间,使得模型运行之前就完成动态算子的内存分配,提高模型的运行速度。

27、在一种可能的实施方式中,动态算子被配置的输出内存空间与动态算子被配置的输入内存空间的大小相同。如此,针对模型中的动态算子可以预先申请与动态算子的输入内存空间一样大小的输出内存空间。这样即使输入内存空间中的全部数据,经过动态算子的逻辑运算后,输出对应的全部数据后,输出内存空间也足够存放,不会出现溢出的情况。

28、在一种可能的实施方式中,动态算子被配置的输出内存空间,也可以根据算子的运算逻辑,配置为小于动态算子的输入内存空间,或者大于动态算子的输入内存空间。本方案对输出内存空间的大小的配置不作限定,足够大到保证覆盖输出的所有情况即可。

29、第二方面,提供一种数据处理装置,该装置包含在计算设备中,该装置具有实现上述第一方面或其任一种可能的设计方式的功能。该功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。硬件或软件包括一个或多个与上述功能相对应的模块或单元。例如,该数据处理装置可以包括获取模块和处理模块。

30、其中,获取模块,用于获取计算模型,其中计算模型包括至少一个动态算子,至少一个动态算子中每个动态算子的输入内存空间和输出内存空间为预先配置的内存空间。

31、处理模块,用于在计算模型的运行过程中,获取第一动态算子的第一输入和第二输入,第一输入为第一动态算子的输入内存空间中存放的数据,第二输入为第一输入中的有效数据个数,第一动态算子为至少一个动态算子中的一个。

32、处理模块,还用于根据第一输入和第二输入,执行第一动态算子以得到第一动态算子的第一输出和第二输出,第一输出为第一动态算子的输出内存空间中存放的第一动态算子的运算结果,第二输出为第一输出中的有效数据个数。

33、处理模块,还用于将第一输出作为第二动态算子的第一输入,第二输出作为第二动态算子的第二输入,执行第二动态算子以得到第二动态算子的第一输出和第二输出,直至遍历计算模型的每个算子,得到计算模型的运行结果,其中,第二动态算子为第一动态算子的下一个算子。

34、第三方面,提供一种计算设备,包括处理器和存储器,存储器包括第一存储单元和第二存储单元,第一存储单元用于存储计算模型中每个算子的输入和输出,第二存储单元用于存储程序代码,当处理器执行程序代码时,计算设备执行上述第一方面任一项可能的实现中的数据处理方法。

35、在一种可能的实施方式中,计算设备可以为智能驾驶车辆,也可以为其他具备ai计算功能的智能设备(如智能手机)。

36、第四方面,提供一种芯片系统。该芯片系统包括一个或多个接口电路和一个或多个处理器。该接口电路和处理器通过线路互联。该接口电路用于从计算设备的存储器接收信号,并向处理器发送该信号,该信号包括存储器中存储的指令。当处理器执行指令时,计算设备执行上述第一方面任一项可能的实现中的数据处理方法。

37、第五方面,提供了一种可读存储介质,包括指令,当指令在计算设备上运行时,使得该计算设备执行上述第一方面任一项可能的实现中的数据处理方法。

38、第六方面,提供了一种智能驾驶设备,该智能驾驶设备包括上述第二方面或其任一实现方式中的数据处理装置,或包括第三方面的计算设备。可选地,该智能驾驶设备为智能车辆。

39、可以理解地,上述提供的第二方面的装置,第三方面的计算设备,第四方面的芯片系统,第五方面的可读存储介质及第六方面的智能驾驶设备所能达到的有益效果,可参考第一方面及其任一项可能的实现中的有益效果,此处不再赘述。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1