20分钟跑通 faster-whisper 的 Windows CUDA 加速:从驱动到第一句转写
【免费下载链接】faster-whisperFaster Whisper transcription with CTranslate2项目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisper
一份两小时的会议录音,下班前要出文字稿;第二天还有十段访谈音频排队等着转写,而原版 Whisper 跑在 CPU 上根本等不起。faster-whisper 就是为这种场景做的——它用 CTranslate2 推理引擎重新实现了 Whisper 模型,在 Windows 上配合 CUDA 加速,同样精度下速度最高可到 4 倍,占用的显存反而更小。这篇文章带你完整走一遍 faster-whisper 的 Windows 部署路线:先把显卡驱动、CUDA 12 和 cuDNN 9 一次装对;再装上 faster-whisper,PyAV 这个音频解码依赖不需要你手动编译;最后几行代码跑出第一句转写,并用 compute_type 把速度调到最快。
整篇文章四步走:先让显卡跑起来;再把依赖装干净;然后跑通第一个转写脚本;最后看一张表把配置调到位。
让显卡跑起来:驱动、CUDA 12 与 cuDNN 9 一次装对
faster-whisper 底层是 ctranslate2 推理引擎,它的最新版只支持 CUDA 12,并且要求系统里能找到 cuBLAS 和 cuDNN 9 这两套 NVIDIA 库。Windows 上要做的其实只有三件事:驱动要新、CUDA 12 要装、cuDNN 9 要复制到 CUDA 目录。
先升级驱动
cuDNN 9 对驱动版本有硬性要求,老驱动会直接被拦在门外。用一条命令看版本:
# 右上角显示的版本号即驱动版本,545 以后与 cuDNN 9 完全兼容 nvidia-smi版本太旧就先去 NVIDIA 官网把驱动升到最新,再往下走。
安装 CUDA 12 与 cuDNN 9
到 NVIDIA 官网下载 CUDA 12 的 Windows 安装包(注册账号即可),安装时选"自定义",只勾 CUDA 与 cuBLAS 相关条目,Visual Studio 集成等一律不勾。cuDNN 9 单独下载后解压,把bin、include、lib64三个目录里的文件分别拷进 CUDA 安装目录的对应目录:
# 将 cuDNN 9 的 DLL 与头文件拷入 CUDA 12 安装目录(路径按实际安装位置调整) $cuda = "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4" Copy-Item "$env:USERPROFILE\Downloads\cudnn-windows-x64-v9*\cuda\bin\*" "$cuda\bin\" -Recurse Copy-Item "$env:USERPROFILE\Downloads\cudnn-windows-x64-v9*\cuda\include\*" "$cuda\include\" -Recurse Copy-Item "$env:USERPROFILE\Downloads\cudnn-windows-x64-v9*\cuda\lib\x64\*" "$cuda\lib\x64\" -Recurse拷完后,把$cuda\bin和$cuda\libnvvp加进系统 PATH,重开一个终端让设置生效。
⚠️ 踩坑提示:后面加载模型时若报错提示找不到 cuBLAS 或 cuDNN,99% 是这两步没做干净。用
where cudnn64_9.dll验证一下 DLL 是否真的能被找到。
跳过编译坑:PyAV 预编译包随 pip 一起落地
faster-whisper 解码音频不依赖系统里的 FFmpeg,而是用 Python 库 PyAV——它的 wheel 包里已经捆绑好了 FFmpeg 库。Windows 上 PyPI 提供的就是预编译 wheel,绝大多数情况下你什么都不用做,pip 会自动挑好匹配你 Python 版本的版本。
让 pip 一次装到位
python -m venv venv venv\Scripts\Activate.ps1 pip install -U pip pip install faster-whisper这段命令创建独立虚拟环境并安装 faster-whisper,PyAV(包名 av)会作为依赖自动装好。装完用一行代码确认它真的能 import:
import av print(av.__version__) # 能打印版本号,说明 PyAV 免编译安装成功⚠️ 踩坑提示:如果你看到 pip 开始下载源码现场编译 av,通常是 Python 版本过老、PyPI 上没有对应 wheel,把 Python 换成 3.10 或 3.11 再装即可(faster-whisper 要求 3.9 及以上)。若 import 时报
DLL load failed,装一次 Microsoft VC++ 运行库就能解决。
五步跑通第一句转写
驱动和依赖都齐了,下面跑最短的一条转写链路:选模型 → 建环境 → 加载 → 转写 → 打印。
先选一个模型
模型按名字加载,首次使用时自动下载。没有特别要求就从 small 开始验证流程,正式干活再上 large-v3:
| 模型 | 显存占用(float16,约) | 适合 |
|---|---|---|
| small | 2GB 上下 | 快速验证环境是否装对 |
| large-v3 | 5GB 上下 | 正式转写,精度最高 |
最短转写脚本
from faster_whisper import WhisperModel # 加载模型:N 卡就 cuda + float16,显存吃紧可改 int8_float16 model = WhisperModel("small", device="cuda", compute_type="float16") # vad_filter 默认开启,自动裁掉静音段,长录音提速明显 segments, info = model.transcribe("meeting.mp3", language="zh", beam_size=5) print(f"语言: {info.language} (置信度 {info.language_probability:.2f})") for seg in segments: # segments 是生成器,真正开始转写是在这里 print(f"[{seg.start:.2f}s -> {seg.end:.2f}s] {seg.text}")第一次运行会卡住一段时间,那是在下载模型,属于正常现象。
⚠️ 踩坑提示:中文音频不指定语言时可能识别成别的语种导致乱码,养成
language="zh"的习惯。另外segments拿到手并不会自动执行,必须像上面那样迭代(或list(segments))转写才会真正开始。
实战与调优:一张表挑出最快组合
环境跑通之后,真正影响速度的是两个旋钮:compute_type(精度档位)和批量推理。
compute_type 怎么选
直接给结论:显存 6GB 以上的 N 卡用 float16,一步到位;GTX 10 系这类老卡显存紧张就用 int8_float16;完全没显卡的机器用 int8 跑 CPU。
| compute_type | 精度 | 显存/RAM | 推荐硬件 |
|---|---|---|---|
| float16 | 高 | 中等 | RTX 20 系及以后的 N 卡 |
| int8_float16 | 略降 | 更小 | GTX 10 系等老显卡 |
| int8 | 略降 | 最小 | 纯 CPU 机器 |
| float32 | 最高 | 最大 | 一般不用,留给调参排查 |
官方 benchmark 给个直观感受:同一段 13 分钟音频、large-v2 模型、GPU 上 float16 约 1 分 03 秒;开启 batch_size=8 的批量推理后降到 17 秒;换成 int8 精度则 59 秒且显存只要 2.9GB(数据来自仓库 README.md 的 Benchmark 章节)。
一批文件怎么跑
批量脚本只需要一个循环,逐文件转写并落盘:
import os model = WhisperModel("small", device="cuda", compute_type="float16") for name in os.listdir("audio_dir"): if not name.endswith(".wav"): continue segments, _ = model.transcribe(os.path.join("audio_dir", name), language="zh") text = "".join(seg.text for seg in segments) # 迭代生成器,触发实际转写 with open(f"output_{os.path.splitext(name)[0]}.txt", "w", encoding="utf-8") as f: f.write(text)两个再提速的开关
第一个是 VAD:vad_filter=True是默认行为,它会用内置的 Silero VAD 模型裁掉无语音片段,vad_parameters=dict(min_silence_duration_ms=500)可以收紧静音判定阈值,全部参数见 faster_whisper/vad.py。第二个是批量推理:BatchedInferencePipeline是WhisperModel.transcribe的直接替换,配合batch_size=16能把 GPU 利用率吃满,用法参考 README.md。
⚠️ 踩坑提示:GPU 报 CUDA out of memory 时,先降 batch_size(8 改 4),还不行就把 compute_type 降到 int8 系,或者换一个更小的模型,三招总有一招管用。
卡住别慌:一张速查表
| 症状 | 查什么 | 怎么修 |
|---|---|---|
| 加载模型报找不到 cuBLAS / cuDNN | PATH 与 cuDNN 目录 | cuDNN 9 的 DLL 拷进 CUDA 的 bin 并加入 PATH,重开终端 |
| pip 编译 av 源码、装不上 PyAV | Python 版本 | 换 3.10 / 3.11,让 pip 命中官方预编译 wheel |
DLL load failed(import av 时) | VC++ 运行库 | 安装 Microsoft VC++ Redist |
| 转写比预期慢很多 | compute_type 与 VAD | 换 float16 或 int8;确认 vad_filter 处于开启状态 |
| CUDA out of memory | 显存占用 | 降 batch_size、换 int8、或换更小模型 |
| 脚本跑完却没有任何输出 | segments 生成器 | 必须迭代 segments 或转成 list,转写才会执行 |
想再榨速度,就去研究 int8 量化与 BatchedInferencePipeline 批量推理的组合;想把转写能力变成服务,用 FastAPI 把 transcribe 调用包一层、多进程各挂一个模型,就是可用的生产部署形态。
【免费下载链接】faster-whisperFaster Whisper transcription with CTranslate2项目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisper
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考