HighLight
trace module
基于 MegEngine 的应用落地方案 Trace Module 正式开源。
Trace Module 由一个普通的 Module 通过 trace_module 方法转换得到,仅由 MegEngine 的数据结构而构成,可脱离用户源代码被训练、序列化以及反序列化、以及图手术。其优点如下。
- graph 基于 mge.Module 和 mge.function 构建,便于与源代码相对应,且能与第三方框架的 OP 对应上。
- 图手术直观,可直接查看 graph ,了解修改后的 graph 是否与预期一致。
- 可基于 TracedModule 进行训练。
- 基于动态图,调试方便,所见即所得。
Custom Op
提供可以将用户自定义的 C++/CUDA 算子快速集成入 MegEngine 的工具,以达成更好性能效果。
全局图优化
新增全局图优化支持,可以自动做 format 转换和 padding,增强易用性。您不用再关心是否需要开哪个图优化选项,例如「-- enable-nchw32」,在检测模型验证获得 5% 左右加速。本次版本增加对 cuda 平台支持,ARM/X86 等更多平台进行中,使用如下命令尝鲜使用:
load_and_run /path/to/model --layout-transform cuda
MegEngine Lite
MegEngine Lite 正式开源,请参考使用指南
MegEngine Lite 是模型直达 SDK 的解决方案,充分发挥 MegEngine 的高效,多平台的推理能力,为用户提供简洁、易用的 C++、C、python 多种模型推理接口,同时 MegEngine Lite 也可以接入其他的推理框架,便于业务集成。
Bug Fixes
Python API
- 修复 megengine.functional.nn.dropout 在 inference 模式下输出不正确的问题。
- 修复 megengine.functional.vision.warp_perspective 文档公式错误的问题。
- 修复 megengine.functional.sub 的 API 接口说明。
- 删除已经弃用的 megengine.jit.trace.trace 接口。
- linspace/arange 修改 dtype 为 fp32 支持更多数据类型。
- 修复 megengine.functional.nn.dropout 在 inference 模式下的返回值错误的问题。
通用组件
- 修复训练模型时打开 fastrun 之后显存 OOM 问题。
- 修复开启 DTR 时由于重算链过长导致递归栈溢出的问题。
- 修复 fp16 midout 编译失败的问题。
- 修复 python fastrun 错误,确保读取 cache 的正确性。
- 计算图 dump的边界情况处理不完整:修复导出 json 文件时把 inf 或者 nan 直接写成 number,导致MegHair profile_analyze.py 分析无法再解析的错误。
- 修复 tensor detach 后不能被 trace 的问题。
- 修复异步执行错误 (async error) 报错到无关地方的问题,同时添加引导说明以帮助用户理解报错原因。
- 修复了在系统已安装 LLVM-12-dev 的情况下引发的 Cmake 构建失败的问题。
- 修复用户通过设置 LD_LIBRARY_PATH 环境变量指定链接库时 Cmake 编译失败的问题。
- 修复 Tensor Interpreter 一个错误多次抛异常的问题。之前已经出错的 tensor 被当前 OP 使用时不再重复报错,直接跳过。
- 修复 Cmake 编译 llvm 报错。
周边工具
- 修复静态内存分析的工具中统计 GPU 静态内存分配信息的错误。
- 缩短 cutlass 中gemm kernel 的命名长度,修复由于目录层级太多造成的 windows 编译失败的问题。
- 修复项目上使用 SNPE Loader 时,如果初始化失败时,Megbrain 没有及时抛出异常的问题。
CUDA
- 禁用 CUDA 平台部分 matmul 算法的 TensorCore 优化。原因是 TensorCore 优化引入的隐>式类型转换有潜在精度问题。
- cuda10 关闭 cublas Lt 算法,因为它会对 fp32 的输入做隐式的类型转换,然后调用 fp16 的 tensorcore,可能引入精度问题。
ARM
- 修复 ROCm 中 Pooling 计算错误的问题。
New Features
Python API
- interpolate 支持 nearest 和 bilinear 模式。
- 增加混合并行下的数据排布变换支持。对多机算子,可以指定 axis 表示对高维 tensor 对应维度进行切分或者合并。
- 增加 python 侧获取 nvidia gpu 的 compute capability 的 API: megengine.get_cuda_compute_capability。
混合精度训练
- 修改添加 weight_scaler/bias_scaler 的方式,从需要手动在模型内添加改为通过接口 get_scaled_model 实现自动添加。
通用组件
- Conv backward fp16 精度增加支持 NHWC 格式。
- 优化异步错误的表达方式,给予更多提示信息。
CUDA
- 添加 tensorcore fp16 matmul 算法。
- sass conv int8 优化后,单个 conv 性能有 5%~10% 的提升。
- 添加 cutlass nhwc int8 imma conv kernel ,相对于 nchw4 dp4a 提升大约 10%-200% 。全局图优化功能 ready 后可开启对应 algo 获得收益。
ARM
- 新增 NCHW88 格式的 channel wise 卷积实现,fp32 下部分场景可加速约 1.5 倍。
- 新增 arm nchw88 fp16 的 channel wise 卷积 kernel。
Improvements
Python API
- DTR 优化,各模型测试速度平均提升约10%,ResNet50 8 卡最大 batchsize 达500, GL 8 卡最大 batchsize 达 110, ViT 8 卡最大 batchsize 达 300 。
- 新增 megengine.functional.nn.split ,替换之前用其他 op 拼接的实现,速度提升约 5 倍。
- megengine.functional.split、megengine.functional.cond_take 、advance indexing、Indexing(Set)MultiAxisVec、setsubtensor、subtensor 支持空 tensor 输入。
- 为 megengine.functional.sub 添加 docstring。
- python API 文档转换成 google style , 详情参考这里 。
附
- GitHub 源码地址:https://github.com/MegEngine/MegEngine/
- MegEngine 官方文档 - 新手入门:https://megengine.org.cn/doc/stable/zh/getting-started/index.html
- MegStudio:https://studio.brainpp.com/