草庐IT

MegCC 新版本来啦!新增 Benchmark 等工具,性能大幅提升!

MegEngine 2023-03-28 原文

最新版 MegCC 新鲜出炉,新工具,新体验,本次版本针对用户使用体验以及模型推理性能进行全面提升,主要的提升包括:

  1. 新增 Benchmark 工具, 用于用于快速 Benchmark 常用模型的推理性能并可视化;
  2. 新增 Kernel C 代码导出工具,方便用户定制化获取算子 Kernel, 方便迁移与复用;
  3. 优化 NN Kernel 性能, 保持推理 SDK 性能先进;
  4. 支持第三方 NPU loader,方便 NPU 相关应用迁移。
    下面展开介绍下最新版 MegCC 的新功能以及新特点:

一、MegCC Benchmark

新版 MegCC 支持了基础的 Benchmark 模块用于测试各类模型的推理性能,获取推理时各个 Kernel 的性能数据,分析模型性能瓶颈。

  1. 目前 Benchmark 支持的模型有:effecientnetb0、resnet18、resnet50、vgg11、vgg16、shufflenetv2、mobilenetv2,模型主要的格式为 ONNX 格式,通过 MgeConvert 转换为 MegEngine 的格式作为 MegCC 对 ONNX 格式的间接支持,有关 MgeCovnert 的更多内容请参考:https://github.com/MegEngine/mgeconvert
  2. 新增的 Benchmark 可以支持模型中各个 Kernel 的性能数据的获取,Bechmark 新增了Kernel 性能可视化的功能,用于模型性能瓶颈分析;
  3. Benchmark 支持了模型推理数据可视化的功能,用于纵览不同设备上的模型推理性能。

二、MegCC Kernel 导出工具 - Kernel_exporter

MegCC 新增了 Kernel C 代码导出的工具 Kernel_exporter,用户可以通过设置所需 Kenrel 的属性,导出所需 Kernel 的 C 代码,便于进一步的移植与复用。

  1. Kernel 导出工具目前有两种用法,一种是使用默认参数导出 Kernel,一种是用户交互式给定部分关键参数导出定制化的 Kernel。
  • 默认参数用法:
./kernel_exporter --arch <arch_type> --kernel <kernel_type> --use_default_attr
  • 交互式用法:
./kernel_exporter --arch <arch_type> --kernel <kernel_type>

arch_type 和 kernel_type 的具体参数,可以通过 --help 查看, 目前支持的 Kernel 包括:

ArgSortKernel           ArgmaxKernel                BatchMatmulKernel       CVTransposeKernel
ConcatKernel            ConvBackDataKernel          ConvKernel              CvtColorKernel
ElemwiseKernel          ElemwiseMultiKernel         FlipKernel              IndexingMultiAxisKernel
IndexingOneHotKernel    MatrixInvKernel             MatrixMulKernel         PoolingKernel
PowCKernel              ReduceKernel                RelayoutKernel          ResizeKernel
RoiCopyKernel           RotateKernel                TopK                    TypeCvtKernel
WarpAffineKernel        WarpPerspectiveKernel
  1. 导出的 Kernel C 代码会在工具使用的当前目录下面。

三、性能优化

a. 在初版的基础上,MegCC 对现有的 Kernel 进行了一系列优化,主要包括:

  1. 支持编译时多个 elemwise fuse 的功能,fuse 后的 elemwise 性能更优;
  2. 支持 General Instrinsic MAX、MIN 的 Kernel 实现,有效提升有大量 MAX MIN 算子模型的推理性能;
  3. 使用汇编优化 arm64 的 sigmoid,降低 sigmoid 对模型推理性能的束缚;
  4. 新增 conv3x3 winograd 优化,大大提升了推理时 3x3 卷积的计算性能;
  5. 新增了部分 Kernel 启发式选择算子的功能,用于保证有多个Kernel 可用时,选择到合适的 Kernel。

b. 优化后的模型性能:

上图中部分模型 MegCC 略微慢于 MegEngine 的原因是: MegEngine 有完善的算法搜索逻辑,部分场景选出来的算法优于 MegCC, 后续版本的 MegCC 会补齐这部分工作。

MegCC 新版本主要对推理基础功能进行完善优化,提供 Benchmark, Kernel_exporter 等周边工具,方便用户获取推理性能以及推理模型中的 Kenrel 代码,持续优化 Kernel 性能,感兴趣的小伙伴赶快来试用啦!

