從零在win10上測試whisper、faster-whisper、whisperx在CPU和GPU的各自表現情況

aehyok發表於2024-05-10

Anaconda是什麼?

Anaconda 是一個開源的 Python 發行版本,主要面向資料科學、機器學習和資料分析等領域。它不僅包含了 Python 直譯器本身,更重要的是整合了大量的用於科學計算、資料分析和機器學習相關的第三方庫,並且提供了一個強大的包管理和環境管理工具——Conda。
透過Conda可以在一臺電腦上,建立多個python的環境,非常自由的進行切換。
以下是 Anaconda 的主要特點和功能:

  • 便捷的環境管理:Anaconda 透過其內建的包管理器 Conda,使得建立、管理和切換不同的 Python 環境變得極為簡單。使用者可以在不同專案之間輕鬆配置獨立的環境,每個環境中可以安裝特定版本的 Python 和其他庫,避免了不同專案依賴之間的衝突。

  • 豐富的資料科學工具:安裝 Anaconda 時會附帶一系列常用的資料科學庫,如 NumPy、Pandas、Matplotlib、Scikit-learn 等,以及 Jupyter Notebook 這樣的互動式開發環境。還包括其他有用的工具,例如 Spyder IDE(整合開發環境)和 IPython 終端等,這些都為資料科學家提供了開箱即用的一站式解決方案。

  • 高效的包管理:Conda 不僅可以管理 Python 包,還能管理非 Python 軟體包,如R語言相關包或 C/C++ 編譯器等。Conda 能夠智慧地解決複雜的軟體依賴關係,確保所有庫和元件都能正確安裝和協同工作,極大地提高了開發效率。

  • 跨平臺支援:Anaconda 支援 Windows、Linux 和 MacOS 等多種作業系統,便於在不同的開發平臺上統一使用和部署。

下載anaconda並在window上安裝

https://www.anaconda.com/download/success

這是anaconda的官網下載地址

image

這裡要注意python的版本,儘量跟它保持一致,點選下載之後,如果網路好的話等待一會兒就下載完畢了。

image

下載完畢後,開啟exe進行安裝

image

這裡安裝時間可能會久一些,請多耐心等待一會兒吧。

image

確實等了蠻久的時間的,但具體忘記了,可能大致在15-20分鐘左右吧,千等萬等終於安裝成功了

image

此時用命令列來檢視還是不行的,因為沒有配置環境變數

以此點選:我的電腦=> 右鍵屬性=>高階系統設定=>環境變數=> Path =>編輯
將下面的五個路徑新增到 Path中去

注意替換成你的安裝路徑

D:\ProgramData\anaconda3
D:\ProgramData\anaconda3\Scripts 
D:\ProgramData\anaconda3\Library\mingw-w64\bin
D:\ProgramData\anaconda3\Library\usr\bin 
D:\ProgramData\anaconda3\Library\bin

image

點選三次確定之後,再在命令列中執行

image

這樣說明真正的安裝成功了,下面再來看看如何使用

conda如何來使用呢

  • 基礎命令
// 檢視版本
conda -V

// 檢視安裝了那些包
conda list

//檢視當前存在哪些虛擬環境
conda env list 或 conda info -e

//檢查更新當前conda
conda update conda 

// 使用conda安裝python依賴
conda install xxxx
  • 建立一個虛擬環境

因為我之前電腦上安裝的就是3.11.2的版本,所以在這裡直接繼續指定python版本為3.11.2

conda create -n python3112 python=3.11.2

此時可以檢視window電腦上擁有那些虛擬環境

conda env list

image

啟用環境

conda activate python3112

首次執行上面的命令可能需要使用conda init,執行完畢後關閉當前shell指令碼命令,再重新開啟執行啟用環境的命令

image

退出虛擬環境

conda deactivate

注意:看上面我是直接在CMD下使用的命令,比如如果你想在git bash下執行conda的話

image

echo ". /d/ProgramData/anaconda3/etc/profile.d/conda.sh" >>~/.profile

上面替換成自己的安裝目錄,執行完畢之後,關閉命令視窗,重新開啟一個新的便可以執行 conda命令了

conda安裝成功之後,安裝依賴儘量使用conda 來,就不要使用pip了

初始使用了幾天的conda,感覺還不錯

如何在window上開啟GPU

首先使用 cmd 命令列輸入 nvidia-smi ,在第一行最右邊可以看到CUDA的版本號,我的版本是12.3

image

https://pytorch.org/get-started/locally/
開啟網址選擇一個比較靠近的版本

image

最終選擇完生成命令為

conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia

如果有卡住的可能就是網路有問題了,可以直接到映象源進行下載安裝 https://download.pytorch.org/whl/torch_stable.html

image
這裡也需要你的耐心等待喲,因為Pytorch 的安裝包還是不小的。

image

多等一會兒,出現done則代表安裝成功了,然後在命令列中輸入pip list則可以看到torch相關的包都安裝了

image

CUDA是什麼:CUDA是NVIDIA推出的一種程式設計技術。它允許開發者使用C語言來編寫能在NVIDIA的圖形處理器上執行的程式碼。透過CUDA,開發者可以將GPU用於通用的平行計算,大大提高了計算效率。
CUDA的一個重要特點是,它允許軟體開發者直接使用NVIDIA的GPU來執行某些計算密集型的任務。這是因為GPU內部有許多並行處理單元,可以同時執行許多計算任務,從而大大提高了計算速度。
另外,CUDA還提供了一套完整的開發工具鏈,包括編譯器、偵錯程式和效能分析器,使得開發者可以更方便地開發和最佳化CUDA程式。

接下來直接驗證CUDA是否可用,直接繼續命令列中輸入 python

