音訊處理庫效能對比:計算mel頻譜的速度哪個更快?

2023-04-25 15:00:28

介紹

音訊訊號處理在各種應用中都發揮著重要的作用,如語音識別、音樂資訊檢索、語音合成等。其中,Mel頻譜是一種常用的頻域特徵表示方法,用於描述人類聽覺系統對頻率的敏感程度。

在深度學習音訊領域,mel頻譜是最常用的音訊特徵。在本文中,我們將對四個常用的音訊處理庫——audioflux、torchaudio、librosa和essentia——進行效能測試,以評估它們在計算Mel頻譜時的效率。

Library Language Version About
audioFlux C/Python 0.1.5 A library for audio and music analysis, feature extraction
torchaudio Python 0.11.0 Data manipulation and transformation for audio signal processing, powered by PyTorch
librosa Python 0.10.0 C++ library for audio and music analysis, description and synthesis, including Python bindings
essentia C++/Python 2.0.1 Python library for audio and music analysis

audioFlux:基於C開發和python包裝,底層針對不同平臺有不同的橋接處理,支援OpenBLAS,MKL等
TorchAudio: 基於pytorch開發,pytorch基於C++開發和python包裝,底層使用MKL,pytorch針對CPU是高度優化的(本篇評測不涉及到GPU版pytorch);
librosa: 純python開發,主要基於numpy和scipy,numpy底層使用OpenBLAS;
Essentia: 基於C++開發和python包裝,底層使用Eigen,FFTW;

針對音訊領域最常見的mel特徵,涉及到效能主要卡點有FFT計算,矩陣計算,多執行緒並行處理這三部分,其它次要卡點有演演算法業務實現,python包裝等。

針對FFT計算,librosa使用scipy的fftpack實現FFT計算加速,比FFTW3,MKL,Accelerate要慢一些;
針對矩陣計算,MKL比OpenBLAS要快些,OpenBLAS比其Eigen快一些;
針對多執行緒並行處理,具體各個專案內部是否有支援。

測試指令碼

  1. 測試多個庫,使用以下方式:
$ python run_benchmark.py -p audioflux,torchaudio,librosa -r 1000 -er 10  -t 1,5,10,100,500,1000,2000,3000
  • -p: The library name, list
  • -r: The number of sample data, number
  • -er: The number of run_xxx.py calls, number
  • -t: The time of each sample data, list
  1. 測試單個庫,使用以下方式:
$ python run_audioflux.py -r 1000 -t 1,5,10,100,500,1000,2000,3000
  1. 需要更多的命令功能,可以python run_xxx.py --help

注意

在音訊領域,與音訊特徵提取相關的庫具有自己的功能特點,並提供不同型別的特徵。本次評估並不旨在詳細測試所有特徵提取的效能比較,但是由於梅爾頻譜是最重要和基礎的特徵之一,因此所有這些庫都支援它。

許多因素會影響效能評估結果,如 CPU 架構、作業系統、編譯系統、基本線性代數庫的選擇以及專案 API 的使用,這些因素都會對評估結果產生一定的影響。為了儘可能公平地反映實際業務需求,本次評估基於以下條件:

  1. macOS/Linux 作業系統,三種 CPU:Intel/AMD/M1。
  2. 庫使用最新的官方釋出版本或使用具有高效能支援的最新官方原始碼編譯,並選擇最快的版本。
  3. 在 API 使用方面,遵循官方標準,並對每個庫的相應方法進行「預熱」(不計算第一次執行時間),並不計算初始化的執行時間。
  4. 在資料長度方面,選擇測試資料時考慮各種實際業務需求。

當資料較短時,大多數庫的第一次執行時間可能相對較慢。為了反映實際業務需求並保持公平,不計算第一次執行時間。如果庫的 API 設計提供了初始化函數,則在實際業務場景中會建立並重復呼叫它們,初始化的執行時間也不計入評估結果。

警告

