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

资讯详情

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

whisper.cpp CUDA 加速完全手册:从编译到 GPU 推理的完整路径

whisper.cpp CUDA 加速完全手册:从编译到 GPU 推理的完整路径 whisper.cpp CUDA 加速完全手册从编译到 GPU 推理的完整路径【免费下载链接】whisper.cppPort of OpenAIs Whisper model in C/C项目地址: https://gitcode.com/GitHub_Trending/wh/whisper.cpp一段 40 分钟的会议录音CPU 上跑了 8 分钟你还得再等下一次。whisper.cpp 是 OpenAI Whisper 模型的纯 C/C 实现把它的推理搬上 NVIDIA GPU 后同样的音频通常能压回 13 分钟。这篇指南带你完成 whisper.cpp 的 CUDA 加速全程编译出带 GPU 后端的二进制、理解哪部分计算真正跑在卡上、用实测参数把吞吐调到满意为止。跑通之后你会发现你能在 10 分钟内编译出带 CUDA 后端的 whisper.cpp并用一条命令验证后端确实生效你能说清编码器/解码器为什么快、mel 特征为什么留在 CPU以及 batch-size、FlashAttention 各自影响哪个环节你能给出一组带预期区间的调参建议FlashAttention 开启后总耗时约降 10%25%具体看你的 GPU你能写一个 20 行以内的 C 程序用官方 API 跑通 GPU 推理并处理长音频的滑动分片把 whisper.cpp 编译成 CUDA 版本的最短路径先确认你的环境满足下面这组配置缺哪样补哪样别一上来就动源码。组件最低要求推荐配置备注NVIDIA GPUCompute Capability 7.0Turing7.5Ampere 及以后显存base 约 2GBlarge-v3 约 10GBCUDA Toolkit11.812.xnvcc --version能看到即可CMake3.143.22ggml 子工程要求 3.14编译器GCC 9 / Clang 12GCC 11需要 C17先花 10 秒确认驱动和工具链正常nvcc --version nvidia-smi预期输出上半部分打印 nvcc 版本号下半部分出现你的 GPU 型号和显存占用。两样都有继续缺 nvcc 就先把 CUDA Toolkit 装好再回来。下面这套命令只做一件事拿到源码、下好模型、配置并编译出 GPU 版 whisper.cpp。git clone https://gitcode.com/GitHub_Trending/wh/whisper.cpp cd whisper.cpp bash ./models/download-ggml-model.sh base.en # 模型落到 models/ggml-base.en.bin约 145MB cmake -B build -DGGML_CUDAON -DGGML_CUDA_F16ON -DCMAKE_BUILD_TYPERelease # GGML_CUDAON 才编译 ggml/src/ggml-cuda/ 下的内核 # F16 是编译期选项Turing 及以上 GPU 的 FP16 矩阵乘更快 # 默认就是 Release这里显式写出是防止你的缓存里残留 Debug 配置 cmake --build build -j$(nproc)编译产物在build/bin/主程序叫main。跑完这步你应该看到build/bin/main和build/bin/quantize等可执行文件。验证 CUDA 后端是否真的编译进去了一条命令 10 秒确认./build/bin/main -m models/ggml-base.en.bin -f samples/jfk.wav -v预期输出开头打印一行系统信息里面包含CUDA 1 (XX GB)显存数字因卡而异结尾是识别结果And so my fellow Americans, ask not what your country can do for you...。看到CUDA 1就说明后端生效了。这步卡住的话先别急九成是 nvcc 没进 PATH回上面第 1 步确认一下即可。whisper.cpp 的 CPU/GPU 分工哪些环节决定性能数据流其实很直白一张图看完关键分工就两条。编码器把整段 30 秒窗口的 mel 特征压缩成固定长度的表示一次 forward 搞定矩阵乘密集放 GPU 收益最大解码器是逐 token 自回归每步都拿上一步结果当输入步数多、延迟敏感GPU 上配 FlashAttention注意力计算与 softmax 融合的内核省显存也省时间最划算。而 mel 特征提取在 CPU 上只需几十毫秒搬去 GPU 反而增加数据拷贝所以留在这边不动。想深挖的话看这三处src/whisper.cpp—— 主推理循环mel/encode/decode 的编排都在这ggml/src/ggml-cuda/—— 全部 CUDA 内核ggml-cuda.cu是后端入口include/whisper.h—— C API 头文件whisper_context_params就是 GPU 开关所在whisper.cpp CUDA 配置项全景与调优建议能调的东西分两层别搞混编译期选项决定能不能上 GPU、以什么精度运行期参数决定这次推理怎么跑。选项层面作用默认建议值-DGGML_CUDAON编译启用 CUDA 后端OFFON-DGGML_CUDA_F16ON编译部分计算用 FP16OFFONTuring-DGGML_CUDA_FORCE_CUBLASON编译矩阵乘强制走 cuBLAS不用自带 mmq 内核OFF遇到算子不支持时再开-fa / --flash-attn运行解码器启用 FlashAttention关常开-b N运行解码批大小201632看显存-t N运行CPU 线程数mel/采样4物理核心数-l lang运行指定语言自动检测已知时显式指定三档典型配置对着号入座入门档-DGGML_CUDAON单选项编译运行只加-fa。适合先验证链路通不通GTX 1660 这类显存 6GB 的卡足够跑 base/small。生产档-DGGML_CUDAON -DGGML_CUDA_F16ON运行加-fa -b 32。RTX 3060 及以上这是大多数场景的甜点区base.en 模型在 3 分钟音频上总耗时可从 CPU 的约 50 秒压到 812 秒。极限档生产档基础上加-DGGML_CUDA_FORCE_CUBLASON运行加-b 128显存够的话。大模型 长音频的离线批量场景用注意显存占用会明显上升。一组实测量级的参照base.en3 分钟音频数值会随硬件浮动给你做方向判断用配置耗时说明CPU 8 核 AVX2~50s无 FlashAttentionRTX 4060 -fa~10s约 45x 于 CPURTX 4060 -fa -b 64~9sbatch 收益在长文本更明显RTX 4090 -fa -b 64 F16~6s模型越大差距越大large-v3 可达 10x 以上经验值batch 从 20 提到 32长音频吞吐通常再提 5%15%短音频1 分钟提升有限因为编码器一次就吃完了。实战两个直接能跑的场景场景一批量转写整个录音目录下面这段脚本只做一件事把recordings/里所有 wav 转成同名 txtFlashAttention 常开。#!/usr/bin/env bash MODELmodels/ggml-base.en.bin # 换 small/medium 记得显存要够 OUTout mkdir -p $OUT for f in recordings/*.wav; do ./build/bin/main -m $MODEL -f $f -fa -l en \ -otxt -of $OUT/$(basename ${f%.wav}) # 输出 txt路径可改 done预期每个文件旁多一个 txt结尾日志打印encode/decode各自耗时。边界文件太多时想再快把main换成你自己的进程池并行调度而不是加 batch。场景二40 分钟录音的滑动分片转写C API 里 GPU 是一个bool长音频则交给你自己切片每片 30 秒模型的一个推理窗口#include whisper.h #include cstdio int main() { struct whisper_context_params cp whisper_default_context_params(); cp.use_gpu true; // 这里就是 GPU 总开关CPU 版二进制上会告警 cp.flash_attn true; // 解码加速 struct whisper_context *ctx whisper_init_from_file_with_params(models/ggml-base.en.bin, cp); if (!ctx) { fprintf(stderr, init failed\n); return 1; } // 实际项目中把 read_chunk() 换成你的音频读取逻辑 for (int start_s 0; start_s 2400; start_s 30) { float *pcm read_chunk(start_s); // 每片 480000 样本 struct whisper_full_params fp *whisper_full_default_params(WHISPER_SAMPLING_GREEDY); fp.n_threads 4; whisper_full(ctx, fp, pcm); for (int i 0; i whisper_full_n_segments(ctx); i) printf(%s, whisper_full_get_segment_text(ctx, i)); } whisper_free(ctx); return 0; }编译时头文件在include/whisper.h链接build/bin/旁边的libwhisper.so即可-I include -L build -lwhisper。预期2400 秒音频 ≈ 80 个窗口base.en 在 RTX 4060 上全程 34 分钟边界分片边界可能截断句子要求高就用-of输出带时间戳的 srt 再后处理。排错手册编译期、运行期、性能不达预期按阶段查别混着来编译期现象CMake Error ... Could not find CUDA或 nvcc 报Unsupported gpu architecture。原因CUDA Toolkit 没装全或 CMake 没找到 nvcc。修复export PATH/usr/local/cuda/bin:$PATH export LD_LIBRARY_PATH/usr/local/cuda/lib64:$LD_LIBRARY_PATH删掉build/重新 cmake仍不行就显式指cmake -B build -DCMAKE_CUDA_COMPILER/usr/local/cuda/bin/nvcc ...。现象旧教程里的-DWHISPER_CUDAON编译时刷一大段 deprecated 警告。原因选项已改名迁移到 ggml 层见CMakeLists.txt中的whisper_option_depr。修复改用-DGGML_CUDAON功能等价警告消失。运行期现象whisper.cpp: CUDA 0 (0.00 GB) | AVX2 1 ...跑起来了但没用上 GPU。原因二进制本身没开-DGGML_CUDAON运行参数救不了编译缺的东西。修复按 §2 重新配置编译改完再跑-v确认CUDA 1。现象ggml_cuda_init: cuBLAS initialization failed或启动即段错误。原因NVIDIA 驱动与 CUDA 版本不匹配或 cuBLAS 运行库缺失。修复nvidia-smi核对驱动支持的最高 CUDA 版本装对应 Toolkitldconfig -p | grep cublas确认库存在。性能不达预期现象nvidia-smi显示 GPU 利用率忽高忽低、平均不到 30%。原因解码器自回归的 kernel launch 开销没被摊薄。修复确认-fa已开长音频加-b 32仍不行编译期加-DGGML_CUDA_FORCE_CUBLASON换掉 mmq 内核再对比whisper_print_timings里的encode_ms/decode_ms。现象GPU 版只比 CPU 快 12 倍与预期 5x 以上差距大。原因大概率编了 Debug-O0或模型太小 IO 占比高。修复确认-DCMAKE_BUILD_TYPERelease换 large-v3 模型实测一次差距会拉开——CUDA 加速的收益本来就随参数量放大。进阶方向多卡并行whisper_context_params.gpu_device可以指定 CUDA 设备号多进程各占一卡比单卡更简单直接实现细节在ggml/src/ggml-cuda/ggml-cuda.cu。FlashAttention 全量化默认只为部分量化格式编译 FA 内核-DGGML_CUDA_FA_ALL_QUANTSON全量编译编译时间会明显变长选项在ggml/CMakeLists.txt。混合后端编码器走 OpenVINO、解码器留在 CUDA 的组合是官方支持的路径WHISPER_OPENVINO相关入口在include/whisper.h的whisper_ctx_init_openvino_encoder。最后whisper.cpp 的 CUDA 加速没有黑魔法编译期一个-DGGML_CUDAON运行期一个-fa再用-v日志和nvidia-smi迭代 batch 与精度选项。跑通之后最值的钱是whisper_print_timings给你的 encode/decode 拆分——它告诉你下一步该优化哪一段。你的卡上实测出多少倍或者踩到什么怪坑欢迎在项目的 issue 区贴出来对一对。【免费下载链接】whisper.cppPort of OpenAIs Whisper model in C/C项目地址: https://gitcode.com/GitHub_Trending/wh/whisper.cpp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表