
十分鐘把語音識別搬上顯卡whisper.cpp CUDA 加速教程【免費下載鏈接】whisper.cppPort of OpenAIs Whisper model in C/C項目地址: https://gitcode.com/GitHub_Trending/wh/whisper.cpp昨晚試著轉(zhuǎn)錄一段兩小時的播客純 CPU 跑 whisper-cli第二天早上起來還沒跑完。轉(zhuǎn)折其實很簡單whisper.cpp 是 OpenAI Whisper 語音識別模型的 C/C 移植它對 NVIDIA GPU 有一等公民級別的支持開啟 CUDA 做 GPU 加速后同樣的音頻幾分鐘就能轉(zhuǎn)完精度也基本不掉。這篇就是帶你從零走到看到顯卡真的在干活的那一步。三步編譯出 CUDA 版本動手前先花一分鐘確認環(huán)境終端里跑一下nvidia-smi能看到顯卡型號和顯存就說明驅(qū)動正常再跑nvcc --version能看到 CUDA 工具鏈的版本說明編譯器也裝好了。兩樣齊了編譯本身只有兩行cmake -B build -DGGML_CUDA1 cmake --build build -j --config Release第一個參數(shù)就是全部關(guān)鍵-DGGML_CUDA1告訴構(gòu)建系統(tǒng)把計算卸載到 GPU缺了它編譯出來的就是純 CPU 版本。如果沒有倉庫代碼先克隆下來git clone https://gitcode.com/GitHub_Trending/wh/whisper.cpp cd whisper.cpp跑通第一條最小命令模型不用自己訓(xùn)練或轉(zhuǎn)換倉庫帶了現(xiàn)成的下載腳本一行拿到 ggml 格式的 base 英語模型./models/download-ggml-model.sh base.en然后用倉庫自帶的示例音頻跑一條最小命令./build/bin/whisper-cli -m models/ggml-base.en.bin -f samples/jfk.wav幾秒后終端會輸出Ask not what your country can do for you...這段轉(zhuǎn)錄結(jié)果。想確認 GPU 真的參與了計算最簡單的辦法是換一段長一點的音頻跑起來的同時另開一個終端看nvidia-smi你能看到 whisper-cli 進程掛在進程列表里顯存占用和 GPU 利用率都會動。如果跑完了顯存紋絲不動別急著懷疑顯卡先往下翻到排查那節(jié)九成是編譯時 CUDA 沒開。模型按顯存檔位選whisper.cpp 的模型從 tiny 到 large 一共五檔精度和速度大致正相關(guān)選哪個基本由你的顯存決定。下表是實踐中的粗檔位供你直接對號入座模型顯存檔位適合的卡一句話點評tiny / tiny.en約 1 GB2 GB 以上隨便跑通流程、快速驗證首選base / base.en約 2 GB4 GB 卡速度和精度的平衡點small / small.en約 4 GB6 GB 以上日常轉(zhuǎn)錄夠用推薦起步medium / medium.en約 6 GB8 GB 卡專業(yè)級精度large-v38 GB 以上12 GB 以上精度最高速度最慢兩點小提醒一是帶.en后綴的模型只支持英語如果你的音頻是中文或混合語言選不帶后綴的版本二是下載腳本的模型列表里本身就有一批量化版比如base.en-q5_1、small.en-q5_1顯存緊張時可以直接下載量化版省去自己量化的步驟。顯存不夠時先翻這三個開關(guān)如果你的卡比表格推薦的檔位小一圈或者報CUDA out of memory按這個順序試每個開關(guān)都很便宜第一個開關(guān)是量化。把 fp16 的原始模型壓成 q5_0 或 q8_0顯存占用能明顯下降q8_0 的精度損失幾乎無感q5_0 能省得更多、偶爾會掉一點字./build/bin/quantize models/ggml-base.en.bin models/ggml-base.en-q5_0.bin q5_0第二個開關(guān)是 flash attention。命令行加一個-fa參數(shù)即可開啟注意力部分的顯存開銷會降下來長音頻上尤其明顯代價是可以忽略的耗時變化。第三個開關(guān)是把長音頻切成小段。whisper-cli 支持偏移和時長兩個參數(shù)-ot和-od你可以把兩小時的音頻按 10 分鐘一段循環(huán)處理每段處理完顯存就釋放掉代價是需要自己寫個循環(huán)拼結(jié)果但這是最穩(wěn)的兜底方案。跑掛了兩類高頻問題按順序排查編譯了但 CUDA 其實沒生效。先看運行時的nvidia-smi顯存和利用率紋絲不動就是信號。再往下查兩件事一是有沒有裝 CUDA 工具鏈nvcc --version給不出版本就要先裝二是構(gòu)建緩存里GGML_CUDA到底是不是 ON——去build/CMakeCache.txt里搜一下這個關(guān)鍵字就知道。確認沒開后用-DGGML_CUDA1重新 configure 并完整重編一遍注意別復(fù)用舊的 build 目錄刪掉重來最省心。顯存爆掉了CUDA out of memory。先看nvidia-smi里還剩多少空閑、被誰占著有時候只是瀏覽器或別的推理進程把顯存吃光了關(guān)掉就好??臻g確實不夠再改換小一檔或量化后的模型、開-fa、把音頻切片分批跑就是上一節(jié)三個開關(guān)的順序基本都能救回來。繼續(xù)深挖的三個方向跑通之后想理解 GPU 上到底發(fā)生了什么可以直接讀 ggml/src/ggml-cuda/ 里的 CUDA 內(nèi)核實現(xiàn)注意力、矩陣乘都有對應(yīng)的.cu文件配合編譯選項比如 FP16 計算、cuBLAS 與自研內(nèi)核的取舍看很有意思。想要完整應(yīng)用而不是命令行examples/ 目錄下有流式識別、HTTP 服務(wù)端、基準測試等現(xiàn)成示例每個都帶自己的說明。想對照不同硬件的性能預(yù)期scripts/bench-all-gg.txt 里沉淀了歷次的基準數(shù)據(jù)。社區(qū)層面?zhèn)}庫的 Discussions 和 issue 區(qū)是 CUDA 相關(guān)問題反饋最集中的地方遇到奇怪的現(xiàn)象先去搜一遍大概率有人踩過?!久赓M下載鏈接】whisper.cppPort of OpenAIs Whisper model in C/C項目地址: https://gitcode.com/GitHub_Trending/wh/whisper.cpp創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考