这样的速度,还有提升空间吗?一个 issue 引发的性能大跃进

2023-04-25 10:09:42 +08:00
 829939

前段时间开源了一个关于音频特征提取和分析的小项目,自己是 AI 音频领域方向的,但受限于对音频特征的理解,做研究时总感觉缺乏“底料”,所以当做是学习练手做了这个小东西。

虽然是学习练手的小项目,但也信心满满,因为核心算法大部分都是 C 实现和 Python 包装的,想着怎么着也比纯 Python 实现的库快些,然后和其它相关 Python 库也做了简单的性能比对,结果确实是比较快,但没想到后面翻车了!!!

两周前收到用户提的一个 issue “Speed is slow, am I miss something? ”,定眼一看大惊失色,结果上我的库是最慢的,赶紧自己电脑上跑下,没想到比用户给出的结果还要难看,这车翻得有些大了!!! 这是相关 issue 地址: https://github.com/libAudioFlux/audioFlux/issues/18#issuecomment-1498371872

后面仔细分析发现,我当时测试数据样本尺寸太小,样本尺寸大时就慢了,性能主要卡在矩阵相乘上,后续优化后相比其它库都快不少,但相比 PyTorch 官方的 torchaudio 库还是存在一定的性能差距。

想着认命吧,谁叫人家是 torchaudio 呢,最后经过一周的熬战,尝试 OpenBLAS ,Eigen ,MKL ,FFTW ,SIMD ,并行计算等等各种技术优化点后,详细测试了不同样本尺寸大小数据,在不同 CPU 和不同系统平台的性能对比如下图:

图依次为 Linux/AMD ,macOS/Intel 下的评测结果。
这是详细的测评报告: https://github.com/libAudioFlux/audioFlux/tree/master/benchmark

综合来看,

  • 在 linux/amd 处理器上,audioflux 比 torchaudio 稍快,但在 linux/intel 上稍慢。
  • 在 macOS 系统上,对于大尺寸样本数据,audioflux 比 torchaudio 快,intel 比 m1 明显; 对于小尺寸样本数据,torchaudio 比 audioflux 更快。

经过各种艰辛的优化,比之前版本还是其它相关库都快不少,性能优化上我该做的、能做的都做了,但相比 torchaudio 还是不能完胜,希望大家点赞关注赐予我力量,期待后续性能上完胜 torchaudio !!!

感兴趣的请给个 Star

项目地址: https://github.com/libAudioFlux/audioFlux

4814 次点击
所在节点    程序员
34 条回复
ManxCat
2023-04-25 16:23:39 +08:00
真正的大佬 不明觉厉
cyril11
2023-04-25 16:45:06 +08:00
@Aloento 大佬用在哪个领域了? 效果怎么样
CMLab
2023-04-25 16:54:56 +08:00
@james0517 确实,干爆 torchaudio 估计不太容易,torchaudio 本身就是针对 CPU 和 GPU 高度优化的库。

加油继续优化!!!
chatWell1
2023-04-25 17:03:15 +08:00
@829939 大佬有考虑 cuda 版本支持 GPU 吗?
chesha1
2023-04-25 22:34:25 +08:00
好厉害的大佬,开源的小项目也能有上千的 star
不过 pytorch 底层不也是 C/C++写的吗,所以想要性能比他们好还是有点困难?
chatWell1
2023-04-25 23:47:03 +08:00
确实有困难,听闻 pytorch 用的 Intel 定制版的 MKL 线代库,matlab 貌似也是,这个比 OpenBLAS 要快
klwha
2023-04-26 00:45:47 +08:00
@chatWell1 openblas 可以比 mkl 快,但是调起来更蛋疼
olderwang
2023-04-26 10:10:24 +08:00
已 star ,收藏待用
829939
2023-04-26 10:37:23 +08:00
@chatWell1 后续可能会尝试 cuBLAS 的方案
xbcslzy
2023-04-26 10:41:24 +08:00
试了一下, 确实提升很大
SteveDoyle2
2023-04-26 10:46:05 +08:00
不明觉厉,只能 star 一下了。
chatWell1
2023-04-26 12:55:37 +08:00
@klwha OpenBLAS 比 MKL 快,是编译的时候的需要加什么参数吗
Aloento
2023-04-26 16:26:47 +08:00
@cyril11 TTS ,就是快(但是想放弃 python 了)
klwha
2023-04-26 20:09:36 +08:00
@chatWell1 基本是手动调机器参数了,一个参数只对一个 CPU 快,没啥用

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/935260

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX