1998年のiMac G3と32MB RAMでローカルLLMを動かしたLocalLLaMA実験

今週の LocalLLaMA投稿 では、実装メモを読むまで冗談のように見える実験が共有された。stock 1998 iMac G3 with 32 MB of RAM で local language model を動かしたというものだ。プロジェクトは Karpathy の llama2.c 系アプローチを classic Mac OS に移植し、ハードウェア無改造の Bondi Blue iMac を対象にしている。

この離れ業を可能にしているのは、極端に小さいモデル選択だ。最新の巨大checkpointを無理に押し込むのではなく、作者は 260K-parameter の TinyStories model と約1 MB の checkpoint を使い、それを完全にローカルメモリ内で動かしている。README によれば、アプリは prompt.txt から入力を読み、512-token BPE vocabulary で tokenize し、transformer の forward pass を実行し、その続きを output.txt に書き出す。233 MHz の PowerPC G3 では、32 generated tokens が1秒未満で生成されるという。

本当に面白いのは珍しい見出しより実装の細部だ。PowerPC CPU は big-endian なので、モデルと tokenizer ファイルは事前に byte-swap しなければならない。Mac OS 8.5 はアプリごとの既定 memory partition が非常に小さいため、作者は MaxApplZone() で heap を広げ、NewPtr() で直接メモリを確保し、malloc 失敗を避けるため static buffers に依存している。さらに sequence length を 512 から 32 に切り詰め、grouped-query attention の weight layout bug も修正しなければならなかった。

この実験が示すもの

これは実用的な throughput や現代的な reasoning quality を競う話ではない。むしろ、ソフトウェアスタックを最小限まで削ぎ落とせば small language model がどれほど広いハードウェアへ持ち運べるかを、非常に鮮やかに示している。リポジトリには Retro68 を使った cross-compilation、endian conversion、FTP 経由のファイル転送、そして usable console がない Mac OS 8.5 で debugging を text files に頼った経緯まで記録されている。

ハードウェアは 233 MHz PowerPC 750、32 MB RAM、Mac OS 8.5。

モデルは TinyStories 260K、Llama 2 architecture、約1 MB checkpoint。

最大の教訓は、tiny checkpoint と丁寧な systems work によって local inference の限界が想像以上に押し広げられることだ。

要するに、この投稿は単なる stunt ではなく小さな歴史の授業に近い。現在の製品市場を支配する巨大モデルとは別に、minimum viable LLM そのものは驚くほど小さい条件でも成立しうると示している。