MegEngine v1.8.1 Release Notes

MegEngine

Notice

从下个版本 MegEngine v1.9 开始将停止对 python3.5 支持,请大家提前做好准备。

HighLight

  • megengine.functional.topk 新增「descending」以定义排序行为,本次版本默认为「False」保持从小到大排列,如果未指定则提示warning 信息。在 v1.12 版本将修改「descending」默认值为 true 以符合惯常情况下大家对 topK 的定义,即从选出二维矩阵中 Top-K 个最大元素。
  • MegEngine 支持端上训练,使用参考这里

Bug fixes

Python API

  • 修复 megengine.functional.floor_div 对于异号整数输入的计算错误。
  • 使 megengine.functional.broadcast_to 接受 None,表示这一维无需进行广播以支持 -1 shape 自动推导。

发版流程

  • 修复 MegEngine v1.7 版本序列化的 TM 模型,由 MegEngine v1.8 版本加载做图手术会失败的问题。
  • TracedModule Bug 修复如下。
    • 修复无法序列化第三方后端中 op 的问题。
    • 修复 Input 类型 expr 未绑定 top_graph 的问题。
    • 修复图手术中将 ModuleNode 作为输入时,expr 的插入位置计算错误的问题。
    • 修复 TracedModule 加载 v1.7 及之前含有 ones 或 zeros 的模型无法运行的问题。
    • 修复 TracedModule 在部分情况下递归过深的问题。
    • 修复 TracedModule 无法重复 trace 的问题。
    • 修复 TracedModule 无法正确识别 pad 的问题。
    • 改善 TracedModule 对不合法输入的报错信息。
  • 修复同时开全局图优化和 fastrun 时,选中的算法只有 naive 时会报错的问题。

CUDA

  • 前置输入 Tensor 太大的判断,优化错误提示信息,避免直接输出 cuDNN 报错。
  • 修复 tensorrt 改变 shape 时,output推导错误问题

通用组件

  • 修复 MegDNN fallback 的 ConvBias 算子不可用的问题。
  • 修复图优化之后无法正常 fastrun 模型中的 matmul 和 pooling 的问题。
  • 修复在低内存环境(8G)无法编译 MegEngine 的问题。
  • 修复将较大的 numpy array 转换为 tensor,或将较大的 tensor 转换为 numpy array 时,占用额外内存的问题。
  • 增加计算设备上的异步错误的检查与报错。
  • 修复了 tensor 的 ndim 未知时 indexing 操作无法被 trace 的问题。

周边工具

  • 修复 load and run 命令行输入的数据无法解析的问题
  • 修复 io dump 中 qint4 和 bool 数据类型 dump 错误
  • 修复 megengine.utils.module_stats 没有import相关库而无法使用的问题
  • 修复 load and run 编译 cuda 时错误。
  • 删除 dump_with_testcase 工具。
  • 修复 load and run 无法识别用 flatbuffer 序列化模型的问题。
  • 修复参数和计算量统计工具 module_stats 接口的 inputs 为 dict 时,无法统计的问题。
  • 修复 load and run工具 使用 --get-static-mem-info 选项, 统计得到的权重信息数据有误的问题。
  • 修复 load_and_run 工具中,使用形如 –input "ratio:1.0" 选项时的参数解析错误。

New Features

Python API

  • 添加 megengine.functional.diag 算子。

发版流程

  • TracedModule 支持在图手术过程中修改 Node 的名字。
  • 为 TracedModule 提供一个 enable_expr_checker 开关,以在 trace 时进行更多检查。

ARM

  • 优化 Arm 中部分数学计算的实现,性能有微弱的提升
  • ARM 后端支持 rnn_cell/lstm_cell/lstm 算子
  • 添加 elemwise 部分 case 对多线程的支持,以支持 TS 项目部分模型性能优化。

第三方硬件

  • 增加对寒武纪 MLU270 支持。
  • TensorRT Runtime Opr 支持动态 shape 的模型,且可根据输入 shape 主动选择相近「IOptimizationProfile」。

