• TVM结构介绍


    看了下最新的TVM,已经到了0.8版本,整个TVM软件stack也发生了比较大的变化,准备追一下进行介绍。整体节奏大概是先做一篇Introduction,之后会翻译一些tutorial,后边会结合一些真实的Op进行。

    整个TVM的结构现在已经变成了

     从前到后可以分为这么几个部分(参考了其他博客的一些内容):

    1. 输入是从TensorFlow、PyTorch、ONNX等框架导入的模型。

    2. 转换为Relay:Relay是TVM自有的高级模型语言,它既支持传统的数据流表示风格,在使用了let-binding方式以后,也支持了类似于函数式编程作用域的风格;同时,在Relay层TVM会对模型进行高层的图级优化

    3. 下降到TE(Tensor Expression)Relay经过高层优化后,会进行算子融合并将模型被划分为子图,最终转换成TE来表示这些子图;TE是一种专门用于描述张量计算的领域专用语言,它指定了一些调度原语来指定低级的循环优化,如平铺,向量化、并行化、循环展开等;为了帮助将Relay转换为TE的过程,TVM提供了TOPI(一种预定义的模板来提供公共tensor op)

    4. 自动调优模块,包括AutoTVM和AutoScheduler 。TE之后会被传到自动调优模块进行算子调优;自动调优模块会针对给定的TE,使用算法生成不同调度配置,并基于给定代价模型和特定硬件后端进行评估;自动调优模块分为以下两种:

    a)    AutoTVM:基于模板的自动调优模块,针对用户指定的模板及相应搜索空间进行搜索和调优;

    b)    AutoScheduler:无需模板的自动调优模块,会针对给定计算自动生成所需模板及搜索空间;

    5. 选择最优的配置。自动调优模块生成JSON格式的记录

    6. 下降到Tensor Intermediate Representation (TIR),这一层是TVM的低级中间表示,一般提供包括LLVM IR在内的多种结构,多编译器和多个特定的硬件表示

    7.  使用目标编译器进行编译:优化后的TIR会被转换并下发到目标硬件对应的编译器,如LLVM、NVCC等,进行编译并生成最终可执行的机器码;

  • 相关阅读:
    [NoiPlus2016]天天爱跑步
    POJ3539 Elevator
    CodeForces 37E Trial for Chief
    CodeForces 986C AND Graph
    [tyvj-2054][Nescafé29]四叶草魔杖 费用流
    [CodeForces]986A Fair
    [CodeForces]981C Useful Decomposition
    分配问题
    圆桌问题
    数字梯形问题
  • 原文地址:https://www.cnblogs.com/jourluohua/p/15252064.html
Copyright © 2020-2023  润新知