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リポジトリで公開されています。
I technically got an LLM running locally on a 1998 iMac G3 with 32 MB of RAM

ハードウェア:

• そのままの 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

submitted by /u/maddiedreese
[リンク] [コメント]

1998年製のiMac G3(32MB RAM)上で、技術的にローカルでLLMを動かせた | AI Navigate