TensorFlow计算图优化代码剖析

本文深入剖析TensorFlow计算图的优化过程,包括pruning(裁剪无用节点)、const folding(常量打包)、layout(优化tensor布局)、memory管理、arithmetic(数值计算优化)和autoparallel(自动并行)。通过ModelPruner、ConstantFolding等类实现各优化步骤,如裁剪无效节点、转换内存布局以提升GPU效率,以及内存管理和数据交换策略等。
摘要由CSDN通过智能技术生成

代码路径:tensorflow/core/grappler/optimizers
其中meta_optimizer.cc中的RunMetaOptimizer方法的调用触发对图的不同类型的优化操作.

优化操作分为一下几类:
1. pruning.裁剪,比如移除一些无用的操作(一旦图建立之后不再使用的stop gradient节点以及Identity节点),优化梯度计算.
2. constfold.常量打包.
3. layout. 对tensor的layout针对计算库以及设备进行调整.比如cudnn使用NCHW比较高效.
4. memory.
5. arithmetic.
6. autoparallel.
以上optimizer均可以同时使用.
下面我们对以上六种图优化手段逐一进行代码级剖析.

pruning

ModelPruner类有三个成员函数, name()方法返回名称, Optimize方法负责具体的优化操作. Feedback方法.
目的: 将所有不会被执行的节点都裁剪掉. 也就是那些不会被fanin的节点.如果没有指定fetch节点,将假设整个图都将被执行. 
不能移除必须被保留的节点(在nodes_to_prserve中);
不能移除驱动control依赖的节点;
不能移除无法确定移除后是否会新增control依赖的节点(比如,移除一个10条control edge同时驱动10条control edge,将新建100条edge);
不能移除与function链接的节点,因为会导致后面内联失败;
不能移除被其它设备驱动的节点,因为使用这些节点能够降低通信开销;
不能移除接收引用值的节点,将引用转换成非引用也不行(可能理解的不大对).

const folding

对图中常量进行合并优化.遍历图中节点,找出完全能够静态计算的节点,也就是说完全依赖于constants输入的.在CPU上将这些节点计算出来,并替换这些节点

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值