import torch
torch.cuda.is_available()

如果輸出為true則代表可以使用GPU顯示卡了

image

準備whisper、faster-whisper、whisperX的測試程式碼

import whisper
from whisper.utils import get_writer
import os
import time
import torch
import os   #引用OS
from faster_whisper import WhisperModel
import whisperx
import gc 

def whisperx_test():
    device = "cpu" 
    model_size = "large-v3"
    audio_file = "test.mp4"
    batch_size = 16
    compute_type = "int8" 

    # widnow CPU
    model = whisperx.load_model("large-v3", device, compute_type=compute_type)

    # window GPU
    # model = whisperx.load_model("large-v3", "cuda", compute_type="float16")

    audio = whisperx.load_audio(audio_file)
    result = model.transcribe(audio, batch_size=batch_size)

    print(result["segments"])

def faster_whisper_test(): 
    model_size = "large-v3"

    ## window cpu
    model = WhisperModel(model_size, device="cpu", compute_type="int8", cpu_threads=16)
    
    # window gpu
    # model = WhisperModel(model_size, device="cuda", compute_type="float16")
    segments, info = model.transcribe("test.mp4", beam_size = 5)

    print("Detected language '%s' with probability %f" % (info.language, info.language_probability))

    for segment in segments:
        print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))

def whisper_test():

    os.environ['KMP_DUPLICATE_LIB_OK'] = 'TRUE'

    filename = "test.mp4"   

    ## window GPU  cuda
    ## window CPU  cpu
    ## mac CPU cpu
    ## mac GPU
    model = whisper.load_model("large-v3",device="cuda")
    result = model.transcribe(audio=filename, fp16 =False)
    output_directory = "."

    word_options = {
    "highlight_words": True,
    "max_line_count": 50,
    "max_line_width": 3
    }

    srt_writer = get_writer("srt", output_directory)
    srt_writer(result, filename, word_options)

if __name__ == "__main__":
    # print(torch.cuda.is_available())
    start_time = time.time()  # 開始時間
    print("start time:", start_time)
    # whisper_test()
    # faster_whisper_test()
    whisperx_test()
    end_time = time.time()  # 結束時間
    print("Execution time: ", end_time - start_time, "seconds")

三個開源專案的地址分別是:

  • https://github.com/openai/whisper
  • https://github.com/AlexxIT/FasterWhisper
  • https://github.com/m-bain/whisperX

根據程式碼要進行安裝依賴,也是我從三個開源專案的readme中可以找到安裝依賴的命令

// 安裝openai-whisper
pip install -U openai-whisper --user
//或者
pip install --upgrade --no-deps --force-reinstall git+https://github.com/openai/whisper.git

// 安裝faster-whisper
pip install faster-whisper
//或者
pip install git+https://github.com/openai/whisper.git 


//安裝whisperx
pip install git+https://github.com/m-bain/whisperx.git

//如果執行後,看到ffmpeg not found 
要記得安裝一下ffmpeg

當然上面的pip也可以換成conda

準備了三個方法

  • whisper_test 來測試openai官網釋出的whisper
  • faster_whisper_test來測試改進版的faster_whisper
  • whisperx來測試基於faster_whisper再次改進的版本
    測試的時候,我是準備了一個30秒的小影片 test.mp4。
    然後分為CPU和GPU進行分別測試。

根據測試情況進行註釋上述方法即可,執行如下命令即開啟測試

python main.py

在這裡先附上我的電腦配置,其實是比較一般的

image

window上測試openai的whisper

  • 先來看GPU測試情況
    我先開啟工作管理員 => 效能 => GPU

image

沒進行測試的時候GPU的佔用其實很少的,如果一旦開啟了GPU測試就可以看到下圖所示的GPU記憶體佔用

image

最終在GPU執行的情況下,我測試了三次

image

window-whisper-GPU:大致平均150秒

  • 再來測試CPU的情況
    執行之後我的CPU直接100%,直接拉滿了

image

同樣,再使用CPU的情況下,測試了三次

image

看來我這個GPU顯示卡還是非常一般的,竟然沒有CPU的快

window-whisper-CPU:大致平均100秒

window上測試faster-whisper

  • 先來看GPU測試情況

image

同樣分三次進行測試大致也就是50秒左右,在GPU的情況下,記憶體佔用居然比whisper的少了近一半,難道速度也能提升一半嗎?

image

window-faster-whisper-GPU: 大致平均50秒左右
沒想到真的提升了速度,而且不止一半,真不錯

  • 再來測試CPU的情況

image

同樣的CPU接近100%了,但是記憶體好像比原來少了差不多一半

image

window-faster-whisper-CPU: 大致平均50秒左右

window上測試whisperX

GPU 測試三次

image

window-whisperX-GPU: 大致平均36秒左右
CPU 測試三次

image

window-faster-whisperX-CPU: 大致平均43秒左右

沒想到的是whisperx在faster-whisper的基礎上還有提升

mac上執行whisper

本來還想繼續在mac上測試,發現除了openai的whisper能在CPU下執行,其他的跑起來都有問題,可能也是我自己的問題吧

image

mac-openai-whisper-CPU:大致50秒左右
這是自Mac M1 Pro上做的測試

總結一下

image

我只是進行簡單的測試做了一個對比。mac的CPU還是非常強大的,當然了價格也擺在了那裡。

我這裡測試的時候也沒有進行過多的引數調整,有時間的話可以進行比如 int8、float16、float32等等其他的多組測試資料。

接下來看看有機會再來試試另外兩個開源模型

  • https://github.com/sanchit-gandhi/whisper-jax
  • https://github.com/ggerganov/whisper.cpp

相關文章