HN 日本語サマリー

← 一覧へ戻る
プログラミング

Show HN: ブートセクターに存在する言語モデル

Show HN: A language model that lives in a boot sector (github.com)

15 pointsby kerlenton0 コメント

要約

このプロジェクトは、512バイトのブートセクターに収まる言語モデル(bootgpt)を作成したものです。MBR(マスターブートレコード)に推論エンジンを、それに続くセクターに重み、語彙、文字列を格納しています。この小さな文字レベルのニューラルネットワークは、Linuxのdmesg(カーネルメッセージ)を生成するように訓練されており、非実在ハードウェアのブートログを無限に生成します。

全文翻訳

すべてのアイデアは、人々が512バイトでチェスやBASICゲーム、さらにはCコンパイラさえも書いていたブートセクターデモシーンから来ました。プログラムの代わりにニューラルネットワークを使って何ができるか疑問に思い、存在しないハードウェアのブートログを生成することは、試すのに楽しいことでした。

完全な推論エンジンはMBRの510バイトで、重み、語彙、文字列はMBRに続くセクターに格納されています。小さな文字レベルのニューラルネットワークは、マシンによって生成されたdmesgで訓練されたため、マシンは無限にLinuxのブートメッセージを生成します。

train.pyは、asmコードとまったく同じ整数演算操作を実行するため、QEMUによって生成されたものと文字通り同一の出力を生成します。差分分析により、私のお気に入りのバグが明らかになりました。先頭の文字はシミュレータによって生成されたものと一致しましたが、その後出力は分岐しました。QEMUのデバッグポートを介して隠れ層を取得し、ニューロンの値とシミュレータの値を1つずつ比較しました。最初のニューロンの値だけが正しかったです。活性化にはidivが含まれ、idivはその剰余をedxに格納します。バイステーブルへのポインタがedxに格納されていたため、最初のニューロンは正しくバイアスされ、後続のニューロンはガベージを使用していました。現在、バイアスのアドレスはループカウンターから決定され、除算を生き延びるポインタは必要ありません。もう1つのバグは、最初の実行前にコードを見ただけで見つかりました。BIOSの印刷ルーチンはbxをゼロにしますが、bxには予測された文字番号が含まれています。これは、印刷を囲むbxのプッシュとポップを説明しています。

sectorllmは私のプロジェクトに最も似ており、実際の5層llama2を注意機構付きでわずか1.2Kのアセンブリコードで実行します。これは逆方向のトレードオフであり、私のエンジンは1つのセクターに収まる必要があるため、私のネットワークはドリーミングdmesgのためにint8演算の隠れ層が1つしかないです。