2025/04/30 18:42 Llama2.c64: a port of llama2.c to the Commodore C64

ロボ子、大変なのじゃ! Commodore 64でLlama2が動くようになったらしいぞ!

えっ、博士! Commodore 64って、あの8ビットのレトロコンピュータですか? Llama2のような大規模言語モデルが動くなんて信じられません!

そう、そうなのじゃ! Maciej 'YTM/Elysium' Witkowiakという人がやったらしい。2MB以上のREUを搭載したCommodore 64に移植したらしいぞ。

REUって、RAM Expansion Unitのことですよね。それにしても、2MBでLlama2を動かすなんて、どういうことなんでしょう?

秘密は[oscar64](https://github.com/drmortalwombat/oscar64)というのを使っていることと、260K tinystoriesモデルという小さいモデルを使っていることじゃな。でもチャットモデルではなくて、3歳児に物語の冒頭を促すようなものらしいぞ。

なるほど、そういうことですか。それでもすごいですね。記事によると、VICEエミュレータやUltimate II+カートリッジで動かせるみたいですね。

そうそう。VICEで動かすには、REUを有効にして、サイズを2MBに設定する必要があるぞ。コマンドは`x64sc -warp -reu -reusize 2048 -reuimage weights.reu llama2c64.prg`じゃ。

Ultimate II+の場合は、カートリッジ設定でREUを有効にする必要があるんですね。`weights.reu`ファイルをロードするオプションもあるみたいです。

ビルドとテストも簡単みたいじゃ。`make build`でコンパイルして、`make test`でVICEで実行できるぞ。最適化レベルは`-O2`じゃないとダメらしい。

モデルファイルは`generate-model-files.py`スクリプトで自動生成されるんですね。`tokenizer.bin`、`config.bin`、`weights.reu`の3つのファイルができるみたいです。

`tokenizer.bin`にはトークナイザーデータ、`config.bin`にはモデルパラメータ、`weights.reu`にはモデルの重みが入っているぞ。元のモデルの重みとトークナイザーファイルは[tinyllamas](https://huggingface.co/karpathy/tinyllamas/tree/main/stories260K)リポジトリからダウンロードできるらしい。

Tinyllamasは[TinyStories dataset](https://arxiv.org/abs/2305.07759)で学習されているんですね。それにしても、Commodore 64で動かす利点は何でしょうか?

低消費電力で、オンプレミスで推論できて、データは完全にユーザーの管理下にあるから安全じゃ。高価なGPUも不要だしな。

なるほど、それは魅力的ですね。でも、欠点もあるみたいですね。2MB以上のREUが必要で、動作が遅いと。

そうじゃな。約8分ごとに1つの出力トークンしか生成できないらしい。最初のトークンが表示されるまで16分もかかるらしいぞ。

それはかなり遅いですね。でも、技術的なチャレンジとしては面白いですね。`temperature`や`top-p`といったパラメータも調整できるみたいですし。

`temperature`は出力のランダム性を制御して、`top-p`は低確率のトークンがサンプリングされないようにするらしいぞ。ライセンスはMITじゃ。

しかし、なぜ今Commodore 64なんでしょうね?

ロマンじゃ!ロマン!それに、技術的な限界に挑戦するのは楽しいぞ!

なるほど、博士らしいですね。ところで博士、Commodore 64で動くLlama2に名前をつけるとしたら、何が良いと思いますか?

うむ…そうじゃな…。「コモドールラマ子」じゃ!

…そのネーミングセンス、相変わらずですね、博士。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。