
17秒跑完63秒的活faster-whisper 批處理提速的完整套路【免費(fèi)下載鏈接】faster-whisperFaster Whisper transcription with CTranslate2項(xiàng)目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisper手里有50段錄音素材逐條扔給 faster-whisper 排隊(duì)一條要十幾秒全部跑完要一個(gè)多小時(shí)換成 BatchedInferencePipeline 做批處理同樣這批素材十幾分鐘就能收工速度差出好幾倍。最小批處理示例3行代碼接入批處理先跑通。裝好后寫這一段12行from faster_whisper import WhisperModel, BatchedInferencePipeline model WhisperModel(large-v3, devicecuda, compute_typefloat16) batched_model BatchedInferencePipeline(modelmodel) segments, info batched_model.transcribe(audio.mp3, batch_size8) for seg in segments: print(f[{seg.start:.2f}s - {seg.end:.2f}s] {seg.text})和逐條轉(zhuǎn)錄只差兩行包一層BatchedInferencePipeline調(diào)transcribe時(shí)多給一個(gè)batch_size。效果差在哪官方基準(zhǔn)READMERTX 3070 Tisame-v2 轉(zhuǎn)寫13分鐘音頻batch_size1 是 1m03s63秒batch_size8只要 17秒精度沒變。CPU 上 small 模型 int8 從 1m42s 壓到 51s同樣的路數(shù)。它憑什么能快這么多往下看傳送帶。批處理流水線VAD 切塊、特征組批、并行推理把整條流水線想象成一條工廠傳送帶上料口負(fù)責(zé)把原材料切成規(guī)格件中段負(fù)責(zé)把散件裝盤末端的機(jī)器一次吃一整盤。faster-whisper 的批處理就是這三個(gè)環(huán)節(jié)。第一道工序VAD 切塊傳送帶上不能整根放料得先下料。faster_whisper/vad.py 里的get_speech_timestamps用 Silero VAD 把長音頻掃一遍只留下有人聲的區(qū)段——靜音整段丟掉。collect_chunks再把這些區(qū)段拼成不超過約30秒的塊30秒上限對齊 Whisper 一個(gè)時(shí)間窗的長度。這一步為什么必要Whisper 一次只吃30秒以內(nèi)的音頻切不開就組不成批而 VAD 先濾掉靜音塊的數(shù)量和利用率直接決定后面能塞多滿。批處理模式下vad_filter默認(rèn)就是開的見 faster_whisper/transcribe.py。第二道工序特征組批下好料的散件要裝盤。transcribe的流程是每個(gè)音頻塊先過 faster_whisper/feature_extractor.py 算出80×3000的梅爾頻譜FeatureExtractor.__call__再用pad_or_trim把每塊對齊到統(tǒng)一形狀最后np.stack疊成一個(gè)三維張量——一個(gè)批。裝盤的意義形狀統(tǒng)一了才能一次送進(jìn)模型。第三道工序并行推理機(jī)器開工。faster_whisper/transcribe.py 里BatchedInferencePipeline的_batched_segments_generator按batch_size把批一塊塊喂給forwardencoder 對整個(gè)批次做矩陣運(yùn)算decoder 逐條解碼出文字。GPU 上一塊矩陣乘法同時(shí)覆蓋批內(nèi)所有塊而不是逐塊空轉(zhuǎn)。 塊切得越碎并行度越高批塞得越滿顯卡越不閑著。17秒 vs 63秒的差距就出在顯卡不再空轉(zhuǎn)。參數(shù)速查表8GB 顯存 batch_size 怎么選以下 GPU 配置基于 README 基準(zhǔn)RTX 3070 Ti 8GBlarge-v2外推int8 指compute_typeint8_float16顯卡 / 顯存推薦 compute_type推薦 batch_size預(yù)期8GB3060/3070 Tiint8_float16863秒 → 16秒13分鐘音頻8GBfloat16463秒 → 17秒fp16 跑8批要6090MBint8 只要4500MB12GB3080int8_float16 / float168~16接近 16~17秒留余量24GB3090/4090float1616~24受單卡瓶頸收益遞減權(quán)衡法則一句話顯存 ≈ batch_size × 單塊激活大小。批越大越快但顯存是硬頂頂?shù)骄徒稻萯nt8、縮 batch、把塊切細(xì)三步按順序試。踩坑實(shí)錄四個(gè)高頻問題怎么解癥狀batch_size8直接 CUDA OOM。原因fp16 下 large-v3 跑8批要 6090MB 顯存再加系統(tǒng)和框架占用8GB 卡必然溢出。解法優(yōu)先換compute_typeint8_float168批顯存從 6090MB 降到 4500MB其次把batch_size降到 4~6再不行把 VAD 塊切細(xì)攤薄單批峰值。癥狀2小時(shí)超長音頻轉(zhuǎn)了四十多分鐘才出結(jié)果。原因一小時(shí)音頻切出200多個(gè)30秒塊按batch_size8要 25 個(gè)批總時(shí)長近似 塊數(shù) × 單批耗時(shí)線性拉長沒有免費(fèi)午餐。解法調(diào)vad_parametersdict(min_silence_duration_ms500)讓塊切得細(xì)一點(diǎn)、批間空隙變小多文件素材合并后一次提交讓批與批之間無縫銜接。癥狀50個(gè)文件逐個(gè)調(diào)transcribe隊(duì)列很長、GPU 利用率上不去。原因每個(gè)文件各自走一遍解碼→VAD→切塊→組批小文件一個(gè)批都湊不滿文件間的間隙全是空轉(zhuǎn)。解法能合并就合并——多段素材拼成一個(gè)文件再轉(zhuǎn)VAD 跨文件產(chǎn)出的塊自然把各批塞滿合并不了就上多進(jìn)程 CUDA_VISIBLE_DEVICES分流到多卡。注意線程池沒用Python GIL 卡著線程救不了批處理。癥狀設(shè)了batch_size16耗時(shí)和batch_size1幾乎一樣。原因batch_size是上限不是目標(biāo)。5秒的素材只切出1個(gè)塊批內(nèi)實(shí)際只有1條照樣串行。解法合并素材后再轉(zhuǎn)或調(diào)大chunk_length讓批內(nèi)實(shí)際塊數(shù)逼近batch_size。 盯住塊的數(shù)量才是盯住了并行度。帶走三句話批處理提速 VAD 切塊 特征組批 CTranslate2 并行解碼一條傳送帶三個(gè)環(huán)節(jié)。batch_size是上限實(shí)際并行度看你切出的塊數(shù)顯存不夠時(shí)降 batch、換 int8、切細(xì)塊按這個(gè)順序試。pip install faster-whisper --upgrade裝好后如果你的場景是直播或?qū)崟r(shí)會議轉(zhuǎn)寫批處理管道并不適用——流式方案如基于 faster-whisper 后端的 Whisper-Streaming、WhisperLive才是下一個(gè)該看的方向?!久赓M(fèi)下載鏈接】faster-whisperFaster Whisper transcription with CTranslate2項(xiàng)目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisper創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考