尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

whisper.cpp CUDA 加速编译与调优实战指南

whisper.cpp CUDA 加速编译与调优实战指南 whisper.cpp CUDA 加速编译与调优实战指南【免费下载链接】whisper.cppPort of OpenAIs Whisper model in C/C项目地址: https://gitcode.com/GitHub_Trending/wh/whisper.cpp一、为什么是 whisper.cpp CUDAWhisper 模型的计算瓶颈集中在 encoder30 秒音频切片要过 12 层 Transformer矩阵乘占比超过 90%而这一部分恰是 CUDA 与 cuBLAS 最擅长的负载。在 README 给出的官方方案中NVIDIA 卡上的模型处理通过 cuBLAS 加自定义 CUDA kernel 完成encoder 耗时通常可降到 CPU 方案的几分之一到几十分之一这也是它被写进 README 特性列表Efficient GPU support for NVIDIA的原因。与同类方案相比方案优势代价纯 CPUAVX2/NEON零依赖开箱即用长音频耗时线性增长批量场景压力大Core MLApple ANEApple 芯片上比 CPU 快 3 倍以上仅限 Apple 平台whisper.cpp CUDA跨平台 C/C 库无 Python 依赖可直接嵌入现有 C 服务需要 NVIDIA 卡与 CUDA 工具链如果你的服务端跑在带 N 卡的 Linux 机器上且希望把推理直接编进 C 进程而不是起一个 Python 服务这就是成本最低的一条路。二、CUDA 加速落地从编译到验证环境准备克隆仓库并下载 ggml 模型克隆仓库并拉取 base.en 模型模型以 ggml 单文件格式存放base.en 约 142 MiBgit clone https://gitcode.com/GitHub_Trending/wh/whisper.cpp cd whisper.cpp sh ./models/download-ggml-model.sh base.enwhisper-cli只吃 16-bit WAVmp3 等格式先用 ffmpeg 转码ffmpeg -i input.mp3 -ar 16000 -ac 1 -c:a pcm_s16le output.wavCUDA 加速编译配置GGML_CUDA 与 Flash Attention编译时开启 CUDA 支持。注意旧参数WHISPER_CUBLAS已废弃顶层 CMakeLists.txt 中whisper_option_depr(FATAL_ERROR WHISPER_CUBLAS GGML_CUDA)会直接报错必须改用GGML_CUDAcmake -B build -DGGML_CUDA1 cmake --build build --config Release -j编译产物在build/bin/下whisper-cli默认use_gpu true即默认就调度 GPU无需额外参数-ng--no-gpu用于反向禁用 GPU 做基线对照。功能验证whisper-bench 与 whisper-cli 实测用仓库自带的基准工具跑 encoder看encode time输出./build/bin/whisper-bench -m models/ggml-base.en.bin -t 4再用仓库自带样例音频做一次完整转写与 CPU 基线加-ng对比耗时./build/bin/whisper-cli -m models/ggml-base.en.bin -f samples/jfk.wav转写输出末尾的whisper_print_timings会分别给出 load/mel/encode/decode 四段耗时encode 段显著缩短即说明 CUDA 路径生效。三、分级调优参数调优开关集中在 ggml/CMakeLists.txtGGML_CUDA_F16等选项和whisper-cli的运行参数-fa对应flash_attn两处按场景组合轻量试跑验证链路、跑通流程保持默认GGML_CUDA1不开其他开关用 base.en 或量化后的模型压低显存与加载时间短音频 30 s直接用whisper-cli单文件跑不开多线程常规生产单服务实例、持续转写请求编译期开启GGML_CUDA_F161部分计算走 FP16降低显存带宽压力运行期加-fa启用 Flash Attention降低 attention 的显存占用显存紧张时改用量化模型./build/bin/quantize models/ggml-base.en.bin models/ggml-base.en-q5_0.bin q5_0高并发批量批处理队列、多实例按GGML_CUDA_NO_PEER_COPY等选项定义于 ggml/src/ggml-cuda/CMakeLists.txt针对多卡拓扑调整每实例限制模型规模与并发用-t固定 CPU 侧线程数避免争抢批量评测用scripts/bench.py输出 CSV 对比python3 scripts/bench.py -f samples/jfk.wav -t 2,4,8四、高频排坑编译报 CUBLAS not found现象GGML_CUDA1下链接阶段找不到 cuBLAS。原因CUDA Toolkit 未装全或未装与显卡驱动匹配的版本。解法装好对应版本的 CUDA Toolkit 后确认nvcc --version可用再重新cmake -B build -DGGML_CUDA1。运行时报 CUDA out of memory现象加载 medium/large 模型时崩溃或报错。原因显存不够large 模型约需 3.9 GB 级内存占用见 README 内存表。解法换小模型或量化模型或在 cmake 阶段加GGML_CUDA_F161压缩显存占用。GPU 已编译但耗时与 CPU 相同现象encode time 没有缩短。原因GGML_CUDA未真正编译进二进制或误用了旧参数。解法重跑cmake -B build -DGGML_CUDA1WHISPER_CUBLAS在 CMakeLists.txt 中是 FATAL_ERROR 级废弃项确认构建日志中 ggml-cuda 目标参与编译。五、延伸方向encoder 跑通后下一步可以试流式转写examples/stream 的whisper-stream直接吃麦克风降低实时场景首段延迟或用--grammar配合 grammars/ 下的 GBNF 文件约束解码输出。动手建议先不加任何调优开关跑一遍whisper-cli -f samples/jfk.wav记下 encode 耗时再加-fa跑第二遍对比两次数字。【免费下载链接】whisper.cppPort of OpenAIs Whisper model in C/C项目地址: https://gitcode.com/GitHub_Trending/wh/whisper.cpp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表