这里写目录标题
- 一、语音转字幕操作步骤
- 1、下载安装包Assets\WhisperDesktop.zip[^2]
- 2、加载模型
- 2.1 下载模型
- 2.1.1 进入Hugging Face[^3]的仓库
- 2.1.2 选择需要下载的模型
- 2.1.3 配置模型路径
- 3、语音转字幕
- 4、实时语言转录功能
- 二、相关简介[^1]
- 特点
- 开发人员指南
- 构建说明
- 其他注意事项
- 绩效说明
- 进一步优化
- 缺少的功能
- 结尾语
一、语音转字幕操作步骤
1、下载安装包Assets\WhisperDesktop.zip1
2、加载模型
运行WhisperDesktop.exe
,
启动后加载模型“load model,please wait…”,等待其将模型加载到内存。
2.1 下载模型
刚开始是没有模型的,需要到Hugging Face2的仓库里面下载模型并配置相关路径
2.1.1 进入Hugging Face2的仓库
点击ggerganov/whisper.cpp进入Hugging Face仓库
2.1.2 选择需要下载的模型
在Hugging Face仓库,选择Files and versions,选择以下两种模型:
- ggml-large.bin
- ggml-medium.bin
2.1.3 配置模型路径
在Load Whisper Model 页,Model Path选择好模型的路径D:\WhisperDestop\ggml-whisper.bin,点击OK,等待其将模型加载到内存。
3、语音转字幕
在Transcribe Audio File页面:
- Language:Chinese(视频或语音说话使用的语种)
- Translate: √(把识别出来的文本给翻译成英文输出)
- Transcribe File:C:\xxx.mp4(选择你要提取字幕的视频、音频等)
- Output Format:SubRip subtitles(输出格式)
- None:
- Text file:纯文本
- Text with timestamps
- SubRip subtitles:字幕(标准的字幕格式 时段+文字)
可以将后缀改为.srt格式,这样的文件可以直接拖放到剪辑软件里面,他会自动给你排列好,像这样的字幕是不需要咱们来对时间的 - WebVTT subtitles
4、实时语言转录功能
开启实时语言转录之后,你对它说话的话,他会自动把你说的话转换成文字并记录下来
二、相关简介3
特点
-
基于
DirectCompute
的供应商无关GPGPU
;该技术的另一个名称是“Direct3D 11
中的计算着色器” -
简单的
C++
实现,除了基本的操作系统组件之外没有运行时依赖项 -
比
OpenAI
的实现快得多。
在我的台式电脑上,使用GeForce 1080Ti GPU
,中等型号,用PyTorch
和CUDA
转录3:24
分钟的语音需要45
秒,但我的实现和DirectCompute
只需要19
秒。
有趣的是:这是9.63 GB
的运行时依赖项,而Whisper.dll
是431 KB
-
混合
F16/F32
精度:自D3D v10.0
版本起,Windows需要支持R16_FLOAT
缓冲区 -
内置性能探查器,用于测量单个计算着色器的执行时间
-
内存使用率低
-
用于音频处理的
Media Foundation
支持大多数音频和视频格式(Ogg Vorbis
除外),以及大多数在Windows
上工作的音频捕获设备(一些专业设备除外,它们只实现ASIO API
)。 -
用于音频捕获的语音活动检测。
该实现基于Mohammad Moattar
和Mahdi Homayoonpoor 2009
年的文章“一种简单但高效的实时语音活动检测算法”。 -
易于使用的
COM型API
。nuget
上提供了惯用的C#
包装。1.10
版引入了对PowerShell 5.1
的脚本支持,这是Windows
上预装的旧版本“Windows PowerShell”
。 -
可用的预构建二进制文件
唯一支持的平台是64位 Windows
。
应该在Windows 8.1
或更新版本上工作,但我只在Windows 10
上测试过。
该库需要一个支持Direct3D 11.0
的GPU
,在2023
年,它的意思只是“任何硬件GPU”
。最新的不支持D3D 11.0
的GPU
是2011
年的Intel Sandy Bridge
。
在CPU
方面,库需要AVX1
和F16C
支持。
开发人员指南
构建说明
-
克隆此存储库
-
在
Visual Studio 2022
中打开WhisperCpp.sln
。我使用的是免费软件社区版,版本17.4.4
。 -
切换到
Release
配置 -
在解决方案的
Tools
子文件夹中生成并运行CompressShaders
C#
项目。要运行该项目,请在visual studio
中右键单击“设置为启动项目”,然后在VS
的主菜单中单击“调试/启动而不调试”。成功完成后,您应该会看到一个控制台窗口,其中有一行如下所示:
压缩的46个计算着色器,123.5 kb->18.0 kb
5.构建Whisper
项目以获得本机DLL
,或用于C#
包装器和nuget
包的WhisperNet
或示例。
其他注意事项
如果你要在使用Visual C++2022
或更新版本构建的软件中使用该库,你可能会以.msm
合并模块或vc_redist.x64.exe
二进制文件的形式重新分发Visual C++
运行时DLL
。
如果你这样做,右键单击Whisper
项目、属性、C/C++
、代码生成,将“Runtime Library”
设置从Multi-threaded (/MT)
切换到Multi-threaded DLL (/MD)
,然后重建:二进制文件将变得更小。
该库包括RenderDoc GPU
调试器集成。
从RenderDoc
启动程序时,按住F12键以捕获计算调用。
如果要调试HLSL
着色器,请使用DLL
的调试构建,其中包括着色器的调试构建。您将在调试器中获得更好的用户体验。
该存储库包括许多仅用于开发的代码:耦合替代模型实现、一些计算着色器的兼容FP64
版本、调试跟踪和比较跟踪的工具等。
这些东西被预处理器宏
或constexpr
标志禁用了,我希望保留在这里没问题。
绩效说明
我在办公地点选择了几款GPU进行有限的测试。
具体来说,我已经为英伟达 1080Ti
、Ryzen 7 5700G
内部的Radeon Vega 8
和Ryzen 5 5600U
内部的Radeon Vega 7
进行了优化。
总结如下。
英伟达
为大型型号提供了5.8
的相对速度,为中型型号提供了10.6
的相对速度。
AMD Ryzen 5 5600U APU
为中型型号提供了约2.2的相对速度。不太好,但仍然比实时快得多。
我也在英伟达 1650
上测试过:比1080Ti
慢,但很好,比实时快得多。
我还测试了酷睿i7-3612QM
内部的Intel HD Graphics 4000
,中等型号的相对速度为0.14
,小型型号为0.44
。这比实时慢得多,但我很高兴发现我的软件即使在2012
年推出的集成移动GPU上也能工作。
我不确定离散AMD GPU或集成Intel GPU的性能是否理想,它们没有专门针对它们进行优化。
理想情况下,它们可能需要两个最昂贵的计算着色器(mulMatTiled.hlsl
和mulMatByRowTiled.hlsl
)的稍微不同的构建。
也许还有其他调整,比如Whisper/D3D/device.h
头文件中的useReshapedMatMul()
值。
我不知道如何衡量,但我有一种感觉,瓶颈是内存,而不是计算。
黑客新闻上有人测试了3060Ti
,即带有GDDR6内存的版本。与1080Ti相比,该GPU具有1.3倍FP32 FLOPS,但具有0.92倍VRAM带宽。该应用程序在3060Ti上慢了约10%。
进一步优化
我只花了几天时间优化这些着色器的性能。
也许可以做得更好,以下是一些想法。
-
与FP32相比,Radeon Vega或nVidia 1650等较新的GPU具有更高的FP16性能,但我的计算着色器仅使用FP32数据类型。
一半的细致,两倍的乐趣 -
在当前版本中,FP16张量使用着色器资源视图向上转换加载的值,使用无序访问视图向下转换存储的值。
切换到字节地址缓冲区,加载/存储完整的4字节值,并使用f16t32/f32-tof16
内部函数在HLSL中进行上变频/下变频可能是个好主意。 -
在当前版本中,所有着色器都是脱机编译的,
Whisper.dll
包含DXBC字节码。
HLSL编译器D3DCompiler_47.dll
是一个操作系统组件,速度非常快。对于昂贵的计算着色器,最好提供HLSL而不是DXBC,并在启动时使用宏的特定于环境的值进行编译。 -
将整个东西从D3D11升级到D3D12可能是个好主意。
较新的API更难使用,但它包含了D3D11没有的潜在有用功能:wave intrinsic和explicit FP16.。
缺少的功能
未实现自动语言检测。
在当前版本中,实时音频捕获的延迟很高。
具体而言,根据语音检测,该数字约为5-10秒。
至少在我的测试中,当我提供的音频片段太短时,模型并不满意。
我已经增加了延迟并结束了这一天,但理想情况下,这需要一个更好的解决方案来优化用户体验。
结尾语
在我看来,这是一个无偿的业余项目,我在2022-23年的寒假里完成了。
代码可能有一些bug。
软件是“原封不动”提供的,没有任何形式的担保。
感谢Georgi Gerganov实现了whisper.cpp以及GGML二进制格式的模型。
我不会编写Python程序,也对ML生态系统一无所知。
如果没有一个好的C++参考实现来测试我的版本,我甚至不会启动这个项目。
whisper.cpp项目有一个例子,它使用相同的GGML实现来运行另一个OpenAI的模型GPT-2。
用这个项目中已经实现的计算着色器和相关基础设施来支持ML模型应该不难。
如果你觉得这很有用,如果你考虑向“Come Back Alive”基金会捐款,我将不胜感激。
http://github.xiaoc.cn/Const-me/Whisper/releases/tag/1.11.0 ↩︎
https://www.huggingface.co/ggerganov/whisper.cpp ↩︎ ↩︎
http://github.xiaoc.cn/Const-me/Whisper ↩︎