| ハードウェア: • そのままの iMac G3 Rev B(1998年10月)。233 MHz PowerPC 750、32 MB RAM、Mac OS 8.5。アップグレードなし。 • モデル: Andrej Karpathy の 260K TinyStories(Llama 2 アーキテクチャ)。~1 MB のチェックポイント。 ツールチェーン: • Retro68(クラシック Mac OS 用の GCC → PEF バイナリ)を使って Mac mini からクロスコンパイル • エンディアンを入れ替えたモデル+トークナイザ(little-endian から big-endian へ)を PowerPC 用に使用 • ファイル転送は FTP で Ethernet 経由に iMac へ 課題: • Mac OS 8.5 はデフォルトでアプリにごく小さなメモリ・パーティションを割り当てる。十分なヒープを確保するために、Mac Memory Manager から MaxApplZone() + NewPtr() を使う必要があった • このハードウェアでは RetroConsole がクラッシュするため、出力はすべて SimpleText で開くテキストファイルに書き込む • 元の llama2.c の重みのレイアウトは n_kv_heads == n_heads を前提としている。260K モデルは grouped-query attention(kv_heads=4, heads=8)を使っており、wk と wv の後ろにあるすべてのポインタがずれて NaN が出た。wk/wv のサイズ指定に n_kv_heads * head_size を使うことで修正した • 32 MB で malloc が失敗しないように、KV キャッシュと実行状態のための静的バッファを用意 prompt.txt からプロンプトを読み取り、BPE でトークナイズして推論を実行し、継続部分を output.txt に書き出します。 もちろん出力は非常に短いですが、これは間違いなく楽しい実験/デモを意図したものです! リポジトリのリンクはこちら: https://github.com/maddiedreese/imac-llm [リンク] [コメント] |
1998年製のiMac G3(32MB RAM)上で、技術的にローカルでLLMを動かせた
Reddit r/LocalLLaMA / 2026/4/6
💬 オピニオンDeveloper Stack & InfrastructureSignals & Early TrendsTools & Practical Usage
要点
- Redditの投稿では、改造なしの1998年製iMac G3(233 MHz、PowerPC 750)上で、Mac OS 8.5を使って32 MBのRAMだけでLLMをローカル実行できたことが報告されています。
- 実装では、Andrej Karpathyの「260K TinyStories」(約1 MBのチェックポイント)を、Llama 2アーキテクチャに基づいて利用しており、プロンプトはprompt.txtから読み取り、生成された継続文はoutput.txtに書き込みます。
- 旧来のClassic Mac OSの制約のため、著者はRetro68のクロスコンパイル(PEFバイナリ)を用い、PowerPC向けにモデル/トークナイザのエンディアンを修正し、アプリのヒープを拡大するためにMacのメモリ割り当てを調整しています。
- 小さなターゲット用ハードウェアで発生した複数の技術的ブロッカーが解決されています。具体的には、クラッシュしやすいRetroConsoleの出力を無効化すること、n_kv_headsとn_headsの関係によるグループクエリ注意(grouped-query attention)のテンソルサイズを正しくしてNaNを防ぐこと、そしてmallocを避けるためにKVキャッシュと実行状態に静的バッファを使うことです。
- この取り組みは、非常に短い出力での“楽しいデモ”として紹介されており、他の人が試せるようにコードはGitHubリポジトリで公開されています。



