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