MegEngine v1.11.0 Release Notes

MegEngine

HighLight

  • 新增 CUDA INT4 支持。在 cuda11.4-cudnn8.2.1-trt7.2.2.3 以及 A2 卡上验证,ResNet-50 Acc top1 精度损失 0.131%、Acc top5 精度损失 0.529% 的情况下,速度有 1.3 倍的提升。
    尝鲜通道: python3 -m pip install megengine==1.11.0+cu114 -f https://megengine.org.cn/whl/mge.html
  • Netron 可以可视化 Traced Module 和 C++ 模型了(注意 C++ 模型仅支持 MegEngine v1.10.0 版本起 dump 的模型)!欢迎大家体验: https://netron.app/

Bugfix

发版流程

  • 修复 traced module 中重命名张量导致的错误。

通用组件

  • 修复 fastrun 过程中跳过算法的判定条件。
  • 修复 fastrun 过程中显存占用过多触发的 OOM 错误。
  • 修复 Windows7 + 32bit + 多线程组合情况下, 进程无法退出问题。
  • 修复了参数初始化时 tensor 格式信息丢失的问题。
  • 修改 nchw44 broadcast_vec 的场景下的算法选择, 修复 nchw44 的 elemwise 性能缺陷。
  • 修复源码污染问题,使得 git status 恢复只显示用户本人的改动信息。
  • 优化卷积通道不匹配,Matmul shape 不匹配时的输出信息,使其更好理解。
  • 修复读取 persist cache 过程中由于网络原因导致的偶发性数据读取异常问题。
  • 修复参数 tensor 初始化中未考虑 DTR 导致的卡死问题。
  • 修复 softmax 运行时动态创建 elemwise 等 opr 导致不能开 record2 优化的问题
  • 修复 elewise multitype 所引发的前向兼容的问题,使得之前的 load and run 可以正常运行该版本 dump 下来的模型。
  • 修复 Repeat 算子无法开启 trace 模式的问题。
  • 修复 load_and_run fitting 模式下仅指定输入 shape 或给定输入 batch-size 时设置无效等问题。
  • 修复 ReduceMean 不同版本之间以及相同版本的 CPU 与 GPU 之间误差较大的问题。
  • 修复 1.10 版本的模型内存占用增大的问题。

CUDA

  • 修复 cutlass 编译 SM86 时间过长或者编译失败问题。
  • 更改多卡环境的检测逻辑。取消初始化时对当前所有显卡是否支持 import megengine 的检测与提示,只有当运行时所使用的显卡不支持 import megengine 时才报错。
  • 修复 cudnn8 的编译不通过的问题。
  • 修复了 TensorRT8 在编译由于不指定 LIBRARY_PATH 导致失败的问题。

周边工具

  • 修复 load_and_run 中 record_comp_seq 没有生效的问题。
  • 修复参数和技术量统计工具中由于 long 类型的表示范围限制导致模型计算量的计算不准确的问题。
  • 修复 load_and_run 中模型包含测试用例在全局图优化 dump 模型时报错的问题。
  • 修复参数量和计算量统计工具 module_stats 重复统计共享权重的问题。
  • 修复 megengine.tools.network_visualize 不支持CondTake 导致报错的问题。
  • 修复 load and run 设置 multithread 后,没有加速效果的bug。

ROCM

  • 修复 ROCM 平台由于缺少 conv bias 的实现导致的卷积算子无法执行的问题。

分布式训练

  • 修复多卡训练时设置 async_level 为0会导致训练卡死的问题。

New Features

Python API

  • 新增暴露如下API: is_cambricon_available、is_atlas_available、is_rocm_available、what_is_xpu。

通用组件

  • resize 反向传播支持 fp16 及 nhwc 的数据格式
  • CPU 和 CUDA 的 algo policy 的 cache 写入方式改为追加模式
  • elemwise multitype 中添加输出类型为 bool 的 opr,以提升megengine.functional.isnanmegengine.functional.not_equalmegengine.functional.less_equalmegengine.functional.greater_equalmegengine.functional.greatermegengine.functional.lessmegengine.functional.isinfmegengine.functional.equal 这些 opr 的性能,优化后整体和 pytorch 一致,其中megengine.functional.isinfmegengine.functional.equal 优于pytorch表现。
  • 增加可以查询whl包中的 trt、cudnn 版本、cuda 版本的接口:megengine.get_cuda_versionmegengine.get_cudnn_versionmegengine.get_tensorrt_version
  • 使用 VF 指令优化 X86 和 RVV 的 GI 直接卷积, winograd 卷积, nchw_nchw44 卷积, 矩阵乘性能。经过验证 ResNet18 在 amax04 有 50ms 性能提升。
    矩阵乘:12 Gflops -> 20 Gflops E5-2620 v4 @ 3.0GHz amax, 0.3 Gflops -> 1.2 Gflops @ nezha D1
  • GI algo RVV 去掉 FIXLEN 的依赖, 避免 FIXLEN 产生多余的 load/store 操作,加速推理过程,RVV 上 resnet18 模型有 5%~10% 的提升。
  • 优化 softmax 的实现。在 arm 的设备上,优化后的 softmax 实现相较于之前代理版 softmax 性能提升 10 倍左右。
  • 新增支持 TensorRT8 的编译的工具链。
  • load_and_run 增加 mdl 模型可用的 optimize_for_inference 优化选项,可以用来实现 optimize-for-inference 的图优化, 如bn融合。

ARM

  • 针对 pooling 算子,支持 nchw44 format 下的 reduce 和 elemwise 算子融合。

第三方硬件

  • 优化 X86+RISC-V 的性能,在resnet18 上验证加速 1.1 倍。

周边工具

  • load and run 添加运行时给定 loader init 接口的功能,使业务侧业务的 loader 在修改 init api 名字后指定参数可以继续加载。此功能使用参数:–c-opr-init-interface 。
    使用示例:./load_and_run --c-opr-init-interface="your_loader_init_API"
    c-opr-init-interface 的默认值为 mgb_c_opr_init 。举例在业务中业务可能使用的值为: anc_c_opr_init。
  • load_nerwork_and_run 支持权重预处理以及设置warm up iter数。

发版流程

  • 添加 cu114 whl包的生成方式。

Improvements

####ARM

  • 优化 CPU 上 reduce Opr 在 shape (xxx,xxx, 2/3/4) 的最后维度进行 reduce 时候的前向计算性能,提升约10倍。

CUDA

  • 优化 conv2d padding mode 为 reflect 时的性能,大 shape 场景下提升明显,经过验证提升约50%。

文档

  • 优化 functional.vision 模块中 roi_pooling,roi_align,nms,remap,warp_affine,warp_perspective,interpolate 的文档描述。
  • 优化 pad 的文档中关于 mode 参数的描述,使之更准确。
  • 优化 dataloader、Dataset、MNIST dataset 的文档描述,使之更完整明确。

MegEngine Lite

Bugfix

  • 修复 MegengineLite 的 python 接口中 get_io_tensor、slice 及 concat 接口反复调用导致的内存泄漏问题。
  • 修复 lite 中同时开 fast_run 和 nchw44 会挂的问题。

New Features

  • MegEngine Lite的 LiteConfig 增加 auto_optimize_inference 选项进行设备检测,可以根据推理时的CPU信息自动设置对应的 layout 优化选项。
  • 添加 Lite 中 set_data_by_share 和 set_data_by_copy 接口,当输入是 numpy ndarry 时必须是连续的断言。