V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
829939
V2EX  ›  程序员

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

  •  2
     
  •   829939 ·
    LiweiDong · 339 天前 · 4419 次点击
    这是一个创建于 339 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前段时间开源了一个关于音频特征提取和分析的小项目,自己是 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

    34 条回复    2023-04-26 20:09:36 +08:00
    chatWell1
        1
    chatWell1  
       339 天前
    不错哦,图很漂亮
    dark009
        2
    dark009  
       339 天前
    大佬,怎么没有看到关于 essentia 的对比图呢?
    xbcslzy
        3
    xbcslzy  
       339 天前 via iPhone
    强 已 star
    829939
        4
    829939  
    OP
       339 天前
    @dark009 essentia 太慢,导致柱状图拉的太高 看不清另外两个了😂。所以就没放

    CMLab
        5
    CMLab  
       339 天前
    project:audioflux-0.1.5
    runtimes:1
    time_steps:1,5,10,100,500,1000,2000,3000
    feature_name:mel
    radix2_exp:11
    slide_length:512
    ----------
    audioflux mel 1 0.23315906
    audioflux mel 5 0.18369913
    audioflux mel 10 0.19328594
    audioflux mel 100 0.59645653
    audioflux mel 500 1.74749613
    audioflux mel 1000 3.57704639
    audioflux mel 2000 6.67310715
    audioflux mel 3000 9.54481602
    ==========
    project:torchaudio-0.13.1/torch-1.13.1
    runtimes:1
    time_steps:1,5,10,100,500,1000,2000,3000
    feature_name:mel
    radix2_exp:11
    slide_length:512
    ----------
    torchaudio mel 1 0.13180018
    torchaudio mel 5 0.14314651
    torchaudio mel 10 0.17399549
    torchaudio mel 100 1.42241955
    torchaudio mel 500 9.03672457
    torchaudio mel 1000 16.18315935
    torchaudio mel 2000 17.63835192
    torchaudio mel 3000 28.65790367
    ==========
    project:librosa-0.8.0
    runtimes:1
    time_steps:1,5,10,100,500,1000,2000,3000
    feature_name:mel
    radix2_exp:11
    slide_length:512
    ----------
    librosa mel 1 2.81565189
    librosa mel 5 2.44408846
    librosa mel 10 2.65174866
    librosa mel 100 4.51287270
    librosa mel 500 12.60835171
    librosa mel 1000 23.84555340
    librosa mel 2000 36.47141218
    librosa mel 3000 49.74691391
    ==========
    CMLab
        6
    CMLab  
       339 天前
    @829939 macOS 13.1 intel 这个数据正常吗?
    ppxiale
        7
    ppxiale  
       339 天前
    大佬牛啊,继续加油,看到了未来音频方面国产之光,小项目也有大潜力
    chatWell1
        8
    chatWell1  
       339 天前
    @CMLab 我的 18 年 mac 太慢了,跑出来的数据是越小越好吗
    dark009
        9
    dark009  
       339 天前
    @829939 哇,厉害呀,已 star
    829939
        10
    829939  
    OP
       339 天前 via iPhone
    @CMLab 正常,验证了我这个结论

    在 macOS 系统上,对于大尺寸样本数据,audioflux 比 torchaudio 快,intel 比 m1 明显; 对于小尺寸样本数据,torchaudio 比 audioflux 更快。
    CMLab
        11
    CMLab  
       339 天前
    @829939 厉害了,看数据大尺寸差异还是挺明显的
    stonepy
        12
    stonepy  
       339 天前
    最近正好在批量提取 mel 特征数据,用这个效率直接翻倍哇
    fanjk
        13
    fanjk  
       339 天前
    恭喜,竞争力进一步加强,期待后续更新迭代能有更好的表现
    thorneLiu
        14
    thorneLiu  
       339 天前 via Android
    使用一些 SIMD 的指令会不会有提升空间
    CrazyRundong
        15
    CrazyRundong  
       339 天前 via iPhone
    已 start ,待会儿仔细学习下怎么优化的。另外,项目的 logo 做的非常漂亮啊!
    collinmehle
        16
    collinmehle  
       338 天前
    加油,干爆 torchaudio
    loopp
        17
    loopp  
       338 天前
    已 star
    amrice
        18
    amrice  
       338 天前
    卧槽,1.5K 的 star ,大佬大佬
    james0517
        19
    james0517  
       338 天前
    性能优化是一个不断迭代的过程,现在看来大尺寸样本数据的对比情况已经相当不错了。
    虽然和 torchaudio 相比还有一些差距,但是它已经比大多数相关库都要快了。

    加油继续优化
    Aloento
        20
    Aloento  
       338 天前
    大佬加油,已经在用了
    ManxCat
        21
    ManxCat  
       338 天前
    真正的大佬 不明觉厉
    cyril11
        22
    cyril11  
       338 天前
    @Aloento 大佬用在哪个领域了? 效果怎么样
    CMLab
        23
    CMLab  
       338 天前
    @james0517 确实,干爆 torchaudio 估计不太容易,torchaudio 本身就是针对 CPU 和 GPU 高度优化的库。

    加油继续优化!!!
    chatWell1
        24
    chatWell1  
       338 天前
    @829939 大佬有考虑 cuda 版本支持 GPU 吗?
    chesha1
        25
    chesha1  
       338 天前
    好厉害的大佬,开源的小项目也能有上千的 star
    不过 pytorch 底层不也是 C/C++写的吗,所以想要性能比他们好还是有点困难?
    chatWell1
        26
    chatWell1  
       338 天前
    确实有困难,听闻 pytorch 用的 Intel 定制版的 MKL 线代库,matlab 貌似也是,这个比 OpenBLAS 要快
    klwha
        27
    klwha  
       338 天前 via Android
    @chatWell1 openblas 可以比 mkl 快,但是调起来更蛋疼
    olderwang
        28
    olderwang  
       338 天前
    已 star ,收藏待用
    829939
        29
    829939  
    OP
       338 天前
    @chatWell1 后续可能会尝试 cuBLAS 的方案
    xbcslzy
        30
    xbcslzy  
       338 天前
    试了一下, 确实提升很大
    SteveDoyle2
        31
    SteveDoyle2  
       338 天前
    不明觉厉,只能 star 一下了。
    chatWell1
        32
    chatWell1  
       338 天前
    @klwha OpenBLAS 比 MKL 快,是编译的时候的需要加什么参数吗
    Aloento
        33
    Aloento  
       337 天前
    @cyril11 TTS ,就是快(但是想放弃 python 了)
    klwha
        34
    klwha  
       337 天前
    @chatWell1 基本是手动调机器参数了,一个参数只对一个 CPU 快,没啥用
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5161 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 05:42 · PVG 13:42 · LAX 22:42 · JFK 01:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.