分析原因型思维模型框架_TVM深度分析(3):TVM如何支持不同DL框架模型

Step1:DL模型解析

针对不同的DL框架及模型格式,TVM提供了不同的前端解析脚本,存放位置为:vmpythonvmelayfrontend,如下图所示:

487e5faf3ed6724902aea13b5d4801d8.png

TVM通过调用不同DL框架的API对已训练好的模型进行解析,以Tensorflow模型解析为例(from_tensorflow.py)

f1d399ad536e22fe87904cd271d02d4e.png

如上述代码所示,调用TF API完成对NN Graph的解析及模型参数的提取。

Step2:遍历DL模型Node Tree,转化为TVM Node Tree

首先检测对模型OP的支持能力,missing_operators = self._parse_import_prerequisites(graph),检查是否支持所有的OP,返回TVM暂不支持的OP集合。实现如下:

ab0a193594d02a3ad4016443be5887d4.png

如上所示,除了占位符及常量类型的参数外,分别从4个list中做检索,其中_identity_list中存储的是DL框架中OP名称与TVM中OP名称一致,不需要做转换,Tensorflow为空; _convert_map_rnn 循环神经网络OP的映射;代码如下:

faa23ecd74ebefef2d717c9fc0163c50.png

_control_flow_nodes 控制节点,仅tensorflow需要,代码如下:

c56e77750524f914164a659c14e38a25.png

重点需要关注的是_convert_map,其中存储的是DL框架通用方法与TVM方法的映射:

5267005497516f3f0c51d3771e8b8c59.png

如上所示,左侧为DL模型OP Node的名称,右侧为TVM中相对应的TVM Node OP,处理代码如下:

op = self._convert_operator(node.op, inputs, attr, graph)

以“'Conv2D' : _conv('conv'),”为例,其执行结果(以Index Expression形式展现)示例如下:

ecb7593ffff1d135922265510954dd83.png

注意OP的输入是此OP之前的子树,所以输出会包含此OP之前所有的TVM Node OP信息。

const类型的NODE通常存储的是模型参数,解析出来之后格式如下图所示:

f98d0ece92181707fe71b0f035785310.png

如上所示分别是dtype,shape及具体数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值