オンデバイスAI · 読了8分

言語モデルがスマホに収まる仕組み

ローカルAIアプリは驚くほどのストレージを要求しますが、その理由は無駄な肥大化ではありません。 そのギガバイトがどこへ消えるのかがわかると、新しいスマホでモデルが速く、古いスマホで遅い理由も見えてきます。 そして、ファイル名の Q3_K_S が実際に何を伝えているのかも。

モデルは膨大な数字の山

言語モデルとは、学習されたパラメーター、つまり重みの集まりです。 ひとつひとつは数字で、それが何十億個もあります。 モデル名の「2B」は、およそ20億個のパラメーターという意味です。

完全な精度で保存すると、重み1つにつき4バイトかかります。 20億個の重みが1つ4バイトなら、およそ8 GB。しかもこれは 小さい部類の モデルでの話です。問題を一行で言えばこうなります。 数字の数が多く、そのひとつひとつが精密に保存されているから、 ファイルが大きいのです。

量子化:数字あたりのビットを減らす

量子化は、重み1つをより少ないビット数で保存します。 1つあたり32ビットの代わりに、8ビット、4ビット、3ビットを使います。 重みのブロックごとにスケーリング係数を持たせて、近似が元の値から離れすぎないようにします。

サイズの削減は、おおむねこれに比例します。

これはJPEGと同じ、非可逆の圧縮です。やりすぎれば、粗が見えてきます。 言語モデルの場合、それは曖昧な答え、繰り返し、 あるいは質問からの逸脱として現れます。

量子化はモデルを一様に頭の悪いものにするわけではありません。 精度を落とすだけで、その粗さは最も難しい入力から先に現れます。

ファイル名を読み解く

たとえば Q4_K_MQ3_K_S といった名前は、バージョン番号ではなく レシピです。

つまり Q3_K_S は、小サイズの3ビットk-quantです。圧縮は強く、 品質の最後の数パーセントより端末に収まることが重要な場面で 選ばれます。

GGUF:入れ物

GGUFは、量子化された重みと、ランタイムが必要とするメタデータをまとめて収めるファイル形式です。 メタデータとは、トークナイザー、アーキテクチャ、プロンプトテンプレートなどです。 ファイルは1つだけで、設定ファイルの入ったディレクトリは要りません。

スマホで意味を持つのは、GGUFが メモリマップされることを前提に設計されているからです。 1.7 GBをRAMに読み込むのではなく、ランタイムはファイルを自分のアドレス空間にマップし、 OSが実際に使われている部分だけをページインします。 スマホの空きRAMより大きいモデルでも動くのはそのためです。 アプリを開いた直後の最初の答えが次より遅いのも同じ理由で、まだページを読み込んでいる最中だからです。

スマホが熱くなる理由

単語、つまりトークンを1つ生成するには、入力を何十億個のパラメーターに通します。 そして次のトークンで、それをもう一度やります。 100語の答えなら、100回の計算です。

これはCPUやニューラルアクセラレーターを使い続ける演算で、 スマホが熱の面で最も苦手とする種類の負荷です。 端末は熱くなると性能を落とすので、長く途切れなく生成を続けるほど遅くなります。 よくできたローカルアプリは、処理を隙間なく並べるのではなく、 チップが冷める余裕を持たせて間隔を空けます。

古いスマホが苦しむ理由

制約は3つあり、どれも簡単には越えられません。

ローカルAIアプリが、すべての端末に対応しようとせず動作要件を明記するのはこのためです。 ある水準を下回ると、体験が劣るのではなく、 そもそも使えません。

何と引き換えにするのか

スマホサイズの量子化モデルは、難しい推論では大きなクラウドモデルにかないません。 それでも範囲の決まった仕事、たとえばこの文でこの単語はどういう意味か、 この表現を訳してほしい、といった用途には十分です。 しかも、クラウドモデルには出せない3つの性質がついてきます。 接続がなくても動くこと、使うたびの費用がかからないこと、そしてテキストが端末から出ないことです。

これがオンデバイスAIの取引のすべてです。考えうる最大のモデルを諦める代わりに、 プライバシーとオフラインでの動作、そして従量課金のない環境が手に入ります。

ClickBookの場合

ClickBookは量子化されたGGUFモデルを同梱し、 端末上でllama.cpp経由で動かします。 iOSではアプリに組み込まれているので、ダウンロードは必要ありません。 ローカルAI電子書籍リーダーについて読む。 または ClickBookの仕組みを見る.