whisper.cpp安装
1. 背景
whisper是OpenAI官方发布的一款开源语音识别大模型,使用python实现。可以将语音信息转化为文本信息。其实也叫做ASR”自动语音识别”(Automatic Speech Recognition)。本文主要做的工作如下:
- 搭建whisper服务,和dify进行语音转写配合
- 针对MacOS进行优化编写
本文主要是用whisper.cpp,两者的区别是因为whipser官方默认功能比较重,whisper.cpp是社区将该模型移植到了C/C++版本,针对CPU和性能做了大量优化,区别如下:
对比项目 | whisper.cpp | whisper(官方实现) |
---|---|---|
语言与依赖 | - 纯 C/C++ 实现 - 几乎不依赖第三方深度学习库,安装轻量 | - Python + PyTorch(或其他深度学习框架) - 依赖完整的深度学习环境(GPU 驱动、Python 环境等) |
运行平台/环境 | - 可在 Linux、macOS、Windows、移动端等多平台编译运行 - 针对 CPU 优化,依赖 SIMD 指令集 | - 一般在有 GPU(NVIDIA CUDA)的服务器/工作站或本地带 GPU 的环境中运行 - 也可在 CPU 上跑,但速度相对较慢 |
性能特点 | - 专门针对 CPU 进行优化(AVX/AVX2/NEON 等) - 在较低端硬件上也有不错的推理速度 | - 在 GPU 上推理速度快 - 在 CPU 上速度相对更慢,除非硬件配置较高或者模型规模小 |
使用方式 | - 提供命令行工具和 C/C++ API - 无需安装 Python,即可离线编译使用 | - 通过 Python 脚本或 CLI 使用 - 需要安装 PyTorch、依赖 Python 生态 |
模型兼容性 | - 支持官方的 Whisper 模型权重(需转换为 ggml 格式) - 部分模型可进行量化(如 int8、int4) | - 直接使用官方发布的 .pt 或 .bin 模型权重 |
部署场景 | - 适用于资源受限或不便部署 Python/PyTorch 的场景 - 可跨平台、嵌入式、本地离线语音转录等 | - 适用于有 GPU 环境的服务器或工作站,处理大批量音频数据 - 与 Python 生态(如深度学习工具、pipeline 等)配合度更高 |
社区与生态 | - 由社区维护,活跃度较高 - 不断出现新的优化分支、量化方案等 | - 由 OpenAI 发布,社区广泛使用 - 生态成熟,有众多第三方封装库、扩展 |
适用人群 | - C++/系统开发者或需要轻量级部署的用户 - 不想依赖 Python 环境、希望本地 CPU 直接推理 | - Python/深度学习开发者 - 需要与 PyTorch 兼容或直接在研究、生产环境中使用可扩展的深度学习框架 |
github的官方网址: |
1 | https://github.com/ggerganov/whisper.cpp |
2. 安装
2.1 基础环境搭建
首先进行github文件下载并进入文件夹:
1 | git clone https://github.com/ggerganov/whisper.cpp.git |
根据需要下载whisper的模型:
1 | sh ./models/download-ggml-model.sh base |
其注意,不同的模型,需要的内存和大小不同,占用的存储和内存如下,一般来说使用small和base基本上也足够了。
Model | Disk | Mem |
---|---|---|
tiny | 75 MiB | ~273 MB |
base | 142 MiB | ~388 MB |
small | 466 MiB | ~852 MB |
medium | 1.5 GiB | ~2.1 GB |
large | 2.9 GiB | ~3.9 GB |
注意,本下载需要从huggingface.co下载,如果无法下载,可以从官网下载 |
||
从官网下载,官网地址:https://ggml.ggerganov.com/ |
1 | cd models |
下载下来的文件进行MD5校验,可以看到和huggingface上的md5一致。
1 | shasum -a 1 ggml-model-whisper-base.bin |
2.2 MacOS环境优化
针对苹果的M系列芯片,whisper.cpp进行了单独的优化,可以比单纯CPU速度更快。在安装之前保证:
- xcode正确安装,如果没有安装,在appstore上安装,并使用
xcode-select --install
进行工具安装 - 使用python3.10
- MacOS的版本大于14.0
开始进行虚拟环境搭建:如果报错1
2
3
4
5
6
7
8
9# 安装homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# 安装miniconda
brew install --cask miniconda
# 创建虚拟环境
conda create -n py310-whisper python=3.10 -y
# 激活虚拟环境
conda activate py310-whisperCondaError: Run 'conda init' before 'conda activate'
,是因为.bashrc
中没有初始化,执行:激活虚拟环境后进行环境安装:1
2
3
4
5
6
7
8
9
10
11
12# 执行看是否有激活环境
cat ~/.zshrc | grep conda
cat ~/.bash_profile | grep conda
# 如果出现如下内容,则说明有添加,需要重新执行一下,如果没有,需要手动添加到bash_profile下,然后再激活虚拟环境
# >>> conda initialize >>> __conda_setup="$('/opt/homebrew/Caskroom/miniforge/base/bin/conda' 'shell.zsh' 'hook' 2> /dev/null)" eval "$__conda_setup" unset __conda_setup # <<< conda initialize <<<
# 如果有,需要执行一下
source ~/.bash_profile
# 如果没有,手动添加执行
echo 'eval "$(/opt/homebrew/Caskroom/miniforge/base/bin/conda shell.zsh hook)"' >> ~/.zshrc
source ~/.zshrc开始针对Core ML进行模型优化,比如刚刚下载的是base,那么执行:1
2
3pip install ane_transformers
pip install openai-whisper
pip install coremltools执行后会生成1
./models/generate-coreml-model.sh base
models/ggml-base-encoder.mlmodelc
文件夹,然后开始进行针对mac优化的编译:编译完毕后,可以运行sample:1
2
3# using CMake,其中DWHISPER_COREML=1表示对macos的优化
cmake -B build -DWHISPER_COREML=1
cmake --build build -j --config Release如果运行成功则表示运行成功了。1
2
3
4
5
6
7
8
9
10
11$ ./build/bin/whisper-cli -m models/ggml-base.bin -f samples/jfk.wav
...
whisper_init_state: loading Core ML model from 'models/ggml-base-encoder.mlmodelc'
whisper_init_state: first run on a device may take a while ...
whisper_init_state: Core ML model loaded
system_info: n_threads = 4 / 10 | AVX = 0 | AVX2 = 0 | AVX512 = 0 | FMA = 0 | NEON = 1 | ARM_FMA = 1 | F16C = 0 | FP16_VA = 1 | WASM_SIMD = 0 | BLAS = 1 | SSE3 = 0 | VSX = 0 | COREML = 1 |
...
其中以目前whisper-cli仅支持16-bit wav格式的音频文件,如果不是此类文件比如是mp3文件,则需要使用ffmpeg进行转化。比如:1
ffmpeg -i test.mp3 -ar 16000 -ac 1 -c:a pcm_s16le output.wav
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 apostle的数字花园!
评论