ハードウェアからサーバ・アプリまでワンストップで開発

Useful Transformersを試してみる

今後に期待

Orange Pi 5のNPUのことを調べていて、「これは今流行りのAIには使えないかも?」とか思っていたのですが、ちょっと期待されるものが出てました。

AI in a Box

Crowd Supplyのクラウドファンディングなんですが、要するに「今時の人工知能が動く箱だぜ」というもののようです。スペックを見ると、RK3588Sが使われているようです。

どんなものかなと見てみたら、コアがGitHubに置いてあったので試してみました。

Useful Transformers

はじめに

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」というところに

RKNPU:Manual

というエントリがあって、そこに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以外のモデルにも対応しなきゃみたいなことが書いてあるので、今のところはこれくらいなのでしょう。

試しに先日のエントリ

Orange Pi 5でWhisperを試す

で使った音声を入れてみたのですが、モノラル音声しか対応してないというエラーが出たり、認識もでたらめ(当たり前)なので、「これから」という感じです。

まとめ

いろいろ不十分だなと言うか「まだまだ」という感じではあるのですが、動いている範囲では結構高速で、いろいろ期待させてくれる感じです。

クラファンで言っていることがどこまで実現されるのかはわかりませんが、書かれていることの半分でも達成されれば、かなりのものだと言っても良いと思います。

そういった意味では、

まだまだではあるけど期待大

と言えます。

Issueとか見てると、RockChipのNPUについては、リバースエンジニアリングをやってコードを書いているみたいなので、この辺何とかならないかなと感じます。個人的にはGGMLなものと統合されると、いろいろ良いなと思うのですけどね。

そんな感じでした。

最近のエントリー

Hieronymusのインボイス番号対応について

会計システム「Hieronymus」の現状

OrangePi5にZabbixをインストールする

レビュー等の依頼について

オープンソースのノートアプリ「SiYuan」 - CasaOS AppStoreレビュー

お気に入りの色さがし1

創立記念日

現在の営業品目(2)

現在の営業品目(1)

SPDX License Listをデータ化した

Orange Pi5でC3TR-Adapterを試す

CasaOS上で会計システム「Hieronymus」を動かす

会計システム「Hieronymus」v1.0.0 リリースしました

CasaOSでファイル同期アプリSyncthingをセットアップする

第11回 Freshmeat

オープンソースノーコード「Activepieces」でワークフローを作る

RaspberryPiにパーソナルクラウドOS「CasaOS」を導入する

sequelize-cliでdb:migrateすると「SyntaxError: Unexpected token ':'」が出る

LED行燈の試作(2)

CMSの社内向けサービスのリニューアル