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.isnan
、megengine.functional.not_equal
、megengine.functional.less_equal
、megengine.functional.greater_equal
、megengine.functional.greater
、megengine.functional.less
、megengine.functional.isinf
、megengine.functional.equal
这些 opr 的性能,优化后整体和 pytorch 一致,其中megengine.functional.isinf
、megengine.functional.equal
优于pytorch表现。 - 增加可以查询whl包中的 trt、cudnn 版本、cuda 版本的接口:
megengine.get_cuda_version
、megengine.get_cudnn_version
、megengine.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 时必须是连续的断言。
附
- GitHub 源码地址:https://github.com/MegEngine/MegEngine/
- MegEngine 官方文档 - 新手入门:https://www.megengine.org.cn/doc/stable/zh/user-guide/
- MegStudio:https://studio.brainpp.com/