ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Whisper Windows 移植版:基于 DirectCompute 的高性能 GPGPU 推理指南

Whisper Windows 移植版:基于 DirectCompute 的高性能 GPGPU 推理指南 人工智能语音音频本地部署桌面应用【免费下载链接】WhisperHigh-performance GPGPU inference of OpenAIs Whisper automatic speech recognition (ASR) model项目地址https://gitcode.com/gh_mirrors/wh/Whisper点击查看免费下载本指南以仓库根目录 Readme.md 为核心骨架系统讲解该 Windows 移植版 Whisper 的项目定位、快速上手、核心特性、构建流程、性能表现与已知限制。本文覆盖 WhisperDesktop 图形界面、WhisperNet/.NET 封装、WhisperPS/PowerShell 封装与命令行示例等四条使用路径并结合仓库源码Whisper/D3D、Whisper/ML、Whisper/Whisper 等目录验证关键技术结论读者读完可获得从下载模型到自行编译、再到按 GPU 调优的完整实战方案。项目定位三层移植链的 Windows 侧实现这个仓库是 OpenAI Whisper 自动语音识别ASR模型在 Windows 平台上的一份高性能实现。项目脉络是OpenAI Whisper原始语音识别模型官方实现主要面向 Python PyTorchwhisper.cpp作者 Georgi GerganovWhisper 的 C 移植使用 GGML 二进制格式的模型文件本仓库whisper.cpp 的Windows 移植版用 DirectComputeDirect3D 11 计算着色器将推理搬到 GPU 上执行并在其上封装了 COM 风格 API、C# 与 PowerShell 接口。从 Readme.md 可以确认作者自述这是一个 Windows 移植版其目标是在不依赖 Python 与 PyTorch 的前提下让 Windows 用户以纯 C 的方式获得远快于官方实现的推理速度。模型文件与 whisper.cpp 生态完全兼容GGML 格式因此用户可以直接使用社区发布的ggml-*.bin模型。快速开始三屏走完 WhisperDesktop 全流程下载与启动作者在 Readme.md 给出的推荐路径是从仓库 Releases 页面下载WhisperDesktop.zip解压 ZIP 后直接运行WhisperDesktop.exe无需安装无额外运行时依赖。第一步加载模型首次启动时程序会提示下载模型。作者建议使用ggml-medium.bin约 1.42GB网页标注 1.53GB因为这是其测试最多的模型。模型为 GGML 二进制格式可从 Hugging Face 上 whisper.cpp 的模型仓库免费下载不支持文件名带mlmodelc的 ZIP 压缩模型这一点在 WhisperNet/Readme.md 中有同样的说明。WhisperDesktop 的模型加载界面选择本地 GGML 模型文件并加载。第二步转录音频文件模型加载完成后进入转录界面选择一个音频文件即可得到文字输出WhisperDesktop 的音频转录界面选择音频文件并查看转录结果。第三步麦克风实时捕获第三个界面支持从麦克风捕获并实时转录或翻译翻译到英文现场音频WhisperDesktop 的麦克风实时捕获界面配合内置 VAD 自动切分语音。核心特性与源码佐证Readme.md 列出了一系列核心特性下面逐条结合源码展开。1. 厂商无关的 GPGPUDirectCompute / D3D11 计算着色器实现完全基于 DirectCompute即Direct3D 11 中的计算着色器因此对 GPU 厂商NVIDIA / AMD / Intel无关。设备创建逻辑见 Whisper/D3D/createDevice.cpp依次尝试D3D_FEATURE_LEVEL_12_1 / 12_0 / 11_1 / 11_0四个功能级别默认开启D3D11_CREATE_DEVICE_DISABLE_GPU_TIMEOUT避免长任务被 TDR 掐断与D3D11_CREATE_DEVICE_SINGLETHREADEDDebug 构建且未加载 RenderDoc 时追加D3D11_CREATE_DEVICE_DEBUG若 GPU 不支持DISABLE_GPU_TIMEOUT需要 D3D 11.1会回退再创建一次设备源码中明确注释了该回退逻辑。全部计算着色器源码集中在 ComputeShaders 目录包含矩阵乘、softmax、norm、卷积、FlashAttention 等几十个 HLSL 文件如mulMatTiled.hlsl、mulMatByRowTiled.hlsl、flashAttention.hlsl。着色器在构建期离线编译为 DXBC以LZ4 压缩后内嵌进 DLL见下文构建流程。2. 纯 C 实现几乎零运行时依赖项目本体为纯 C 实现除操作系统核心组件外没有运行时依赖。作者给出的有趣对比是官方 PyTorch CUDA 方案的运行时依赖合计 9.63GB而本项目的Whisper.dll仅约 431KB。需要说明的例外是若在 Visual C 2022 及更新版本下编译并分发该库需要一并分发 VC 运行时.msm合并模块或vc_redist.x64.exe详见 Readme.md 的构建说明。3. 混合 F16 / F32 精度Windows 自 D3D 10.0 起强制要求支持R16_FLOAT缓冲区微软文档format support for Direct3D feature level 10.0 hardware一节项目据此实现了 F16/F32 混合精度FP16 张量通过着色器资源视图SRV上转精度读取、通过无序访问视图UAV降精度写入。这也是后续Further Optimisations中建议改为字节地址缓冲区方案的原因见下文。4. 内置性能分析器项目内置性能分析器可逐条统计每个计算着色器的执行时间。相关基础设施包括Whisper/Utils/GpuProfiler.cpp 与 Whisper/Utils/CpuProfiler.cppGPU/CPU 两端计时Whisper/Utils/Trace 目录轨迹记录tracing与 Tools/compareTraces 对比工具用于开发期逐 shader 对比不同 GPU 或不同实现的耗时开发期还可用 Whisper/D3D/RenderDoc 的 RenderDoc 集成抓取 Compute 调用见下文开发者指南。5. 低内存占用Readme.md 声称内存占用低。实测数据可在 SampleClips/summary.tsv 中看到例如 medium 模型转录 jfk.wav 时进程 RAM 仅约 2.84MBVRAM 约 2.19GBlarge 模型 VRAM 约 4.05GB。项目还刻意只使用缓冲区Buffer而不用纹理Device.cpp中有assert( false ); // We dont use textures in this project并实现了张量内存复用Whisper/ML/TensorsArena.cpp。6. Media Foundation 音频处理音频读取、捕获与格式解码统一走 Windows Media FoundationWhisper/MF 目录下实现了音频文件读取PcmReader.cpp、loadAudioFile.cpp与设备捕获AudioCapture.cpp支持大多数音频与视频格式明确不支持 Ogg Vorbis支持大多数 Windows 可用的录音设备专业领域仅实现 ASIO API 的设备除外。7. 基于论文实现的语音活动检测VAD麦克风实时捕获使用语音活动检测VAD自动切分语音片段。实现位于 Whisper/Whisper/voiceActivityDetection.cpp其算法依据 Mohammad Moattar 与 Mahdi Homayoonpoor 于 2009 年发表的论文A simple but efficient real-time voice activity detection algorithm对每帧 PCM 数据计算 FFTVAD::fft提取三类特征能量computeEnergy、主频占比computeDominant、谱平坦度computreSpectralFlatnessMeasure前 30 帧用于估计最小特征值并动态设定阈值源码中// 3-3 calculate minimum value for first 30 frames等注释与论文第 3 节逐条对应状态在多次detect调用间保持State结构体支持流式处理。8. 易用的 COM 风格 API 与多语言封装底层导出 COM 风格接口并提供两条高级封装路径WhisperNetWhisperNet/Readme.mdC# 封装发布在 NuGet 上入口为Whisper.Library静态类的loadModel/loadModelAsync方法见 WhisperNet/Library.csWhisperPSWhisperPS/Readme.md面向 PowerShell 5.1 的脚本封装自版本 1.10 起提供适合批量转录目录下所有文件导出多种格式等脚本化场景。预编译二进制随 Releases 发布。平台与硬件要求Readme.md 明确给出运行边界维度要求操作系统仅支持 64 位 Windows官方称 Windows 8.1 或更新版本应可运行但作者仅在 Windows 10 上测试过GPU必须支持 Direct3D 11.0。到 2023 年这几乎等于任意硬件 GPU最老的不支持 D3D 11.0 的常见 GPU 是 2011 年的 Intel Sandy BridgeCPU需要支持AVX1与F16C指令集扩展值得注意这是 64 位 CPU 与 64 位进程的双重约束。C# 封装在静态构造中显式校验 Windows 平台、Is64BitProcess、ProcessArchitecture X64以及Sse41/Avx支持不满足直接抛异常见 WhisperNet/Library.cs。开发者指南从源码构建构建步骤Visual Studio 2022按 Readme.md 的说明克隆仓库打开解决方案WhisperCpp.sln作者使用免费社区版 VS2022版本 17.4.4切换到 Release 配置构建并运行CompressShadersC# 项目位于解决方案的Tools子目录在 VS 中右键设为启动项目然后调试 / 开始执行不调试。成功时控制台输出类似Compressed 46 compute shaders, 123.5 kb - 18.0 kb该工具同时会解析 Whisper/Whisper/languageCodez.tsv 生成 C / C# 两套语言表代码详见 Tools/CompressShaders/Readme.txt构建目标项目Whisper原生 DLL、WhisperNetC# 封装与 NuGet 包、或各示例如 Examples/main、Examples/WhisperDesktop。运行时与调试注意事项VC 运行时分发若用 VS2022 及更新版本编译并对外分发建议一并分发 VC 运行时。若选择以vc_redist.x64.exe方式分发可将Whisper项目的运行时库从/MT改为/MD项目属性 → C/C → 代码生成后重新编译二进制体积会更小RenderDoc 集成Whisper/D3D/RenderDoc 提供 GPU 调试器集成。从 RenderDoc 启动程序后按住 F12 即可抓取 Compute 调用调试 HLSL 时建议使用Debug 版 DLL其中包含着色器的 Debug 构建调试器体验更好仓库内含大量仅用于开发的代码若干备选模型实现、部分计算着色器的 FP64 兼容版本、调试轨迹记录与轨迹对比工具等均由预处理器宏或constexpr开关禁用如Whisper/ML/Device.cpp中#if DBG_TEST_NAN包裹的 NaN 检测缓冲、WhisperNet/API/eModelImplementation.cs 中提到的BUILD_HYBRID_VERSION/BUILD_BOTH_VERSIONS宏。使用方式命令行、C# 与 PowerShell命令行示例Examples/mainExamples/main/params.cpp 提供了完整命令行参数表核心参数如下参数长选项含义-la--list-adapters列出可见图形适配器后退出用于配合-gpu-gpu--use-gpu指定推理使用的图形适配器-t N--threads N计算线程数Release 默认min(4, 硬件并发数)-p N--processors N处理器数量-ot N--offset-t N时间偏移毫秒-on N--offset-n N片段索引偏移-d N--duration N要处理的音频时长毫秒-mc N--max-context N最大文本上下文 token 数-ml N--max-len N最大片段字符数-wt N--word-thold N词级时间戳概率阈值默认 0.5 左右-su--speed-up2 倍速提速音频牺牲精度-tr--translate从源语言翻译为英文-di--diarize立体声音频说话人分离-otxt/-ovtt/-osrt/-owts--output-*输出 txt / vtt / srt / 卡拉 OK 词脚本-l LANG--language LANG指定口语语言-m FNAME--model FNAME模型路径-f FNAME--file FNAME输入音频文件--prompt初始提示词GPU 适配器既支持名称字符串也支持 0 起始的数字索引见 Whisper/D3D/listGPUs.cpp其中parseGpuIndex负责把纯数字短串解析为索引例如-la列出适配器后可用-gpu NVIDIA GeForce GTX 1080 Ti或-gpu 0选择。C#WhisperNet典型调用链为WhisperNet/Library.cs WhisperNet/Readme.mdWhisper.Library.loadModel(path, flags, adapter, impl)从磁盘加载 GGML 模型模型较大同步加载会阻塞线程另有loadModelAsync支持进度回调与取消对iModel调用createContext扩展方法创建上下文用上下文对象转录 / 翻译多媒体文件或处理麦克风实时音频。加载时可指定eGpuModelFlagsWhisperNet/API/eGpuModelFlags.cs按 GPU 微调Wave32/Wave64强制使用 32 / 64 波前宽度的着色器变体互斥。默认按厂商选择——AMD 用 Wave64Intel / NVIDIA 用 Wave32见 Whisper/D3D/createDevice.cpp 的merge3逻辑NoReshapedMatMul/UseReshapedMatMul是否使用 reshape 型矩阵乘着色器互斥。默认 AMD 使用useReshapedMatMul与 VRAM 占用相关后者略高Cloneable以允许跨 D3D 设备共享的方式创建 GPU 张量。还可通过eModelImplementationWhisperNet/API/eModelImplementation.cs选择实现GPUD3D 计算着色器默认、HybridDirectCompute 编码 CPU 解码需 AVX1/FMA3/F16C/BMI1、Reference原始 GGML CPU 参考实现需 AVX1/FMA3/F16C。后两者在发布的 NuGet 包中默认未编译需改stdafx.h中的宏后自行构建。PowerShellWhisperPSWhisperPS/Readme.md 给出了安装与用法。安装命令PowerShell 5.1Install-Module -Name WhisperPS -Scope CurrentUser # 当前用户 Install-Module -Name WhisperPS # 全部用户管理员 PowerShell也可从 Releases 下载 WhisperPS.zip 手动解压到%USERPROFILE%\Documents\WindowsPowerShell\Modules。典型批量转录脚本Import-Module WhisperPS -DisableNameChecking $Model Import-WhisperModel D:\Data\Whisper\ggml-medium.bin $Results dir .\* -include *.wma, *.wav | Transcribe-File $Model foreach ( $i in $Results ) { $txt $i.SourceName .txt; $i | Export-Text $txt } foreach ( $i in $Results ) { $txt $i.SourceName .ts.txt; $i | Export-Text $txt -timestamps }模块命令清单Get-Adapters打印 DirectCompute 可见的图形适配器名称可传给Import-WhisperModel -adapterImport-WhisperModel从磁盘加载模型Transcribe-File转录音频文件返回源文件名 转录文本对象Export-Text导出文本可选带时间戳Export-SubRip/Export-WebVTT导出.srt/.vtt字幕。可用man Import-WhisperModel -full查看各命令详细帮助。若需看到信息/调试消息先执行$InformationPreferenceContinue与$DebugPreferenceContinue默认SilentlyContinue会被静默丢弃。性能表现与实测数据作者在 Readme.md 与 SampleClips/summary.tsv 中给出了多 GPU 实测记录。相对速度定义表中Relative speed指转录速度相对实时速率的倍数1 即快于实时。部分实测jfk.wav / medium 模型GPU总耗时秒相对速度GeForce 1080Ti1.149.66GeForce 16503.163.48Ryzen 7 5700GVega 84.952.22Ryzen 5 5600UVega 78.801.25columbia.wma约 3 分 24 秒语音/ large 模型数据也收录在同一文件中。此外作者最常用的对比基准1080Ti medium 模型转录 3:24 语音官方 PyTorch CUDA 需要 45 秒本实现仅需19 秒1080Ti 上 large 模型相对速度 5.8、medium 模型 10.6columbia.wma 实测 13.3Ryzen 5 5600UAPUmedium 模型相对速度约 2.2虽不亮眼但远快于实时1650 慢于 1080Ti 但表现不错Intel HD Graphics 40002012 年笔记本核显medium 模型相对速度仅 0.14、small 模型 0.44远慢于实时但证明了软件在旧核显上也能跑起来。瓶颈判断与优化结论作者推测瓶颈在显存带宽而非计算量有用户在 Hacker News 上报告过 3060TiGDDR6的测试——其 FP32 算力是 1080Ti 的 1.3 倍、但显存带宽只有 0.92 倍实测整体反而慢了约 10%。这一观察与 Readme.md 的感觉瓶颈是内存而非计算一致。作者明确表示未对独立 AMD GPU 与 Intel 核显做过专门优化这两类硬件理论上需要为最贵的两个着色器mulMatTiled.hlsl、mulMatByRowTiled.hlsl提供不同构建并调整 Whisper/D3D/device.h 中的useReshapedMatMul()取值该取值实际由 Whisper/D3D/createDevice.cpp 按厂商默认策略决定也支持通过eGpuModelFlags覆盖。进一步优化方向作者观点Readme.md 收录了作者认为可行的后续优化思路均为其自述只花了几天调优、仍有很大空间的开放方向并非已实现特性FP16 计算着色器Vega / 1650 等新 GPU 的 FP16 算力显著高于 FP32而当前着色器仍以 FP32 计算改用 FP16 可参考 Half The Precision, Twice The Fun 一文字节地址缓冲区当前 FP16 张量依赖 SRV 上转、UAV 下转可改为字节地址缓冲区byte address buffer一次读写完整 4 字节并在 HLSL 内用f16tof32/f32tof16指令完成精度转换着色器运行时编译当前全部着色器离线编译成 DXBC 内嵌于Whisper.dllD3DCompiler_47.dll属系统组件且编译很快因此对昂贵的计算着色器可改为随启动D3DCompile编译 HLSL以便按环境宏定制升级到 D3D12新 API 学习成本更高但能带来 D3D11 不具备的 wave intrinsics 与显式 FP16 能力。从源码看仓库其实已经为部分此类探索预留了设施fp64Utils.hlsli、flashAttentionCompat*、normCompat.hlsl、softMaxCompat.hlsl等兼容变体着色器即为开发期试验的留存Readme.md 明确说明这类开发用代码由宏或constexpr开关禁用。已知限制Readme.md 坦诚列出两个已知问题自动语言检测未实现必须显式指定-l/--language命令行或对应 API 参数模型不会自动识别语种实时捕获延迟偏高受 VAD 与模型对短音频不友好的双重影响实时麦克风转录的端到端延迟约为5–10 秒。作者的解释是给模型喂太短的音频片段效果不佳因此通过提高延迟换取稳定性理想的修复需要更聪明的切分策略例如结合 Whisper/Whisper/ContextImpl.cpp 中根据语音活动扩展或收缩 token的逻辑进一步改进。另外仅支持 64 位 Windows、需 AVX1/F16C 的 CPU 与 D3D 11.0 兼容 GPU这些约束在前面平台与硬件要求一节已经详述。结语从仓库内容看这是一个作者在 2022–2023 年冬季假期完成的业余项目代码按 as is 发布、不附带任何担保作者也坦承其中可能存在 bug见 Readme.md。它验证了一条重要路径在不依赖 Python 与深度学习框架的前提下用 D3D11 计算着色器把 Whisper 推理搬上任意现代 Windows GPU并做到快于实时的转录速度。对于想要真正用起来的读者建议按本文快速开始一节先跑通 WhisperDesktop需要脚本化或批量处理时参考 PowerShell 与命令行用法若要自行编译或针对特定 GPU 调优则按开发者指南与性能表现两节的路径结合 SampleClips/summary.tsv 的实测数据对比验证改动效果。赞分享人工智能语音音频本地部署桌面应用【免费下载链接】WhisperHigh-performance GPGPU inference of OpenAIs Whisper automatic speech recognition (ASR) model项目地址https://gitcode.com/gh_mirrors/wh/Whisper点击查看免费下载相关推荐Redis Windows版深度解析高性能内存数据库的Windows移植之路Redis Windows版深度解析高性能内存数据库的Windows移植之路 Redis作为高性能内存数据库其Windows移植面临系统架构差异的重大挑战。数据库KV存储缓存Whisper DirectCompute内存带宽优化解决GPU性能瓶颈Whisper DirectCompute内存带宽优化解决GPU性能瓶颈 引言GPU性能的关键制约因素 在语音识别领域OpenAI的Whisper模型以其人工智能语音音频本地部署桌面应用Whisper DirectCompute性能计数器精确测量着色器耗时Whisper DirectCompute性能计数器精确测量着色器耗时 引言GPU性能优化的隐形壁垒 在语音识别模型推理过程中DirectCompute着人工智能语音音频本地部署桌面应用上一篇终极显卡驱动清理大师Display Driver UninstallerDDU完整使用指南下一篇GetQzonehistory如何用Python一键备份你的QQ空间十年记忆创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表