⚠️ 當使用 Conda、PyTorch、TensorFlow、XGBoost、LightGBM 等 Python 科學計算相關的庫時,幾乎所有這些庫都使用 Intel Math Kernel Library (MKL)。MKL 使用 OpenMP 進行並行加速,但是在同一程序中只能存在一個 OpenMP 範例。當這些庫一起使用時,最好將所有庫連結到 libomp 的相同位置,否則會出現錯誤。根據提示修改環境變數可能會導致程式執行變慢併產生不可靠的結果。相關工具可以用於重寫相關庫的 libomp 連結路徑。

效能

使用 audioFlux/torchaudio/librosa 庫, 針對 AMD/Intel/M1 CPUs and Linux/macOS 系統。

計算1000個樣本資料的mel頻譜,針對 1/5/10/100/500/1000/2000/3000每個樣本尺寸大小。 引數為 fft_len=2048, slide_len=512, sampling_rate=32000。

Linux - AMD

- OS: Ubuntu 20.04.4 LTS
- CPU: AMD Ryzen Threadripper 3970X 32-Core Processor

TimeStep audioflux torchaudio librosa
1 0.04294s 0.07707s 2.41958s
5 0.14878s 1.05589s 3.52610s
10 0.18374s 0.83975s 3.46499s
100 0.67030s 0.61876s 6.63217s
500 0.94893s 1.29189s 16.45968s
1000 1.43854s 2.23126s 27.78358s
2000 3.08714s 4.10869s 45.12714s
3000 4.90343s 5.86299s 51.62876s

Linux - Intel

- OS: Ubuntu 20.04.4 LTS
- CPU: Intel(R) Core(TM) i7-6850K CPU @ 3.60GHz

TimeStep audioflux torchaudio librosa
1 0.08106s 0.11043s 5.51295s
5 0.11654s 0.16005s 5.77631s
10 0.29173s 0.15352s 6.13656s
100 1.18150s 0.39958s 10.61641s
500 2.23883s 1.58323s 28.99823s
1000 4.42723s 3.98896s 51.97518s
2000 8.73121s 8.28444s 61.13923s
3000 13.07378s 12.14323s 70.06395s

macOS - Intel

- OS: 12.6.1 (21G217)
- CPU: 3.8GHz 8‑core 10th-generation Intel Core i7, Turbo Boost up to 5.0GHz

TimeStep audioflux torchaudio librosa
1 0.07605s 0.06451s 1.70139s
5 0.14946s 0.08464s 1.86964s
10 0.16641s 0.10762s 2.00865s
100 0.46902s 0.83551s 3.28890s
500 1.08860s 5.05824s 8.98265s
1000 2.64029s 9.78269s 18.24391s
2000 5.40025s 15.08991s 33.68184s
3000 7.92596s 24.84823s 47.35941s

macOS - M1

- OS: 12.4 (21F79)
- CPU: Apple M1

TimeStep audioflux torchaudio librosa
1 0.06110s 0.06874s 2.22518s
5 0.23444s 0.07922s 2.55907s
10 0.20691s 0.11090s 2.71813s
100 0.68694s 0.63625s 4.74433s
500 1.47420s 3.37597s 13.83887s
1000 3.00926s 6.76275s 25.24646s
2000 5.99781s 12.69573s 47.84029s
3000 8.76306s 19.03391s 69.40428s

詳細Benchmark和指令碼: https://github.com/libAudioFlux/audioFlux/tree/master/benchmark

總結

總的來說,從三個庫的效能比較結果來看,librosa 執行時間最長,這也符合常識。
在 linux/amd 處理器上,audioflux 比 torchaudio 稍快,但在 linux/intel 上稍慢。
在 macOS 系統上,對於大尺寸樣本資料,audioflux 比 torchaudio 快,intel 比 m1 明顯;對於小尺寸樣本資料,torchaudio 比 audioflux 更快。

⚠️儘管本次基準測試的開發旨在儘可能客觀和公正,但每個基準測試都有其缺點,並且限於特定的測試程式、資料集和平臺。此外,本次基準測試未比較庫可能支援的其他功能或其他 API、跨平臺等。我們鼓勵使用者使用自己的資料集和平臺進行基準測試。