Parakeet Ultra ONNX(WebGPU 向け)

Parakeet Ultra(Moondream。NVIDIA Parakeet TDT 0.6B v3 を追加学習した欧州 25 言語の音声認識モデル)を、ブラウザの ONNX Runtime Web(WebGPU)で動かすために変換したものです。 エンコーダは 4 ビットに量子化し、WebGPU に実装の無い演算を分解してあります。fp16 を使わないので、shader-f16 に対応していない GPU でも動作する見込みです。

English summary: ONNX build of moondream/parakeet-ultra (a fine-tune of NVIDIA Parakeet TDT 0.6B v3 for 25 European languages) for in-browser inference with ONNX Runtime Web on WebGPU. The FastConformer encoder is quantized to 4-bit (MatMulNBits, block 32, symmetric) and its opset-23 Attention nodes are decomposed into MatMul/Softmax, because ONNX Runtime Web's WebGPU backend has no Attention kernel and falls back to the CPU. The TDT decoder/joint network is kept in fp32. No fp16 is used.

ブラウザで使う

ブラウザ内で完結する文字起こしツール Transcriber が、このリポジトリのモデルを使っています(WebGPU が使える PC で、スペイン語・ドイツ語・フランス語・イタリア語・ポルトガル語・ロシア語などのとき)。音声はサーバーへ送らず、推論はすべてブラウザの中で行います。

Used by Transcriber, an in-browser transcription tool. Audio never leaves the browser.

ファイル

パス 中身 大きさ
int4/encoder.onnx エンコーダ(FastConformer)のグラフ。重みは外部データ 0.5 MB
int4/encoder.onnx.data エンコーダの重み(MatMulNBits の 4 ビット・ブロック 32・対称) 424 MB
fp32/decoder_joint.onnx TDT の予測ネット(LSTM 2 層・640)と joint(fp32。変換元の書き出しのまま) 73 MB
vocab.txt 語彙(SentencePiece の片と id。0〜8191 の 8,192 個と、blank の <blk>(id 8192)) 94 KB
config.json 変換元の設定(特徴量 128・間引き 8・1 フレームの最大トークン数 10) —

入出力の名前は onnx-asr の nemo-conformer-tdt の配置と同じです。

  • encoder: audio_signal [1, 128, T](float32)・length [1](int64)→ outputs [1, 1024, T/8]・encoded_lengths
  • decoder_joint: encoder_outputs [1, 1024, 1]・targets [1, 1](int32)・target_length [1]・input_states_1 / input_states_2 [2, 1, 640] → outputs(語彙 8,193 + duration 5 の logits)・output_states_1 / output_states_2

推論の手順

  1. 16 kHz・モノラルの音声を、NeMo の AudioToMelSpectrogramPreprocessor(推論時・dither なし)と同じ手順で log メルにする: プリエンファシス 0.97 → 両端に 256 の 0 → 窓 400(対称の Hann を 512 の中央に置く)・hop 160 の FFT 512 のパワー → メル 128(librosa の slaney、fp32)→ log(x + 2^-24) → 特徴ごとに平均と不偏標準偏差(+1e-5)で正規化。フレーム数は詰めない
  2. encoder を WebGPU で回す
  3. TDT の貪欲法(NeMo の label-looping と同じ決まり): 各フレームで decoder_joint を呼び、トークンは logits の前半の argmax、進むフレーム数は後半 5 個(0〜4)の argmax。blank で duration が 0 なら 1 にする。予測ネットの状態と直前のトークンは、blank 以外を出したときだけ進める。同じフレームで 10 個出したら 1 フレーム進める
  4. トークンを語彙で文字にする(▁ は空白、<0xNN> は 1 バイト)。トークンを出したフレーム × 80 ms が時刻

言語の指定はありません(モデルが判定します)。句読点と大文字はモデルが出します。

元のモデルからの変更

  • 変換元は maaaaat/parakeet-ultra-onnx(commit b21e4175)の fp32 の書き出し(encoder-model.onnx・decoder_joint-model.onnx)
  • エンコーダの opset 23 の Attention を、等価な MatMul → ×1/√128 → +マスク → Softmax → MatMul に分解した(ONNX Runtime Web の WebGPU に Attention の実装が無く、CPU で実行されて遅くなるため)
  • エンコーダの MatMul を MatMulNBits(4 ビット・ブロック 32・対称・accuracy_level 4)に量子化した(onnxruntime 1.23 の MatMulNBitsQuantizer)
  • decoder_joint・語彙・設定は変換元のまま

確認(FLEURS のテスト分から各言語 100 発話、ONNX Runtime Web 1.26 の WebGPU、AMD Radeon 780M): 単語誤り率(WER)は en 5.7・es 4.2・de 6.3・fr 6.5・it 3.8・pt 5.6・ru 5.9%。 CPU で変換元の 8 ビットの書き出しを onnx-asr で回したもの(en 5.4・es 3.9・de 6.1・fr 6.2・it 3.8・pt 5.4・ru 6.5%)とほぼ同じです。速さは音声の 24〜29 倍速でした。 6 発話(45〜80 秒)をつないだ音声を 1 回で渡しても、15 秒・28 秒に区切っても、発話の抜けはありませんでした。

Checked on FLEURS test (100 utterances per language) with ONNX Runtime Web 1.26 on WebGPU (AMD Radeon 780M): WER en 5.7, es 4.2, de 6.3, fr 6.5, it 3.8, pt 5.6, ru 5.9 %, about the same as the 8-bit export on CPU with onnx-asr. 24–29× real time. No dropped utterances when six utterances (45–80 s) are passed as one segment.

ライセンス

CC BY 4.0。変換と上の変更は ryusei.io が行いました。

This repository is a modified version of the works above, licensed under CC BY 4.0. Changes: Attention decomposition and 4-bit quantization of the encoder (details above).

Downloads last month
1,763
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for ryusei-46/parakeet-ultra-ONNX-WebGPU

Quantized
(53)
this model

Space using ryusei-46/parakeet-ultra-ONNX-WebGPU 1