大学の講義でICT実践なるものがあり、RaspberryPi5 8GBモデルを使ってスマートスピーカーを作ることに挑戦している。
この記事をベースにして制作しているのだが……
自分の場合、学生で金もないためお高いGPUをサーバーとして使うこともできない。
この記事でも多くの処理をRaspberryPi上ではなく、
外部サーバに任せることでスムーズな実行を行っている。
(割と取り返しのつかない時期に気づいた。)
このままでは、一回の応答にn時間かかるスマートじゃないスピーカーが出来上がってしまう。
さて、どうしたものか……
あれなんだこれ
先輩が残していった遺物です。(販売終了済み)
希望の光が見えてきた。
そしていろいろ調べて何とかうまくいきそうなとこまできました。
ONNX形式やIR形式についていろいろ調べてぶつかりまくったので、備忘録として残しておきます。
以降のコマンドは、wslかつpyenv上で実行したコマンドです
pythonのバージョンは3.8.20です。
openVINOなどの互換性を調べたらこのあたりが無難そうだったからです。
Hugging FaceモデルをONNX形式に変換するには
ChatGPT君が出すコードどれもエラーでした。
結局自分でググって、自分で解決しました😢
僕が全然知らなかっただけでみんな知ってるかもしれませんが……
kotoba-whisper-v2.0
なら、こんな感じで
optimum-cli export onnx --model kotoba-tech/kotoba-whisper-v2.0 ./kotoba-v2_onnx/
簡単に変換できます。
リポジトリ名のところを見れば規則性が明らかですね。
pip install optimum
としてやれば簡単に使えるコマンドです。
コードでも変換できるのかもしれませんが、
エラーが消えなくて諦めました。
一行で変換できちゃうのは楽でいいですね!
参考
ONNX形式からIR形式に変換
こちら、ChatGPTが使い物にならず。
mo
はもう使えないらしい。
結局公式ドキュメントのコードをそのままパクりました。
こんな感じ
ovc model/encoder_model.onnx --output_model model/encoder_model.xml --compress_to_fp16=False
ちなみに、compress_to_fp16=False
というのは、重み行列などを16bit float型に圧縮させませんよーという意味です。(デフォルトでfp16に圧縮するよう設定されている)
わかりやすいですね。
このコマンドはデフォルトで圧縮されるので、
=False
としてやることで、32bit float型のままIR形式に変換しろという意味です。
オプションとかも書いてあるのでここが一番わかりやすいです。
謎のonnx_data形式が出現?!
こいつ、まじクソ。
公式サイトでこの拡張子を書いてないから調べるのに手間取った。
どうやら、onnxファイルのサイズが2GBを超える場合、
別途外部にファイルを作成するとかなんとか。
わかるけどさー。
せめて拡張子くらい書いてくれ。
一応、onnxをIRに変換するときは
自動で結合して変換してくれるので気にしなくて大丈夫です。
onnx_data形式の正体について気づくきっかけになった公式ドキュメント
あとはNCS2とラズパイがまともに動作するか……
わからねぇ……