使用 TracedModule 发版#
TracedModule 简介#
TracedModule 本质是一个 Module,
它由一个普通的 Module 通过 trace_module
方法转换得到,
仅依赖于 MegEngine 的数据结构,可脱离用户源代码被训练、序列化、反序列化以及图手术。
TracedMdoule 与普通 Module 的区别在于它有如下特性:
拥有 graph 属性,graph 描述了 TracedModule 计算过程,可通过修改 graph 来改变计算过程
可序列化到文件中,即使在没有模型源码的环境中也可被正确 load(普通
Module
的序列化文件脱离模型源码后无法 load 回来)
TracedModule 模型开发流程#
模型训练阶段
使用 MegEngine 来训练模型,模型基于 Module 构建(可直接将模型转为 TracedModule 训练)
将模型(Module 或 TracedModule)转为 TracedModule,并通过 pickle 将模型序列化到文件中
模型发版阶段
在脱离模型源码的环境中 load 序列化后的 TracedModule
如果需要对模型进行图手术、量化等操作,可直接对模型进行修改,此时模型依然在动态图模式下运行,所见即所得
当真正确定最终要发版的模型后,可直接通过 trace & dump 转为 c++ 模型在第一方部署, 或基于 mgeconvert 工具转换为其它框架的模型用于部署