跳到主要内容

在 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.solibggml-base.solibggml-cpu.so。将这些文件复制到您的 Machina 工作目录。

步骤 2:设置 Astra Machina 开发板

使用 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

将二进制文件复制到 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 仓库