附:

更多 MegEngine 信息获取,您可以:查看文档、和 GitHub 项目,或加入 MegEngine 用户交流 QQ 群:1029741705。欢迎参与 MegEngine 社区贡献,成为 Awesome MegEngineer,荣誉证书、定制礼品享不停。

有关MegCC 新版本来啦!新增 Benchmark 等工具,性能大幅提升!的更多相关文章

  1. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  2. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  3. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  4. ruby-on-rails - 有没有一种工具可以在编码时自动保存对文件的增量更改? - 2

    我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功

  5. Ruby 的数字方法性能 - 2

    我正在使用Ruby解决一些ProjectEuler问题,特别是这里我要讨论的问题25(Fibonacci数列中包含1000位数字的第一项的索引是多少?)。起初,我使用的是Ruby2.2.3,我将问题编码为:number=3a=1b=2whileb.to_s.length但后来我发现2.4.2版本有一个名为digits的方法,这正是我需要的。我转换为代码:whileb.digits.length当我比较这两种方法时,digits慢得多。时间./025/problem025.rb0.13s用户0.02s系统80%cpu0.190总计./025/problem025.rb2.19s用户0.0

  6. ruby - Ruby 性能中的计时器 - 2

    我正在寻找一个用ruby​​演示计时器的在线示例,并发现了下面的代码。它按预期工作,但这个简单的程序使用30Mo内存(如Windows任务管理器中所示)和太多CPU有意义吗?非常感谢deftime_blockstart_time=Time.nowThread.new{yield}Time.now-start_timeenddefrepeat_every(seconds)whiletruedotime_spent=time_block{yield}#Tohandle-vesleepinteravalsleep(seconds-time_spent)iftime_spent

  7. ruby-on-rails - 如果条件与 &&,是否有任何性能提升 - 2

    如果用户是所有者,我有一个条件来检查说删除和文章。delete_articleifuser.owner?另一种方式是user.owner?&&delete_article选择它有什么好处还是它只是一种写作风格 最佳答案 性能不太可能成为该声明的问题。第一个要好得多-它更容易阅读。您future的自己和其他将开始编写代码的人会为此感谢您。 关于ruby-on-rails-如果条件与&&,是否有任何性能提升,我们在StackOverflow上找到一个类似的问题:

  8. ruby - 使用 Ruby 开发工具包将文件上传到 Amazon S3 - 2

    我正在尝试上传文件。一个简单的hello.txt。我正在关注文档,但无法将其上传到我的存储桶。#STARTAWSCLIENTs3=Aws::S3::Resource.newbucket=s3.bucket(BUCKET_NAME)begins3.buckets[BUCKET_NAME].objects[KEY].write(:file=>FILE_NAME)puts"Uploadingfile#{FILE_NAME}tobucket#{BUCKET_NAME}."bucket.objects.eachdo|obj|puts"#{obj.key}=>#{obj.etag}"endresc

  9. ruby - 如何找到我的 Ruby 应用程序中的性能瓶颈? - 2

    我编写了一个Ruby应用程序,它可以解析来自不同格式html、xml和csv文件的源中的大量数据。我如何找出代码的哪些区域花费的时间最长?有没有关于如何提高Ruby应用程序性能的好资源?或者您是否有任何始终遵循的性能编码标准?例如,你总是用加入你的字符串吗?output=String.newoutput或者你会使用output="#{part_one}#{part_two}\n" 最佳答案 好吧,有一些众所周知的做法,例如字符串连接比“#{value}”慢得多,但是为了找出您的脚本在哪里消耗了大部分时间或比所需时间更多,您需要进行分

  10. ruby - 在 StockChart (highchart) 中以编程方式显示柱形图的工具提示 - 2

    我有一个Highstock图表(带有标记和阴影的线条),并且想以编程方式显示一个highstock工具提示,例如,当我选择某个表上的一行(包含图表数据)我想显示相应的highstock工具提示。这可能吗? 最佳答案 股票图表thissolution不起作用:在thisexample你必须更换这个:chart.tooltip.refresh(chart.series[0].data[i]);为此:chart.tooltip.refresh([chart.series[0].points[i]]);解决方案可用here.

随机推荐