追踪#

class trace(function, symbolic=False, capture_as_const=False, record_only=False, sublinear_memory_config=None, dtr_config=None, profiling=False, opt_level=2, graph_opt_config=None, symbolic_shape=True)[源代码]#

包装一个可调用对象,并提供以下功能:

  • 通过 tracedump 实现追溯(tracing)

  • 通过调用 __call__ 加速执行

参数:
  • function – 将被追溯的函数。

  • symbolic – 是否为追溯使用符号执行。默认:False

  • capture_as_const – 将全局变量或闭包捕获为常值。默认:False

  • record_only – 如果为True,则即使调用该函数也不会运行。默认:False

  • sublinear_memory_config (Optional[SublinearMemoryConfig]) – 配置亚线性内存优化。如果不是None,则使用给定设置进行亚线性内存优化。

  • profiling (bool) – 是否对编译好的函数追溯(trace)进行性能评估(profile)。默认:False

  • opt_level (int) – 编译函数追溯(trace)的优化级别。 默认:2

  • graph_opt_config (Optional[GraphOptimizationConfig]) – 图优化的配置。 默认:None

  • symbolic_shape (bool) – 是否为追溯使用符号形状。默认:True

dump(file, *, arg_names=None, output_names=None, append=False, keep_var_name=1, keep_opr_name=False, keep_param_name=False, keep_opr_priority=False, no_change_graph=False, strip_info_file=None, append_json=False, optimize_for_inference=True, user_info=None, enable_metadata=True, input_data=None, repeat=1, silent=False, no_assert=False, maxerr=1e-4, resize_input=False, input_transform=None, dump_format=None, model_version=2, **kwargs)[源代码]#

序列化被追溯 (trace) 的模型并保存到文件。

参数:
  • file – 输出文件,可以是文件对象或文件名

  • arg_names – 被追溯(traced)函数的输入张量的名字。

  • output_names – 被追溯(traced)函数的输出张量的名字,如果未指明则使用默认名字。

  • append – 是否在 file 后追加输出。仅当 file 是文件名时可用。

  • keep_var_name (int) – 保留变量名的级别:

  • keep_opr_name (bool) – 是否要保留算子的名字

  • keep_param_name (bool) – 是否要保留参数的名字,为了加载模型后可以简单地对参数做操作

  • keep_opr_priority (bool) – 是否保留算子的优先级设置

  • no_change_graph (bool) – 在导出的时候是否改变计算图,考虑到模型兼容性,一些算子在这个版本会转换为对应的兼容格式。* 如果设置为 False,为了兼容性一些算子可能会转换成其他算子,所有的算子都会确保兼容性。* 如果设置为 True,在导出的时候所有计算图中的算子都会改变。

  • strip_info_file – 路径地址或文件句柄。如果不为空,则导出的代码条信息会被写入``strip_info_file``中。

  • append_json – 当 strip_info_file 非空时会做检查。如果是真,代码条信息就会被添加到 strip_info_file 的尾部;如果是假,就会覆盖掉 strip_info_file.

  • optimize_for_inference – 打开推理优化,如果是False则关闭所有优化选项。默认:True

  • user_info (Optional[Any]) – 任何类型的对象,它将被 pickle 为字节。

  • enable_metadata (bool) – 是否将元数据保存到输出文件中。

  • input_data – 输入测试数据和当前网络输出将作为groundtruth。 格式为 “var0:file0;var1:file1…” 以指定输入的数据文件。 也可以使用 “#rand(min,max,shape…)”,用于生成随机输入数据,例如,”#rand(0,255)”, “#rand(0,255,1,3,224,224)” 或 “#rand(0, 255, 1, …)” 其中 表示原始形状的剩余部分。 如果未指定形状,将使用网络中相应输入张量的形状。 如果只有一个输入,则可以省略其名称。 数据文件可以是能被 opencv 加载的图像,也可以是序列化的 numpy.ndarray。 可以多次使用此选项以添加多个测试用例。 如果您的数据以字母 @ 开头,其余的应该是一个文件名,并且文件中的每一行都应该是上述格式的单个数据。 注意 如果 input_data 不为 None,您只能使用 load-and-run 来运行输出文件。

  • repeat – 输入图像重复次数。 在运行多批量大小的基准测试时很有用。 对随机生成的输入数据没有影响。

  • silent – 在 assert_equal 中是否将 verbose 设置为 False。

  • no_assert – 是否插入 assert_equal 检查结果; 此选项对于基准测试很有用。

  • maxerr – 运行时 assert_equal 检查的最大误差。

  • resize_input – 是否调整输入图像大小以适合输入 var 形状。

  • input_transform – 用于转换输入数据的 python 表达式。 示例:data / np.std(data)

  • dump_format (Optional[str]) – 使用不同的导出格式。开源的 MegEngine 默认使用 FBS_V2 格式,有FBS_V2 和 FBS 两种 format 可供选择,内部 MegEngine 有其他内部专有格式选择

  • model_version (int) – FBS_V2 的模型版本,从版本 2 开始,仅当转储格式为 FBS_V2 时才有效。

关键字参数:

  • enable_io16xc32 – 是否使用 float16 进行 opr 之间的 I/O 并使用 float32 作为内部计算精度。 请注意,输出节点将更改为 float16。

  • enable_ioc16 – 是否将 float16 用于 I/O 和计算精度。

  • enable_hwcd4 – 是否使用 NHWCD4 数据布局。 在某些 OpenCL 后端上更快。

  • enable_nchw88 – 是否使用 NCHW88 数据布局,目前在 X86 AVX 后端使用。

  • enable_nchw44 – 是否使用 NCHW44 数据布局,目前在 arm 后端使用。

  • enable_nchw44_dot – 是否使用 NCHW44_dot 数据布局,目前在 armv8.2+dotprod 后端使用。

  • enable_nchw4 – 是否使用 NCHW4 数据布局,目前在 nvidia 后端使用(基于 cudnn)

  • enable_nchw32 – 是否使用 NCHW32 数据布局,目前在 nvidia 后端的 tensorcore 中使用(基于 cudnn)

  • enable_chwn4 – 是否使用 CHWN4 数据布局,目前在 nvidia 后端的 tensorcore 中使用。

  • enable_nchw64 – 是否使用 NCHW64 数据布局,用于 Nvidia GPU 上的 int4 支持。

  • enable_fuse_conv_bias_nonlinearity: 是否将 conv+bias+nonlinearty 融合为一个 opr。

  • enable_fuse_conv_bias_with_z: 是否将 conv_bias 与 z 融合以在 nvidia 后端进行推理(此优化过程将导致训练和推理的输出精度不匹配)

  • enable_fuse_preprocess: 是否融合 astypepad_channeldimshuffle 等 opr