使用 TracedModule 发版#

TracedModule 简介#

TracedModule 本质是一个 Module, 它由一个普通的 Module 通过 trace_module 方法转换得到, 仅依赖于 MegEngine 的数据结构,可脱离用户源代码被训练、序列化、反序列化以及图手术。

TracedMdoule 与普通 Module 的区别在于它有如下特性:

  • 拥有 graph 属性,graph 描述了 TracedModule 计算过程,可通过修改 graph 来改变计算过程

  • 可序列化到文件中,即使在没有模型源码的环境中也可被正确 load(普通 Module 的序列化文件脱离模型源码后无法 load 回来)

TracedModule 模型开发流程#

../../../_images/tracemodule-flow.jpg
  1. 模型训练阶段

    • 使用 MegEngine 来训练模型,模型基于 Module 构建(可直接将模型转为 TracedModule 训练)

    • 将模型(Module 或 TracedModule)转为 TracedModule,并通过 pickle 将模型序列化到文件中

  2. 模型发版阶段

    • 在脱离模型源码的环境中 load 序列化后的 TracedModule

    • 如果需要对模型进行图手术、量化等操作,可直接对模型进行修改,此时模型依然在动态图模式下运行,所见即所得

    • 当真正确定最终要发版的模型后,可直接通过 trace & dump 转为 c++ 模型在第一方部署, 或基于 mgeconvert 工具转换为其它框架的模型用于部署

文档目录#