通用组件

  • CPU 支持运行 int4 模型。
  • megengine.functional.nn.remap 支持 dtype 为 float16 下的求导
  • 优化非连续情况下的 typecvt 的性能
  • 新增端上训练支持,更多详情查看这里
  • 在 windows 系统上,load_and_run 增加动态链接 MegEngine 支持。

周边工具

  • 新增了 cmake 格式化工具,执行可将 cmake 相关文件进行格式化。
  • Custom Op 增加 JIT 构建工具,文档待补充。
  • 支持构建 Android whl 包。

Improvements

Python API

  • 优化 megengine.random.RNG.uniform API中 low=0 & high=1 的情况下的 elemwise 开销,单算子性能提升约75% 。

CUDA

  • 改进 megengine.functional.nn.softmax 在 axis 为标量时,CUDA 平台上的性能提升约200%~450%。
  • 提高 megengine.functional.nn.dropout 在 CUDA 平台上的性能,可提升约 650%。
  • 提高 megengine.functional.nn.layer_norm 在 CUDA 平台上的性能,可提升约 540%。

ARM

  • 当一个 tensor 需要进行 int16/uint16 → float 的转换,并且转换后的数据进行 Mul/ADD 运算时,将多个运算合并为 ElemwiseMultiType,在010项目的 369 号模型验证性能提升约20倍(23512.8us →1208 us)。

通用组件

  • 动态 AMP 性能提升,多个模型验证可提升约1% 。
  • 优化 cpu 环境下 jit.trace 的时间。bs 256 、VGG16 模型验证,jit.trace 从约 4 分钟提升至 2 分钟。
  • 修复在 cpu 上模型执行速度过慢的问题,在 VGG16 bs 10 验证从 10 分钟提升至约 6s。

MegEngine Lite

Bug fixes

  • 修复 lite 中 TensorBatchCollector 的 device id 设置错误
  • Lite 中空 tensor 的 to_numpy 方法增加输出 Tensor 的数据类型信息
  • 修复用户在自定义模型输出空间时部分模型推理失败的问题
  • 修复 MegEngine Lite 的 device 配置接口为只设置 xpu 的 device type 为用户指定的 device type 。
  • 修复 MegEngine Lite python 接口在 TensorBatchCollector 的 batch id 出错时没有报错日志输出的问题。
  • 修复 MegEngine Lite 开启「record level 2」时报错的问题。

New Features

  • lite 中增加对寒武纪的支持。
  • MegEngineLite 新增一个名为 get_data_by_share 的接口。通过调用该接口,用户可以零拷贝地获得一个 lite tensor 的 numpy 对象。
  • 增加 cv 的分类与检测的 example 。
  • 新增全局图优化支持。

MegEngine

Notice

Drop support for python3.5 from MegEngine v1.9.

HighLight

  • megengine.functional.topk will default to descending order in v1.12. Please specify the “descending” argument during the transition period.
  • MegEngine support Device Training,you can refer to here.

Bug fixes

Python API

  • Correct behavior of megengine.functional.floor_div for integers with opposite sign.
  • Allow passing None to megengine.functional.broadcast_to , meaning the corresponding axis should not broadcast.

Release process

  • Fix a compatibility issue with TracedModule.
  • Fix TracedModule Bug :
    • Fix the problem that ops in third-party backend such as tensorrt can not be serialized.
    • Fix the problem that input expr bound top_ graph failed.
    • Fix the problem of incorrect calculation of expr insertion position when ModuleNode is used as input of graph operation.
    • Fix a bug of v1.7: the model with ones or zeros can’t work.
    • Fix a recursion too deep issue when copying traced module.
    • Fix an error that prevents traced module from tracing a module more than once.
    • Fix traced module not recognizing pad.
    • Improve error message for illegal inputs feed into traced module.
  • Fixed the problem that when global graph optimization and fastrun are enabled at the same time, an error will be reported when the selected algorithm is only naive.

CUDA

  • To judge that the front input Tensor is too large, optimize the error message, and avoid directly outputting cuDNN to report errors.
  • Fixed output derivation error when tensorrt changed shape.

