中華デジタルサイネージでローカルLLM

AI
この記事は約5分で読めます。

こんにちは!秋ノ原窓也です!
やってきました。変なハードウェアでLLMを動かすプロジェクト第三弾。(今回からシリーズ化)
今回は中華デジタルサイネージでローカルLLMを動かしていきたいと思います!!

この案は、ツイッターにnintendo switch改造用のRCMジグの写真を上げたとき、とあるFFさんから
「スイッチでローカルLLMとかやりそうだこの人」
ということを言われたことがきっかけです。スイッチではかんたんにlinuxが導入できますし、それなりに性能もあるのでおそらく比較的容易に動きます。それだったらもっと変なデバイスで動かしたくなりません?なりますよね!!というわけで引っ張り出してきたこいつで遊ぼうかと思ったわけです。

一年ほど前にハードオフで買ってきたandroid7.1.2搭載の中華謎メディアプレーヤーです!!

アプローチ1

最初のアプローチではこう考えました。
「android7.1.2ならtermuxの最小要件を満たしているはず。termuxをどうにかサイドロードしてその中でllama.cppを動かせないか?」と。

そのためこの章ではこのandroidのガバを探していきます。が、結論から言ってしまいますとこれは失敗でした。

この端末はゲーム機の専用UIのように(画像)ホームランチャーが簡易設定とメディア再生のみに特化しています。搭載アプリは3つで、WPS office、kodi 16.1、VLCです。

まず純正ファイラー(このランチャーも兼ねている)や、設定の項目からアプリをインストールできないかと考えましたが、純正ファイラー兼ランチャーがうまくパッケージインストーラーとつながっておらず、純正アプリからのインストールは失敗してしまいます。

(このようにinstall appの項目はある)

WPS officeやVLCにも特にガバはなかったので、次はkodi経由で侵入できないかと考えました。この本体で一番まともなファイラーを搭載していたのがkodiだったのでね。

しばらくkodiを漁っていると、この端末の詳細スペックが発覚しました。

端末情報はモデル名がM29、コードネームはtonyでengの通り開発ビルドのようです。

ビルド時刻が2022/04/13ってだいぶ最近だなお前。2022年にandroid7.1.2かよ。

詳細なチップの性能などは以下の通り

チップはRK3229(cortex-A7*4core 1.5ghz Mali-400MP2)でメインメモリーは1gb積んでいるようですね。

で、このあともずっとkodiを漁っていたのですが、こいつ
「python2.7で自作したアドオンを導入できる」
ということに気づきました!このアドオンからパッケージマネージャーをどうにか呼び出せば良いんじゃね!?うおおおおお!!!

となったのもつかの間。kimi k3に作らせたアドオンは何故か入れることができず、この計画は水の泡に。

どーうしようかなあと思っていたところ、AIに「分解できますか?」と聞かれたので分解してみました。

あーhynixのRAMにbiwinのemmcかあ〜なんてことを考えていたらAIが

「あーこれ有名なTVBOX基板だね。MP029ってやつ。それが型番だよ。それarmbian入るしめっちゃいじり倒されているからねー。ハードの設計上理論上はブリック不可能だし。」(要約)

って言い出してたまげたなあ。

以降、アプローチ2に移ります。

アプローチ2

armbianが入ることがわかったのでここからはそのガイドに従ってインストールを進めていきます!
ここを参考にしました

CSC Armbian for RK322x TV box boards
DISCLAIMERS (PLEASE READ): Everything you can find in this thread (binaries, texts, code snippets, etc…) are provided …

手順はすべてここに乗っているので割愛しますが、かんたんに書くと

  • 有志の開発したmultitoolというものを活用してフルバックアップを取得する(常にsdカードが起動優先順位で最上位になる設計なので焼いたSDを入れるだけのお手軽起動)
  • emmcに指定のイメージをインストールする
  • emmcから起動し、rootパスワードを決め、sudo armbian-configsudo rk322x-configでセットアップする。

以上です!

この際に詰まった点も書いておきます。

  • armbian純正フラッシャーを用いてsdカードに焼いたイメージはなぜか起動不可能だったのでemmcに焼いた。
  • localeをja-jpにすると日本語が文字化けするのでデバッグが一時的に大変になる。そのため英語ロケールでセットアップすべし
  • 5v2a対応の充電器がなかったためOTGポート(usb2)からA to Aケーブルで5v2.4Aを送り込んでやったものの、片方のポートがふさがって面倒なので必ず5v2aのアダプタを用意すること。
    (俺の個体には無線、有線LANがついていないのでインターネットに接続するときにハブにusb to RJ45を刺したがハブ経由だと電力が足りなくて使用不可能だったため。RJ45アダプターを使用する場合は独立したポートもしくはセルフパワーハブを用意しよう)

そしていよいよ、ローカルLLMをぶん回します。

llama.cppを自分でビルドするのは、このマシンにとってはなかなかの苦行だと判断したのでプリビルド済みバイナリを探したところ、これが見つかったので利用させていただくことに。(armv7lという化石なので古いのに特化したビルドでないと動作しないため。)なお、1年以上前のllama.cppが使用されているため最近のllmはアーキテクチャ不適合で動作せず。そのためqwen2.5 0.5b Q3_K_Mを動かしました。

使用したプリビルド済みバイナリはこちら。

そうして動作する様子がこちらになります!!!!!!!!!うおおおおおお!!!!!!!

1tok/sくらいの速度はでています!!!!思ったより速い!!!!!!!!!

Linuxが入るということは思ったより何でもできるぞこいつ。エロいな(確信)。
やっぱこういう制限された低スペックハードウェアからしか得られない栄養ってありますよね!!!!!
やっぱこういうのが一番楽しいんですよ。

それでは!次回をお楽しみに!!

コメント

タイトルとURLをコピーしました