ogochan
Orange Pi 5のNPUのことを調べていて、「これは今流行りのAIには使えないかも?」とか思っていたのですが、ちょっと期待されるものが出てました。
Crowd Supplyのクラウドファンディングなんですが、要するに「今時の人工知能が動く箱だぜ」というもののようです。スペックを見ると、RK3588Sが使われているようです。
どんなものかなと見てみたら、コアがGitHubに置いてあったので試してみました。
はじめに
RK3588のNPUはいろいろ制約が厳しくて、「今時の人工知能」に使うにはいろいろ工夫が必要です。そもそも、モデルが1GB弱のものしか入らないみたいで、今時のものだと厳しいようです。今時のモデルはシレっと4GBとかは小さい方で... って感じですからね。
なので、使えないなと思って諦めていたのですが、頑張っている人達がいたようです。
クラウドファンディングのページを見ると、なかなか大口叩いているなって感じなんですが、GitHubのが動いたらそれは単体で凄いことだなと思います。
インストール
このプロジェクト自体はRK3588(S)専用のものです。その点でWhisper.cppとかLlama.cppとは方向性が異なります。Whisper.cppやLlama.cppでもぼちぼちNVIDIA対応のコードとか入っているので、RK3588 NPUもそうすればいいのになと思いますけど。
ということで専用なので、動く環境であればサクっと入れられます。
$ python -m pip install https://github.com/usefulsensors/useful-transformers/releases/download/0.1_rk3588/useful_transformers-0.1-cp310-cp310-linux_aarch64.whl
要するにpip一発ですね。
必要なものはこれで全部入るようです。
実行
とりあえず動かしてみます。
$ taskset -c 4-7 python -m useful_transformers.transcribe_wav
E RKNN: [15:47:59.361] failed to open rknpu module, need to insmod rknpu dirver!
E RKNN: [15:47:59.361] failed to open rknn device!
Segmentation fault
このコマンドラインを入れると内蔵のデモが走ると書いてあるのですが、動きません。rknpu
というカーネルモジュールがないと怒られます。
rknpu
というのは、RockChipのNPUを動かすためのカーネルモジュールです。
そこで、書かれているように、
$ sudo insmod rknpu
と入れてみますが、「ない」と言って怒られます。ネットを探してみても、結局「ない」という結論になります。
されこれ探していると、「ODROID WIKI」というところに
というエントリがあって、そこにODROIDのRK3568を使ったモデル(ODROID-M1)についての解説があって、そこにあるデモの走らせ方を見て「もしかして一般ユーザで走らせたのがいけないか?」と思って、
$ sudo taskset -c 4-7 python -m useful_transformers.transcribe_wav
と入れたら、
$ sudo taskset -c 4-7 python -m useful_transformers.transcribe_wav
100%|████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:01<00:00, 1.28s/it]
Ever tried, ever failed. No matter, try again. Fail again. Fail better.
と出てくれました。最初のプログレスバーをてっきり「モデルの読み込みだろう」と思ってて、出て来たメッセージの「fail」の文字列を見ててっきり「結局失敗か」と思ってよく見たら、ちゃんと処理してました... というくらいすぐ出ました。
いろいろ見ると、モデルはtiny.enを使っているようです。これは英語専用の小さいモデルですが、それを考えても「すぐ」という感じで出て来るので、結構実用的な速度です。これで日本語ありのモデルも動かせたら凄いなと思うのですが、モデルの変換のしかたとかそういったものはまだ全く説明されていない上に、TODOにはtiny.en以外のモデルにも対応しなきゃみたいなことが書いてあるので、今のところはこれくらいなのでしょう。
試しに先日のエントリ
で使った音声を入れてみたのですが、モノラル音声しか対応してないというエラーが出たり、認識もでたらめ(当たり前)なので、「これから」という感じです。
まとめ
いろいろ不十分だなと言うか「まだまだ」という感じではあるのですが、動いている範囲では結構高速で、いろいろ期待させてくれる感じです。
クラファンで言っていることがどこまで実現されるのかはわかりませんが、書かれていることの半分でも達成されれば、かなりのものだと言っても良いと思います。
そういった意味では、
まだまだではあるけど期待大
と言えます。
Issueとか見てると、RockChipのNPUについては、リバースエンジニアリングをやってコードを書いているみたいなので、この辺何とかならないかなと感じます。個人的にはGGMLなものと統合されると、いろいろ良いなと思うのですけどね。
そんな感じでした。