bootgpt、512バイトのMBRから11.5KBの言語モデルを起動

スペック

コンテキスト長8文字
ライセンスMIT license
重みの公開後続の23セクターに格納
配布形式・量子化int8、power-of-two scales

メモリの目安はパラメータ数×0.6バイトの概算で、実際はコンテキスト長と実装で変わります

kerlentonは、PCのブートセクターから起動して動く小型ニューラル言語モデル「bootgpt」をGitHubのkerlenton/bootgptで公開しました。512バイトのMBRが後続23セクターから11.5 KBのint8モデルを読み込み、386上の16ビットreal modeで推論します。

何が新しいか

bootgptはOSもCランタイムも使わずに動作します。MBRには手書きアセンブリのコードだけを置き、文字列・重み・語彙表はすべて後続のデータセクターに格納します。作者は、推論とBIOS処理を510バイトに収めるにはこの構成しかなかったと説明しています。

モデルは汎用のストーリーテラーではなく、起動したマシンのLinuxブートログを「幻覚」することだけに特化した文字単位のネットワークです。タイムスタンプ、PCI BAR、ACPIイベントなど、存在しないハードウェアのログを生成します。キーを押すとマシンが再起動します。

原文は近い先行例としてsectorllmを挙げています。sectorllmは約1.2 KBのreal modeアセンブリから5層・attention付きのllama2 transformer(Karpathyのstories260Kモデル)を起動します。bootgptは逆の極端として、エンジン全体を510バイトのMBR自体に収めています。

仕様と構成

項目 内容
MBR 512バイト(コード部510バイト)
モデルサイズ 11.5 KB(後続23セクター)
実行モード 16ビット real mode、386
モデル構造 文字埋め込み・1隠れ層・softmax
コンテキスト長 8文字
量子化 int8、power-of-two scales
学習コーパス 偽dmesg 3 MB
  • corpus_gen.py:3 MBの偽dmesgを生成します。1ブートセッションにつきカーネルバージョンとディスクを1つに固定しており、実際のブートログの反復が小さなモデルをまともに見せると説明しています。
  • train.py:モデルを学習し、すべてをpower-of-two scalesのint8に量子化します。これによりブートセクターはimulと1回のidivで順伝播全体を処理できます。asmが実行する整数演算をLCGサンプラーも含めてシミュレーションし、Python出力とブートセクター出力は文字単位で一致するとしています。
  • boot.asm:ランタイム全体です。int 13hで重みを読み込み、int 10hで表示し、softclip活性化をcdq/idivで実装し、タイマー由来のノイズでargmaxサンプリングします。
  • record.py:ヘッドレスQEMUからモニターソケット経由でデモgifを記録します。

試し方・要件

nasm、qemu、Python 3が必要です。

brew install nasm
python3 -m venv .venv && .venv/bin/pip install numpy
./build.sh
./run.sh

生成されるdisk.imgは通常のブートイメージで、USBメモリへddすればBIOS搭載PCから起動できます。読み込むのは自身のセクターだけです。ライセンスはMITです。

反応

Hacker NewsのShow HN投稿は81ポイント・3コメント、GitHubリポジトリはスター30、コミット3です。

この記事の固有名詞

コメント (0)

まだコメントはありません。

コメントを書く

2000文字以内