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

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

  •  2
     
  •   829939 ·
    LiweiDong · 2023-04-25 10:09:42 +08:00 · 4788 次点击
    这是一个创建于 563 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前段时间开源了一个关于音频特征提取和分析的小项目,自己是 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  
       2023-04-25 10:16:36 +08:00
    不错哦,图很漂亮
    dark009
        2
    dark009  
       2023-04-25 10:25:30 +08:00
    大佬,怎么没有看到关于 essentia 的对比图呢?
    xbcslzy
        3
    xbcslzy  
       2023-04-25 10:39:16 +08:00 via iPhone
    强 已 star
    829939
        4
    829939  
    OP
       2023-04-25 10:41:08 +08:00
    @dark009 essentia 太慢,导致柱状图拉的太高 看不清另外两个了😂。所以就没放

    CMLab
        5
    CMLab  
       2023-04-25 10:42:15 +08:00
    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  
       2023-04-25 10:49:15 +08:00
    @829939 macOS 13.1 intel 这个数据正常吗?
    ppxiale
        7
    ppxiale  
       2023-04-25 10:49:50 +08:00
    大佬牛啊,继续加油,看到了未来音频方面国产之光,小项目也有大潜力
    chatWell1
        8
    chatWell1  
       2023-04-25 10:52:36 +08:00
    @CMLab 我的 18 年 mac 太慢了,跑出来的数据是越小越好吗
    dark009
        9
    dark009  
       2023-04-25 11:06:07 +08:00
    @829939 哇,厉害呀,已 star
    829939
        10
    829939  
    OP
       2023-04-25 11:07:46 +08:00 via iPhone
    @CMLab 正常,验证了我这个结论

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

    加油继续优化
    Aloento
        20
    Aloento  
       2023-04-25 16:22:50 +08:00
    大佬加油,已经在用了
    ManxCat
        21
    ManxCat  
       2023-04-25 16:23:39 +08:00
    真正的大佬 不明觉厉
    cyril11
        22
    cyril11  
       2023-04-25 16:45:06 +08:00
    @Aloento 大佬用在哪个领域了? 效果怎么样
    CMLab
        23
    CMLab  
       2023-04-25 16:54:56 +08:00
    @james0517 确实,干爆 torchaudio 估计不太容易,torchaudio 本身就是针对 CPU 和 GPU 高度优化的库。

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