当前位置: 首页 > 专利查询>复旦大学专利>正文

基于静态分析的TensorFlow深度学习代码性能问题检测方法技术

技术编号:38541877 阅读:12 留言:0更新日期:2023-08-19 17:09
本发明专利技术属于软件工程技术领域,具体为基于静态分析的TensorFlow深度学习代码性能问题检测方法。本发明专利技术方法包括:针对TensorFlow深度学习项目,应用静态检测技术检测并定位Python项目文件中导致性能损失的问题代码,检测5种性能问题,即用相同参数多次调用计算图节点的API导致相同节点被重复创建;batch和map方法调用次序错误导致的map方法调用增加;调用map和interleave方法时未设置num_parallel_calls参数导致函数并行功能禁用;循环定义tf.function装饰函数导致相同计算图重复构建;向tf.function装饰函数传递数值变化的Python类型参数导致计算图重复构建。本发明专利技术可以帮助开发人员快速高效地检测部分性能问题,提升深度学习系统性能。提升深度学习系统性能。提升深度学习系统性能。

【技术实现步骤摘要】
基于静态分析的TensorFlow深度学习代码性能问题检测方法


[0001]本专利技术属于软件工程
,具体TensorFlow深度学习代码性能问题检测方法。

技术介绍

[0002]深度学习已经成为计算机视觉、语音识别、自然语言处理和许多其他领域中最强大的技术之一。对于传统系统,由于它遵循基于逻辑的编程范式,开发人员可以直接在源代码中编码决策逻辑;而深度学习系统采用数据驱动的编程范式,开发人员定义所需的神经网络,其决策逻辑是从大量训练数据中学习得到的。传统系统到深度学习系统编程范式的转变对深度学习系统工程提出了独特的挑战,其中,性能问题是其面临的重要挑战之一。性能问题可能导致训练和推理阶段过度的资源消耗,损害用户体验,甚至引发更严重的后果。在过去的研究中,深度学习系统中的错误已被广泛探讨,但是深度学习系统中的性能问题却几乎没有被探索过。

技术实现思路

