Closed14

whisper.cppをMac(M4)で高速処理する(Core ML support)

asadeyyasadeyy

前提背景
Mac M4
(brewでもpython3あるけど使わん)
→pyenvで仮想環境作って作業する

asadeyyasadeyy

公式docより

git clone https://github.com/ggml-org/whisper.cpp.git
cd whisper.cpp
asadeyyasadeyy

今回はCore ML support使うんで、公式docを見ながらpipをインストール
pythonは3.11推奨ということで。
pyenv

pyenv install 3.11.12
pyenv local 3.11.12
python -m venv .env-for-whisper
source .env-for-whisper/bin/activate

必要なやつら

pip install ane_transformers
pip install openai-whisper
pip install coremltools
asadeyyasadeyy

さっそくmodelをgenerate。日本語文字起こしの精度高くいきたいのでlarge-v1にしまつ

./models/generate-coreml-model.sh large-v1
asadeyyasadeyy

はいエラー

Traceback (most recent call last):
  File "/Users/hogehoge/tools/whisper.cpp/models/convert-whisper-to-coreml.py", line 320, in <module>
    encoder = convert_encoder(hparams, encoder, quantize=args.quantize)
  File "/Users/hogehoge/tools/whisper.cpp/models/convert-whisper-to-coreml.py", line 255, in convert_encoder
    model = ct.convert(
  File "/Users/hogehoge/tools/whisper.cpp/whisper/lib/python3.10/site-packages/coremltools/converters/_converters_entry.py", line 635, in convert
    mlmodel = mil_convert(
  File "/Users/hogehoge/tools/whisper.cpp/whisper/lib/python3.10/site-packages/coremltools/converters/mil/converter.py", line 186, in mil_convert
    return _mil_convert(
  File "/Users/hogehoge/tools/whisper.cpp/whisper/lib/python3.10/site-packages/coremltools/converters/mil/converter.py", line 245, in _mil_convert
    return modelClass(
  File "/Users/hogehoge/tools/whisper.cpp/whisper/lib/python3.10/site-packages/coremltools/models/model.py", line 489, in __init__
    self.__proxy__, self._spec, self._framework_error = self._get_proxy_and_spec(
  File "/Users/hogehoge/tools/whisper.cpp/whisper/lib/python3.10/site-packages/coremltools/models/model.py", line 550, in _get_proxy_and_spec
    _MLModelProxy(
ValueError: basic_string
asadeyyasadeyy

ログ見たらこのようなwarning

Torch version 2.6.0 has not been tested with coremltools. You may run into unexpected errors. Torch 2.5.0 is the most recent 

が出ていたので以下を実行してみる

pip install torch==2.5.0

あと、large-v1が良くない説もあるのでmediumに落としてみる

./models/generate-coreml-model.sh medium
asadeyyasadeyy

エラー変わった!進歩!

xcrun: error: unable to find utility "coremlc", not a developer tool or in PATH
asadeyyasadeyy

xcrunのパスを確認する

xcode-select -p
/Library/Developer/CommandLineTools

パスだめぽいので変更しようね。ワイのはApplicationsの中にあるのでこう。

sudo xcode-select -s /Applications/Xcode.app/Contents/Developer

いちおうちゃんと動く確認

xcrun coremlc
coremlc: error: usage: coremlc <command> <inputdocument> <outputpath> [options ...]

OK

asadeyyasadeyy

もっかい実行

./models/generate-coreml-model.sh medium
(出力完了後のログ)models/coreml-encoder-medium.mlmodelc -> models/ggml-medium-encoder.mlmodelc

うごいた!!!

asadeyyasadeyy

あとは公式通りに

cmake -B build -DWHISPER_COREML=1
cmake --build build -j --config Release
asadeyyasadeyy

おっと、mediumのbinないやんけ!になってた。
モデルのダウンロードをしよう

./models/download-ggml-model.sh medium
asadeyyasadeyy

サンプルの音声で実行を試してみる

./build/bin/whisper-cli -m /Users/asadeyy/tools/whisper.cpp/models/ggml-medium.bin -f samples/jfk.wav

ログ(抜粋)

system_info: n_threads = 4 / 14 | WHISPER : COREML = 1 | OPENVINO = 0 | Metal : EMBED_LIBRARY = 1 | CPU : NEON = 1 | ARM_FMA = 1 | FP16_VA = 1 | MATMUL_INT8 = 1 | DOTPROD = 1 | ACCELERATE = 1 | AARCH64_REPACK = 1 |

main: processing 'samples/jfk.wav' (176000 samples, 11.0 sec), 4 threads, 1 processors, 5 beams + best of 5, lang = en, task = transcribe, timestamps = 1 ...


[00:00:00.000 --> 00:00:11.000]   And so, my fellow Americans, ask not what your country can do for you; ask what you can do for your country.

でぎだ!!!

asadeyyasadeyy

使いやすいようにalias設定しちゃうぞ

vim ~/.zshrc

一番下に以下を追加する

alias whisper-medium='~/tools/whisper.cpp/build/bin/whisper-cli -m ~/tools/whisper.cpp/models/ggml-medium.bin -f'

以下の感じで実行できる!

whisper-medium 音声ファイル.wav -l ja -otxt

日本語の場合はjaを、あとはtxtで出したいので

asadeyyasadeyy

(番外)
large-v1にリトライ
→おんなじエラー結果吐いた。large-v1が悪いみたい。。。
→友人の話ではlarge-v3はできたよーとのこと(私は試してない)

このスクラップは4ヶ月前にクローズされました