AI 开放平台

提供适配不同硬件平台的AI模型,探索更多端侧场景应用

基于此芯P1部署Whisper

此芯: P1

Whisper 是 OpenAI 提出的一个自动语音识别 (ASR) 系统,它基于从网络收集的 680,000 小时多语言和多任务监督数据进行训练。我们表明,使用如此庞大且多样化的数据集可以提高对口音、背景噪音和技术语言的鲁棒性。此外,它还可以转录多种语言,以及将这些语言翻译成英语。

Whisper-approach

Whisper 架构是一种简单的端到端方法,以编码器-解码器 Transformer 的形式实现。输入音频被分成 30 秒的片段,转换成对数梅尔谱图,然后传入编码器。解码器经过训练可以预测相应的文本字幕,并与特殊标记混合,指导单个模型执行语言识别、短语级时间戳、多语言语音转录和英语语音翻译等任务。

Whisper-pipeline

由于 Whisper 是在大型多样化数据集上进行训练的,并且未针对任何特定数据集进行微调,因此它无法击败专门针对 LibriSpeech 性能的模型,LibriSpeech 是语音识别领域著名的竞争基准。然而,当我们在许多不同的数据集上测量 Whisper 的零样本性能时,我们发现它比那些模型更加稳健,错误率降低了 50%。Whisper 的音频数据集中约有三分之一是非英语的,它交替被赋予转录为原始语言或翻译成英语的任务。我们发现这种方法在学习语音到文本的翻译方面特别有效,并且在 CoVoST2 到英语翻译零样本上优于监督 SOTA。

whisper.cpp 介绍

whisper.cppOpenAI Whisper 的高性能实现。具有以下特点:

  • 无第三方依赖的纯 C/C++ 实现
  • Apple Silicon 一等公民 - 通过 ARM NEON、Accelerate 框架、Metal 和Core ML进行优化
  • 对 x86 架构支持 AVX intrinsic函数
  • F16 / F32 混合精度
  • 整数量化支持
  • 运行时零内存分配
  • Vulkan 支持
  • 支持仅 CPU 推理
  • C 风格 API

该模型的整个高级实现包含在 whisper.hwhisper.cpp 中。其余代码是 ggml 机器学习库的一部分。

基于 Orien-O6 部署 whisper.cpp 的 CPU 推理

Orien O6开发板介绍

瑞莎星睿 O6 (Radxa Orion O6) 是一款面向 AI 计算和多媒体应用的专业级 Mini-ITX 主板。它搭载 Cix P1 SoC(型号 CD8180),支持 最高 64GB LPDDR5 内存,在紧凑的尺寸下提供服务器级性能。Orion O6 具备丰富的 I/O 接口,包括 四路显示输出、双 5GbE 网络PCIe Gen4 扩展,非常适合 AI 开发工作站、边缘计算节点 以及 高性能个人计算 应用。

主要特性

  • 高性能 Cix P1 SoC:采用 TSMC 6nm 工艺制造
  • Arm v9 指令集 & EDK II UEFI,提供广泛的软件兼容性
  • Mini-ITX 规格:兼容标准 PC 机箱
  • 原生支持 Debian/Ubuntu Linux,便于部署
  • 可扩展性强:支持 PCIe x16(Gen4 x8)、M.2 NVMe、M.2 Wi-Fi/蓝牙

详细规格