[0003]本专利技术的目的在于提供一种基于静态分析的TensorFlow深度学习代码性能问题检测方法,以帮助开发人员快速高效地检测一部分常见的性能问题,促进其深度学习系统的性能提升。
[0004]本专利技术提供的基于静态分析的TensorFlow深度学习代码性能问题检测方法,针对基于TensorFlow的深度学习项目,应用静态检测技术,检测并定位Python项目文件中导致性能损失的问题代码,检测5种常见的性能问题,即用相同参数多次调用创建计算图节点的API导致相同节点被重复创建;batch和map方法的调用次序错误导致不必要的map方法的调用增加;调用map和interleave方法时未设置num_parallel_calls参数导致函数的并行功能被禁用;循环定义tf.function装饰的函数导致相同计算图重复构建;向tf.function装饰的函数传递数值变化的Python类型参数导致计算图重复构建;具体步骤如下:
[0005](1)重复创建计算图节点行为的检查;
[0006]在深度学习系统中,计算图是一种表示模型结构和计算流程的图形化数据结构,它可以减少冗余计算、更好地管理内存使用、实现并行计算和减少计算时间等,从而提高深度学习系统的效率;计算图中的节点表示操作,例如加法、乘法、卷积等,边表示数据的流动;如果在计算图中重复添加相同的节点,这些节点将执行相同的计算,从而造成计算资源的浪费;此外,在反向传播算法中,重复节点也会导致梯度的重复计算,增加计算时间和内存使用;这一步旨在检测使用相同参数重复调用TensorFlow用于创建节点的API情况,避免计算图中相同节点被重复创建;具体包括以下步骤:
[0007](1.1)分析TensorFlow Python API中使用@tf_export装饰的代码,提取出可能会添加计算图节点的TensorFlow API;
[0008](1.2)对提取的API进行人工检查,筛去一些实际上并不增加计算图节点(如
tf.assign)或产生不确定输出(如tf.random.uniform)的API,最终获得356个API;
[0009](1.3)对于上述API在for或while循环里调用的情况,跟踪在循环迭代中变化的变量,包括循环控制变量、在循环内部赋值但在循环外部定义的变量,以及所有依赖于上述变量的变量,判断目标API是否使用相同的参数值被重复调用;对于上述API作为参数被某个函数循环调用的情况,认为该API使用了相同的参数值被重复调用,相同的计算图节点被重复创建。
[0010](2)batch和map顺序的检查;
[0011]对于TensorFlow的Dataset模块,在batch方法之前调用map方法会导致非必要的map函数调用增加;本专利技术采用先调用batch方法,再调用map方法,以此减少映射函数被调用的次数;具体包括以下步骤:
[0012](2.1)识别代码中tf.data.Dataset为前缀的方法调用;
[0013](2.2)分析上述方法的调用情况,检查batch是否在map之后被调用,若是,则建议先调用batch方法,再调用map方法。
[0014](3)map方法和interleave方法未进行并行设置的检查;
[0015]对于TensorFlow的Dataset模块,如果调用map方法或interleave方法时没有设置它的num_parallel_calls参数,map方法或interleave方法的并行属性将被禁用;这一步检查map方法和interleave方法是否进行了并行设置;具体包括以下步骤:
[0016](3.1)识别代码中的tf.Dataset对象;
[0017](3.2)分析tf.Dataset对象的调用情况,检查这类对象在调用map和interleave方法时是否设置了num_parallel_calls参数。
[0018](4)tf.function装饰函数循环定义的检查;
[0019]在TensorFlow 2中,使用tf.function可以高效地将程序转换成计算图,然而,tf.function的错误使用可能会产生性能上的副作用;若tf.function装饰的函数在循环内被定义并调用,则每执行一次循环,函数都要被重新定义并重新生成一张重复的计算图,重复的计算图跟踪操作导致性能下降;这一步定位处于循环中的被tf.function装饰的定义函数,具体包括以下步骤:
[0020](4.1)利用抽象语法树解析代码,识别并定位项目代码中被tf.function装饰的函数;
[0021](4.2)检查上述函数的外层是否存在for或while循环,若存在,则认为该函数在for或while循环内部被重复定义,引发了重复跟踪问题;
[0022](4.3)检查上述函数是否存在外层函数,即上述函数是否为外层函数的私有方法;若外层函数被循环调用(包含外层函数的定义和调用分布在不同文件的情况),每调用一次,其内部的定义函数都要被重新定义并生成一张新的计算图,引发了重复跟踪问题。
[0023](5)向tf.function装饰的函数传递变化的Python类型参数的检查;
[0024]tf.function最适合处理TensorFlow运算,而Python类型的参数会被当作常量处理;由于变化的Python类型参数值会导致多个跟踪,但生成的计算图实际上是相同的,所以向tf.function装饰的函数传递数值变化的Python类型参数会触发非必要的回溯;这一步检查向tf.function装饰的函数传递变化的Python类型参数的情况,具体包括以下步骤:
[0025](5.1)利用抽象语法树解析代码,识别并定位项目代码中被tf.function装饰的函
数;
[0026](5.2)找到该函数被调用的位置,如果它的外层是for或while循环语句,且函数被调用时传入的python类型参数(包括int/float/double/string等基本类型)本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.基于静态分析的TensorFlow深度学习代码性能问题检测方法,其特征在于,针对基于TensorFlow的深度学习项目,应用静态检测技术,检测并定位Python项目文件中导致性能损失的问题代码,检测5种常见的性能问题,即用相同参数多次调用创建计算图节点的API导致相同节点被重复创建;batch和map方法的调用次序错误导致不必要的map方法的调用增加;调用map和interleave方法时未设置num_parallel_calls参数导致函数的并行功能被禁用;循环定义tf.function装饰的函数导致相同计算图重复构建;向tf.function装饰的函数传递数值变化的Python类型参数导致计算图重复构建;具体步骤如下:(1)重复创建计算图节点行为的检查;在深度学习系统中,计算图是表示模型结构和计算流程的图形化数据结构,计算图中的节点表示操作,边表示数据的流动;如果在计算图中重复添加相同的节点,这些节点将执行相同的计算,从而造成计算资源的浪费;此外,在反向传播算法中,重复节点也导致梯度的重复计算,增加计算时间和内存使用;重复创建计算图节点行为的检查,是检测使用相同参数重复调用TensorFlow用于创建节点的API情况,避免计算图中相同节点被重复创建;(2)batch和map顺序的检查;对于TensorFlow的Dataset模块,在batch方法之前调用map方法会导致非必要的map函数调用增加;本步骤检查batch和map顺序,是先调用batch方法,再调用map方法,以此减少映射函数被调用的次数;(3)map方法和interleave方法未进行并行设置的检查;对于TensorFlow的Dataset模块,如果调用map方法或interleave方法时没有设置它的num_parallel_calls参数,map方法或interleave方法的并行属性将被禁用;本步骤是检查map方法和interleave方法是否进行并行设置;(4)tf.function装饰函数循环定义的检查;在TensorFlow 2中,使用tf.function可以高效地将程序转换成计算图,然而,tf.function的错误使用可能会产生性能上的副作用;若tf.function装饰的函数在循环内被定义并调用,则每执行一次循环,函数都要被重新定义并重新生成一张重复的计算图,重复的计算图跟踪操作导致性能下降;本步骤检查是定位处于循环中的被tf.function装饰的定义函数;(5)向tf.function装饰的函数传递变化的Python类型参数的检查;tf.function最适合处理TensorFlow运算,而Python类型的参数会被当作常量处理;由于变化的Py...

【专利技术属性】
技术研发人员:陈碧欢曹峻铭潘佳卉彭鑫赵文耘
申请(专利权)人:复旦大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1