在 Astra 上运行 Whisper.cpp
本教程将指导您在 Synaptics Astra™ Machina™ SL1680 上运行 whisper.cpp 来测试 wav 文件。
本教程适用于所有 SL16xx 开发板。虽然推理性能可能有所不同,但在所有处理器上的步骤都是相同的。
Whisper.cpp 是 Whisper 语音转文本模 型的 C++ 实现。在 原始 GitHub 仓库 查看更多关于 Whisper.cpp 的详细信息。
如果您想运行流式/实时 Whisper,请按照 Whisper 流式处理教程。
前提条件
由于我们在 OOBE(开箱即用)镜像 v1.2.0 及以上版本中支持所需的包和编译器,您可以在 Machina 开发板上本地编译 Whisper 二进制文件。您可以跳过前提条件,直接进入步骤 1,在 Machina 终端而不是 Ubuntu 终端上运行命令。
以下步骤将指导您交叉编译 Whisper.cpp 二进制文件。 您将使用 Ubuntu 作为主机开发 机器。在 Ubuntu 系统上,您可以首先构建专门用于 Astra Machina 开发板 的 Yocto 环境。为此,从这里获取预构建工具链。
为您的芯片组下载独立工具链。在本教程中,我们将使用 sl1680。
下载后,在 Ubuntu 中打开终端并运行命令:
bash poky-glibc-x86_64-astra-media-cortexa73-sl1680-toolchain-4.0.17.sh
现在运行此命令来激活环境:
. /opt/poky/4.0.17/environment-setup-cortexa73-poky-linux
要检查环境是否激活,在 Ubuntu 终端中使用命令:
echo $CC
步骤 1:为 Whisper.cpp 生成二进制文件
在 Ubuntu 中打开终端并从 GitHub 克隆 whisper.cpp 仓库:
git clone https://github.com/ggerganov/whisper.cpp.git
cd whisper.cpp
创建 build 目录并导航到它,然后运行 CMake 命令来构建项目:
mkdir build && cd build
cmake ..
cmake --build . --config Release
main 的二进制文件将在 ~/build/bin/ 中创建,共享库文件 libwhisper.so.1 将在 ~/build/src 中创建。这两个文件将帮助您运行 Whisper 模型,因此您需要将它们复制到 Machina 开发板。
要运行实时 Whisper.cpp,请按照 Whisper 流式处理指南。它提供了为 Astra 构建 stream 二进制文件的教程。
此外,您需要使用 whisper.cpp 的最新更新创建 ggml 二进制文件,因此请按照 官方仓库 的说明或按照以下步骤操作:
git clone https://github.com/ggerganov/ggml
cd ggml
# 在虚拟环境中安装 python 依赖
python3.10 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
# 构建示例
mkdir build && cd build
cmake ..
cmake --build . --config Release -j 8
使用这些步骤后,三个 ggml 二进制文件将在 /ggml/build/src/ 位置创建:libggml.so、libggml-base.so 和 libggml-cpu.so。将这些文件复制到您的 Machina 工作目录。
步骤 2:设置 Astra Machina 开发板
- ADB
- Tera Term
使用 ADB 从 Ubuntu 等主机访问 Astra Machina 开发板。
按照 Access Machina Board 教程中的步骤设置 ADB。
进入 ADB shell 后,在 Machina 开发板的 home 目录中创建一个新目录:
mkdir whisper
现在,在开发系统中打开一个新的 Ubuntu 终端,使用 push 将您从步骤 1 生成的二进制文件复制到 Machina 开发板:
adb push ~/whisper.cpp/build/bin/main /home/whisper
adb push ~/whisper.cpp/build/libwhisper.so.1 /home/whisper
adb push ~/ggml/build/src/libggml.so /home/whisper
adb push ~/ggml/build/src/libggml-base.so /home/whisper
adb push ~/ggml/build/src/libggml-cpu.so /home/whisper
使用 Tera Term 从 Ubuntu 等主机访问 Astra Machina 开发板。
按照 Access Machina Board 教程中的步骤设置 Serial console,如 Tera Term。
设置 Tera Term 后,从这里获取您的 Astra Machina 开发板的 Inet 地址:
ifconfig eth0 | grep "inet addr"
然后在 Machina 开发板的 home 目录中创建一个新目录:
mkdir whisper
现在,在开发系统的 Ubuntu 终端中,使用 scp 将您从步骤 1 生成的二进制文件复制到 Machina 开发板:
scp /whisper.cpp/build/bin/main root@10.3.10.132:/home/whisper
scp /whisper.cpp/build/src/libwhisper.so.1 root@10.3.10.132:/home/whisper
scp /ggml/build/src/libggml.so root@10.3.10.132:/home/whisper
scp /ggml/build/src/libggml-base.so root@10.3.10.132:/home/whisper
scp /ggml/build/src/libggml-cpu.so root@10.3.10.132:/home/whisper
将二进制文件复制到 Machina 开发板后,链接 libwhisper.so.1 文件。按照以下命令操作:
mv libwhisper.so.1 /usr/lib/
ln -s /usr/lib/libwhisper.so.1 /home/whisper/libwhisper.so.1
ls -l
执行 ls -l 命令后,您应该看到一个链接 libwhisper.so.1 -> /usr/lib/libwhisper.so.1,如下所示:
lrwxr-xr-x 1 root root 24 Dec 5 22:03 libwhisper.so.1 -> /usr/bin/libwhisper.so.1
如果运行二进制文件时出现错误:
./main: error while loading shared libraries: libwhisper.so.1: cannot open shared object file: No such file or directory
使用以下命令删除 libwhisper.so.1:
rm libwhisper.so.1
重新复制它,然后从主机开发机器将 libwhisper.so.1 推送到 Machina 开发板的 whisper 目录并给予权限。
步骤 3:下载测试 WAV 和 Whisper 模型
对于测试 wav 文件,您可以使用 Whisper GitHub 仓库中 whisper.cpp/samples/ 目录下的 jfk.wav,这是您在步骤 1 中下载的。
您需要在主机开发机器(在本例中为 Ubuntu)上从 HuggingFace 下载 Whisper 模型。
在本教程中,您将使用 tiny 量化模型 ggml-tiny.en-q8_0.bin。
链接:https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-tiny.en-q8_0.bin
下载后,您需要将此模型和测试 wav 文件 jfk.wav 复制到您的 Astra Machina 开发板:
scp ~/Downloads/ggml-tiny.en-q8_0.bin root@10.3.10.132:/home/whisper
scp ~/Downloads/whisper.cpp/samples/jfk.wav root@10.3.10.132:/home/whisper
步骤 4:在 Machina 开发板上使用 WAV 文件运行 Whisper
下载模型并构建二进制文件后,您现在可以在 whisper 文件夹中运行 Whisper:
./main -m ggml-tiny.en-q8_0.bin -f jfk.wav
您的 Synaptics Astra 开发板的输出应该如下所示:
.. [00:00:00.000 --> 00:00:07.960] And so my fellow Americans ask not what your country can do for you [00:00:07.960 --> 00:00:10.760] ask what you can do for your country.
whisper_print_timings: load time = 110.04 ms whisper_print_timings: fallbacks = 0 p / 0 h whisper_print_timings: mel time = 25.06 ms whisper_print_timings: sample time = 175.44 ms / 138 runs ( 1.27 ms per run) whisper_print_timings: encode time = 3040.76 ms / 1 runs ( 3040.76 ms per run) whisper_print_timings: decode time = 6.37 ms / 1 runs ( 6.37 ms per run) whisper_print_timings: batchd time = 562.93 ms / 133 runs ( 4.23 ms per run) whisper_print_timings: prompt time = 0.00 ms / 1 runs ( 0.00 ms per run) whisper_print_timings: total time = 3949.22 ms
恭喜
您已成功在您的 Astra Machina 开发板 上安装并运行了 Whisper.cpp。如果您想运行流式或实时 Whisper,请按照这个 Whisper 流式处理指南。
您还可以通过尝试不同的模型或将 Whisper 集成到您的项目中来进一步探索。有关更高级用法和选项,请参阅 Whisper.cpp GitHub 仓库。