Common components

  • Fix the problem that the ConvBias operator of MegDNN fallback is not available.
  • matmul, pooling operators support fastrun, which will lead to better inference performance for C++ models.
  • MegEngine(8G) fix build issue at low memory env(8G).
  • Reduce memory consumption when a large numpy array is converted to tensor or a large tensor is converted to numpy array
  • Add out-of-bound access check for some operators.
  • Fix the problem that the indexing operation cannot be traced when the ndim of the tensor is unknown.

Peripheral tools

  • Fixed the problem that the data entered in the load and run command line could not be parsed.
  • Fix qint4 and bool data type dump errors in io dump.
  • Fix the problem that megengine.utils.module_stats cannot be used without import related libraries.
  • Fix load and run build error when build with CUDA.
  • Remove dump_with_testcase tool.
  • Fix the problem that load and run cannot recognize the serialized model with flatbuffer.
  • fix a bug in megengine.tools.network_visualize when inputs is instance of dict.
  • Fix a bug that user will get wrong statistic when using --get-static-mem-info .
  • Fix a bug that load_and_run will get parsing error when meet command like –input "ratio:1.0" .

New Features

Python API

  • Add megengine.functional.diag operator.

Release process

  • Support that the name of node can to be modified during the graph operation in TraceModule.
  • Add a enable_expr_checker switch for traced module, which adds more checks during tracing.

ARM

  • Optimize the implementation of some mathematical calculations in arm, the performance is slightly improved.
  • Add arm rnn_cell/lstm_cell/lstm operator.
  • Support part of arm ternary elemwise multithread.

Third-party hardware

  • Added support for cambricon MLU270.
  • Supporting dynamic shape model in TensorRT Runtime Opr and set closest IOptimizationProfile according to input shape automatically .

Common components

  • CPU supports running int4 model.
  • Support backward computation for float16 dtype in remap.
  • Optimize the performance of typecvt in non-continuous situations.
  • Add training based on cpp Interface, more.
  • For windows system, load_and_run supports dynamicly linking megengine now.

Peripheral tools

  • Added a cmake formatting tool: cmakeformat.py.
  • Add the JIT builder for Custom Op.
  • Support build python wheel for Android(termux env).

Improvements

Python API

  • Add fastpath when low=0 and high=1 for megengine.random.RNG.uniform to improve performance.

CUDA

  • Improve performance of softmax when axis is scalar on CUDA platforms, by 200% - 450%.
  • Enhance performance of dropout on CUDA platforms by up to 650%.
  • Enhance performance of layer_norm on CUDA platforms, by up to 540%.

ARM

  • ADD an operator fusion case of TypeCvt and Elemwise. A pass will fuse a Typecvt(uint16 to float) operator and one Elemwise operator(Mul/ADD) to an ElemwiseMultiType operator and developing relative kernel on aarch64.

Common components

  • Add fastpath when low=0 and high=1 for megengine.random.RNG.uniform to improve performance.
  • Optimize the placement order of algorithms in matrixmul under the x86 platform in dnn to improve the dump time of jit.trace(bs256 VGG16, 4min -> 2min).
  • Fix the problem that the model speed on CPU is too slow (bs10 VGG16,10min -> 6s).

MegEngine Lite

Bug fixes

  • Fix the device ID setting error of tensorbatchcollector in lite.
  • Add data type information when call empty tensor to_numpy method.
  • Fix the problem that some model inferences fail when users customize the output space of the model.
  • Fix device type configuration for megengine lite. Now only the devices of which the device type is unspecified will be modified.
  • Add warning for megengine lite python interface, when error of batch indexes occurs in the TensorBatchCollector.
  • Fix runtime error when record level of megengine lite is 2.

New Features

  • Add interface for cambricon models in lite.
  • Add a new interface in megenginelite tensor module named get_data_by_share . A zero-copy numpy object will be returned containing data of a lite tensor object.
  • Add classification and detection examples in lite.
  • Add megenginelite Python & c/c++ global graph optimization interface.

1赞