规格 详细信息
主板类型 基于 ARM 的 Mini-ITX 主板
尺寸 170 x 170 x 25mm
处理器(CPU) Cix P1 - CD8180
• 四核大核 Cortex®-A720、四核中核 Cortex®-A720、四核小核 Cortex®-A520
• 12MB L3 共享缓存
图形处理器(GPU) Arm® Immortals™ G720 MC10 GPU,支持:
• 硬件光线追踪
• OpenGL® ES3.2
• OpenCL® 3.0
• Vulkan® 1.3
神经处理单元(NPU) 支持 INT4 / INT8 / INT16 / FP16 / BF16 和 TF32 加速,算力高达 28.8TOPs
视频解码 支持 AV1 / H.265 / H.264 / VP9 / VP8 / H.263 / MPEG-4 / MPEG-2,最高 8K@60fps
视频编码 支持 H.265 / H.264 / VP9 / VP8,最高 8K@30fps
内存 <p>类型: 128-bit LPDDR5,板载焊接</p> <p>容量选项: 8GB、12GB、16GB、24GB、32GB、64GB</p> <p>速度: 5500MT/s</p>
存储接口 1x M.2 M Key 插槽,支持 PCIe Gen4 4 通道 NVMe SSD
无线连接 1x M.2 E Key 插槽,支持 PCIe Gen4 2 通道和 USB,可用于 WiFi/蓝牙模块
PCIe 插槽 1x PCIe x16 全尺寸插槽,支持 PCIe Gen4 8 通道
视频输出 • 1x HDMI,最高 4Kp60
• 1x DisplayPort(DP),最高 4Kp120,支持 2 路 MST
• 1x USB-C(支持 DP),最高 4Kp60
• 1x eDP,最高 4Kp60
以太网接口 2x 1G / 2.5G / 5G 以太网端口
USB 接口 • 2x USB 2.0 Type-A(后置)
• 2x USB 3.2 10Gbps Type-A(后置)
• 2x USB 2.0(前置内部接口)
• 2x USB Type-C(后置),支持 USB 3.2 10Gbps,其中一个支持 DP 视频输出
音频 • 1 个带麦克风输入功能的耳机插孔(背板处)
• 1 个前置面板音频连接器,用于连接前置面板的 3.5 毫米音频插孔
电源输入 • ATX 24P 电源接口
• USB-C PD 电源输入(20V/3.25A 或更高)
• 20V USB-C 适配器直出
推荐电源 至少 65W
工作温度 0°C 至 40°C
散热 • 4x 散热器安装孔(75mm x 75mm)
• 1x 4P 风扇接口,支持 PWM 调速与 TACH 反馈
RTC 实时时钟 RTC 电池座(支持 CR1220 电池)
支持的操作系统 Debian / Ubuntu Linux

部署指南

首先克隆存储库:

git clone https://github.com/ggerganov/whisper.cpp.git

导航到目录:

cd whisper.cpp

然后,下载一个已转换为 ggml 格式的 Whisper 模型。例如:

sh ./models/download-ggml-model.sh base.en

现在构建 whisper-cli 示例并转录这样的音频文件:

# build the project
cmake -B build -DGGML_NATIVE=OFF -DGGML_CPU_ARM_ARCH=armv9-a
cmake --build build --config Release

# transcribe an audio file
./build/bin/whisper-cli -f samples/jfk.wav

Orien O6 搭载 ARM V9 架构的CPU,增加编译选项 -DGGML_CPU_ARM_ARCH=armv9-a 可开启SVE、SVE2、SME等指令的优化,加速 ggml 模块计算,提升推理速度。

如需快速演示,只需运行 make base.en

该命令下载转换为 ggml 格式的模型 base.en ,并对文件夹中的所有 .wav 样本运行推理。

有关详细使用说明,请运行:./build/bin/whisper-cli -h

请注意,whisper-cli 示例目前仅适用于 16 位 WAV 文件,因此请确保在运行之前使用 ffmpeg 工具对输入进行转换。例如:

ffmpeg -i input.mp3 -ar 16000 -ac 1 -c:a pcm_s16le output.wav

Memory usage

ModelDiskMem
tiny75 MiB~273 MB
base142 MiB~388 MB
small466 MiB~852 MB
medium1.5 GiB~2.1 GB
large2.9 GiB~3.9 GB

运行推理

选用 base-en 模型,对输入文件 jfk.wav 进行推理,设置线程数为 8 可获得 Orien o6 上的最佳推理性能。

./build/bin/whisper-cli -f samples/jfk.wav -m models/ggml-base.en.bin -t 8

音频文件被成功识别为以下文字:

$ And so my fellow Americans, ask not what your country can do for you, ask what you can do for your country.

模型各模块的详细运行时间如下:

Whisper-result

模型的整数量化

whisper.cpp 支持 Whisper ggml 模型的整数量化。 量化后的模型可以减少内存和磁盘空间需求,并获得硬件的更高效的处理。

以下是创建和使用量化模型的步骤:

# quantize a model with Q5_0 method
cmake -B build
cmake --build build --config Release
./build/bin/quantize models/ggml-base.en.bin models/ggml-base.en-q5_0.bin q5_0

# run the examples as usual, specifying the quantized model file
./build/bin/whisper-cli -m models/ggml-base.en-q5_0.bin ./samples/gb0.wav