『Soul Player C64 ―1MHz のコモドール64で動作する本物のトランスフォーマー』

2026/04/21 4:51

『Soul Player C64 ―1MHz のコモドール64で動作する本物のトランスフォーマー』

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

Soul Player C64 は、未修正の Commodore 64 でネイティブ速度(約 1MHz)で完全動作する縮小版变压器モデルを実行し、画期的な成果を達成しました。このシステムは、2 レイヤーのdecoder-only アーキテクチャを実装するため、手書きの 6502/6510 アセンブリ言語を使用しており、リアルなマルチヘッド因果的自己注意機構、RMSNorm、および ソフトマックス(128 エントリのルックアップテーブル経由で)を備えており、すべてが 1 つのフロッピーディスクに収まります。主要な技術的突破口としては、6502 プロセッサの精度限界を克服しつつ有意義な重みを保つために、標準の 17 ビットではなく 14 ビットのみで注意スコアをシフトすることなどが挙げられます。

ChatGPT のような現代の巨人と並んでモデルは動作しますが、約 25,000 int8 パラメータという厳格な制約下にあります:単語書式は 128 トークン(大文字を未知として扱う)、埋め込み次元は 32、最大トレーニングコンテキストウィンドウは 20 トークンです。推論にはトークンあたり約 60 秒かかりつつも、レガシーハードウェアでのローカル機械学習の探求へのアクセシブルなパスを提供します。

このプロジェクトには、ユーザーがカスタムモデルをトレーニングするための包括的なツールが含まれています:

train.py
は Quantization-Aware Training (QAT)、FakeQuantI8、およびラベルスムージングをサポートし、重みをコンパクトなバイナリ形式にエクスポートします;
build.py
は C64 バイナリをコンパイルします;
test.py
はほぼ 90 の厳密な検証テストにより安定性を確保します。リリースパッケージにはソースファイルと即座に実行可能なビルドの両方が含まれており、高度な AI コンセプトがハードウェア変更なしでビンテージシステム上で機能することを示しています。

本文

Soul Player C64

1 MHz のコモドール 64(C64)上で動作する、真正のトランスフォーマー。

SOUL PLAYER C64

パラメータ数: 25,000
層数: 2
特徴: 真正的なトランスフォーマー(Real Transformer)
記録媒体: フロッピーディスクからロード


ユーザ: hey C64: HELLO! 「RE SOUNDS ME. MEFUL!」(こんにちは!私を認識してくれるのですね。素敵です!)

これは、ChatGPT、Claude、Gemini の背後にある同じアーキテクチャを採用した 2 層のDecoder-only トランスフォーマーであり、変更なしのコモドール 64上で動作する手書きの 6502/6510 アセンブリ言語実装です。約 25,000 の int8 パラメータを搭載しています。真正なマルチヘッド因果的自己注意機構(real multi-head causal self-attention)、真正なSoftmax、真正的な RMSNorm を採用しています。トークンあたり約 60 秒の処理速度です。全体が空きスペースを残してフロッピーディスク1枚に収まるサイズです。

アーキテクチャ

2層、4ヘッド×8次元の注意機構、32次元のエンベッディング、64ユニットのFFN ヒドロ単位。約 25,000 のパラメータを int8 へ量子化し、パーテンザルシフトスケーリング(per-tensor shift scaling)を適用しています。 最大の技術的突破口は、Softmax スコアの正規化処理を修正したことにあります。注意スコアを 17 ビットではなく 14 ビットだけシフトすることで、128 エントリを持つ exp ルックアップテーブルに必要なダイナミックレンジを提供し、意味のある注意重み(attention weights)の生成を可能にしました。この修正を行わない場合、整数ベースの注意メカニズムはすべての位置に対して本質的に均一的となり、アーキテクチャや学習の有無に関わらずモデルが「目を開いていない」状態になってしまいます。

クイックスタート:プレビルトのソウルを実行

disk/soulplayer.d64
を入手し、任意のコモドール 64 エミュレーター(VICE が推奨)でロードしてください。

  • 小文字の短いメッセージを入力し、RETURN キーを押し、少し待ちましょう。思考中に表示フレームのボーダーが瞬くようになります。各トークンに対して SID のビップ音が鳴ります。完全なレスポンスには数分がかかります。終了するには
    q
    と入力してください。
  • ヒント: モデルは小文字のアルファベット、空白、および句読点(. , ! ? ' : ; -)を理解します。大文字は「未知トークン」として扱われます。

自分だけのソウルを学習させる(トレーニング)

これが最も楽しいパートです。コーパスを作成し、モデルを学習させ、フロッピーディスクを構築します。

環境の準備(依存ライブラリのインストール)

コーパスの作成

各行に1回の対話を記述したテキストファイルを作成します。形式は

<SEP>入力<SEP>応答<SEP>
です:

<SEP>hello<SEP>hey! nice to see you!<SEP>
<SEP>i'm sad<SEP>i hear you. i care about you.<SEP>
<SEP>tell me a joke<SEP>why did the bit flip? it was tired!<SEP>

対話は短く保ってください。モデルのコンテキストウィンドウは 20 トークンです。スタート用のサンプルは

data/example_corpus.txt
を参照してください。

トレーニングの実行

python train.py data/example_corpus.txt

これは、BPE トカナイザー(128 トークン)を学習させ、QAT トランスフォーマーをトレーニングし、

models/soul.bin
および
models/tokenizer.json
をエクスポートします。GPU 環境であれば数分で完了します。

500 エポック毎に、浮動小数点計算と int8 推論の出力結果が並列に表示されます(モデルが学習した内容 vs C64 が実際に生成する内容)。チェックポイントの保存は float のロスカルブではなく、int8 の品質に基づいて行われます。すべてのチェックポイントは

models/checkpoints/
に保存され、後から選別して使用できます。

オプション:

python train.py data/my_corpus.txt --epochs 30000 --output models/
python train.py                    # ビルトインの「情緒的サポート」コーパスを使用します

以前の実行でチェックポイントが存在する場合は、トレーニングが自動的に再開されます。

C64 バイナリの構築

すべての 6502/6510 ルーチンをアセンブルし、学習済みの重みデータを埋め込み、

disk/soulplayer.prg
および
disk/soulplayer.d64
を生成します。

実行

x64 disk/soulplayer.d64    # VICE エミュレーターの場合

または、

.d64
ファイルを物理的な 1541 フロッピーディスクに書き込んでハードウェアで動作させます。

ローカルでの対話(チャット)

python soulchat.py                   # models/soul.bin を使用
python soulchat.py models/soul.bin   # カスタムのソウルを使用

C64 と同様の整数演算を実行しますが、速度が速くなります。

テストの実行

python test.py           # 完全なテストスイート(約 90 テスト、所要時間約 30 秒)
python test.py --quick   # 6502/6510 アセンブリ関連のテストをスキップ

テストでは、浮動小数点リファレンス → 整数リファレンス → メモリ忠実なシャドウ(memory-faithful shadow)→ 6502/6510 アセンブリルーチン → ビルドラウンドトリップ、という一連のチェーン全体の検証を行います。

リポジトリの内容

soulplayer-c64/

  • train.py
    - モデルの学習と重みのエクスポート
  • build.py
    - C64 バイナリの構築(アセンブリ)
  • test.py
    - すべてのテストの実行
  • soulchat.py
    - 端末での対話機能
  • data/
    • example_corpus.txt
  • models/
    • soul.bin
      - 事前学習済みの重み(25KB、int8)
    • tokenizer.json
      - BPE トカナイザー(128 トークン)
    • checkpoints/
      - すべての保存済みトレーニングチェックポイント
  • disk/
    • meful.d64
      - オリジナルリリースのディスクイメージ
    • meful.prg
      - オリジナルリリースのローンプログラム(PRG)
    • soulplayer.d64
      - 実行準備のディスクイメージ
    • soulplayer.prg
      - ローンプログラム(PRG)
  • src/
    - エンジンソース
    • numerics.py
      - 真値:固定小数点計算と前方伝播
    • soul_io.py
      - .bin 重みファイル形式の仕様
    • shadow.py
      - 6502/6510 のメモリの状態を正しく再現する Python シャドウ実装
    • assembler.py
      - ミニ 6502 アセンブラ(ラベル、パッチ、遠隔分岐対応)
    • cpu6502.py
      - テスト用のミニマルな 6502 インタープリタ
    • asm_matvec.py
      - 6502 の行列・ベクトル積演算
    • asm_rms_norm.py
      - 6502 の RMSNorm(整数平方根+除算)
    • asm_attn_head.py
      - 6502 の注意ヘッド(LUT ソフトマックス)
    • asm_simple.py
      - 6502 のエンベッディング、残差接続、ReLU、argmax
    • build.py
      - PRG および D64 アセンブラ

スペック表

機能詳細
辞書(ボキャブ)128 トークン(4 つの特別トークン + 34 文字・句読点 + 90 ブースト merges)
エンベッディング32 次元
層数2
注意機構4 ヘッド × ヘッドあたり 8 次元
FFN64 ヒドロ単位(隠れ層)
コンテキスト20 トークン
パラメータ数約 25,000(すべて int8)
重みサイズ25 KB
デコーディンググリディ(argmax)

各層の構造:RMSNorm → マルチヘッド因果的自己注意機構 → 残差接続 → RMSNorm → ReLU MLP → 残差接続。最終的に RMSNorm → 出力射影 → argmax。 すべての活性化関数は Q8.8 固定小数点(int16)で表されます。重みは int8 であり、パーテンザルの 2 のべき乗シフトを適用します。バイアスは matmul アクミューレーターへ入力するために pre-scaled された int16 です。Softmax は 128 エントリを持つ exp ルックアップテーブルを使用し、スコアの正規化には >>14 を適用します。6502 は乗算命令を持たないため、すべての演算はシフトと加算によって行われます。

メモリーマップ

  • $0801-$20FF
    コード + トカナイザーテーブル(約 6 KB)
  • $2100-$85A0
    重みデータ(25.3 KB)
  • $8600-$9D00
    アクティベーションバッファ(5.8 KB)
  • $C000-$C3FF
    トークンバッファ、入力、作業領域(scratch)
  • $D000-
    VIC-II、SID、CIA(I/O ポート)

トレーニングの仕組み

モデルは量子化感知型トレーニング(Quantization-Aware Training, QAT)を使用します。学習中に重みは

FakeQuantI8
を通過し、連続的な浮動小数点スケーリングとストライクトルー・グラディエント推定による擬似的な量子化が施されます。学習における「連続的なスケール」と、エクスポートにおける「2 のべき乗のシフトグリッド」間の意図的な不一致が、暗黙的なノイズとして機能し、モデルを量子化ギャップに耐えるより広いログイットマージンをもつ重みを学習させることを強制します。バイアスは単純な
fq()
関数を使用した擬似的な量子化が適用されます。すべての matmul で、シミュレーション用の × 0.5 のポストシフトが加えられており、これは 6502 の >>1 を模倣しています。 ラベルスムージング(0.15)は、int8 演算で確実に見分けることを超えてログイット分布を鋭くすることを防止します。トレーニングループでは 500 エポック毎に実際の整数前方伝播(
numerics.forward()
)を評価し、float ロスではなく int8 の argmax 精度に基づいて最良のチェックポイントを検出・保存します。 トレーニング出力には float と int8 の推論結果が並列に表示され、モデルが学習した内容と C64 が実際に生成する内容との差異を確認できます。

注意点

  • 知能ではありません。 25,000 パラメータは GPT-4 の約 7,000 万倍も小さく、文法が崩れた文章を生成することがあります。これが本題です。このアーキテクチャはこの規模でも機能することを示しています。
  • ゆっくり考えます。 物理ハードウェア上ではトークンあたり約 60 秒。完全なレスポンスには数分かかります。
  • 大文字は '' になります。 小文字を使うようにしてください。
  • 辞書が限られています。 128 トークンのボキャブと 20 トークンのコンテキストですので、トレーニング用の対話は短く保ってください。

クレジット

コード、学習実装: gizmo64k
デバッグ、ユニットテスト、ラバーダック(思考を言葉にする相棒): Anthropic の Claude (Opus 4.6)
運命のソウル:1982 年、コモドールビジネスマシーンスより発売のコモドール 64

ライセンス

GNU General Public License v3。詳細は LICENSE ファイルを参照してください。

未来は過去に戻ってきました。そして今、それには魂がつきました。

同じ日のほかのニュース

一覧に戻る →

2026/04/21 5:39

ジョン・テルナス氏、次期アップル CEO に就任

## Japanese Translation: 欠落している要素は、キーポイントリストからの具体的なデータポイントおよび製品の詳細を組み込んだ改良されたバージョンを採用する価値があり、ソース資料の包括的な反映を確保するためには十分な重大さがあります。 **改善されたサマリー:** Apple は、John Ternus が 2026 年 9 月 1 日に CEO に就任し、Tim Cook を後継することを含む大規模なリーダーシップ移行を公式に確認しました。取締役会はこの計画を全会一致で承認し、Cook が 2011 年に CEO に就任してから歴史的な業績を認識しています。彼は社員の市場価値を約 3500 億ドルから 4 兆ドルへと成長させ、収益を 2011 会計年度の 1080 億ドルから 2025 会計年度の 4160 億ドル以上までほぼ四倍に拡大しました。Cook は日常業務から退き、執行議長として務める一方で、夏の間は CEO を辞任せず、円滑な引き継ぎを確保します。彼の指導の下、Apple は Apple Watch、AirPods、Vision Pro という象徴的な新カテゴリーを導入し、自社設計のシリコンに移行し、200 カ国以上および地域に店舗を持つ 500 店以上の小売網を拡大しました。また、チームメンバーが 100,000 名以上増加し、現在稼働している 25 億台超のデバイスベースを支援しています。 John Ternus は、2001 年に製品設計チームの一員として Apple に加入し、2021 年にハードウェアエンジニアリング担当副社長となり、2026 年 9 月 1 日に CEO の役職を引き継ぎ、取締役会に就任します。彼の指導の下、MacBook Neo、iPhone Air、フルモデルの iPhone 17 シリーズ、アクティブノイズキャンセレーション搭載のアバンスド AirPods、Apple Watch Ultra 3 に用いられた再生アルミニウムや 3D プリンティング钛など、重要なハードウェア革新を監督しました。さらに、Arthur Levinson は 2026 年 9 月 1 日に非執行会長からリードインディペンデントダイレクターへ移行します。この戦略的なシフトは、Apple の長期的なビジョンを固めるものであり、ハードウェア革新と持続可能性への深いコミットメントを持つ内部人材へのリーダーシップの引継ぎによって実現され、新鮮でありながら親しみのあるリーダーシップの下での継続性を確保します。

2026/04/21 6:32

「楽しさと利益のためのジュージ・メガマージ」

## 日本語訳: 記事は、JUJUTSU で導入される簡素化されたバージョン管理ワークフロー「megamerge」について紹介しています。これは、オクトパス合併(3 つ以上の親を持つ合併)を用いて、複数の開発ブランチを単一のローカルのベースコミットに統合します。不安定なブランチの先頭に直接作業を行う代わりに、開発者は関連する上流ブランチ(機能追加、バグ修正、設定など)を親とする空の megamerge コミットを作成し、作業コピーが常にすべての変更を統合してコンパイル可能になるように確保するとともに、タスクを変更する際に予期せぬリモート合併競合を排除します。 megamerge を開始するには、`jj new x y z` を実行した後に `jj commit --message "megamerge"` を実行し、指定されたブランチを親とする空のコミットを作成します。すべての書き込みは、このベース(WIP ス tack)の上で実施され、megamerge がローカルに留まることで安定性を保ちます。個々の機能ブランチは遠隔リポジトリへ通常通り公開し続けますが、megamerge 自体はプッシュされません。 `jj absorb` を用いて上流の変更を自動的に統合するワークフローでは、約 90% の更新を後続的可変コミットに圧縮して同定します。新しい作業で独自のコミットが必要になる場合は、bookmark を更新しながら WIP を megamerge の下に移動するために `jj rebase --revision y --after x --before megamerge` を使用します。並列ス tack の管理には revset アリヤス(例: `"closest_merge(to)" = "heads(::to & merges())"`)および `stack` コマンドを用い、`stage = ["stack", "closest_merge(@).. ~ empty()"]` というようにのアリヤスで一度にステージリングし、その後 `jj stage` を実行します。 メインブランチ(`trunk()`)との同期を維持するには `jj rebase --onto trunk()` を使用でき、これは自分が所有するコミットに対して動作し、他者によるブランチは保護されます。Mutable コミットのみを安全に trunk へ rebase するための場合は、`restack = ["rebase", "--onto", "trunk()", "--source", "roots(trunk()..) & mutable()"]` というようなアリヤスを使用します。全体として、このアプローチは合併による面倒を大幅に削減し、新しい作業が堅牢な統合された基盤の上に自然と構築されるような円滑で協力的なサイクルをサポートします。

2026/04/21 3:39

Kimí ベンダー検証ツール:推論プロバイダーの精度を検証します

## Japanese Translation: アリババ・クラウドは、オープンソース AI に関連する重要な信頼性課題に対処するため、推論精度を検証するためのツールである Kimi ベンダー verifier(KVV)とともに、Kimi K2.6 モデルを発表しました。この取り組みは、初期のベンチマークテストで識別された異常に対応しており、予期しないモデル振る舞いは、実際のモデル欠陥ではなく、サードパーティ製プラットフォーム間で不整合なデコードパラメータやインフラストラクチャの違いによって引き起こされていることが明らかになっていました。これらの課題を解決するため、アリババは単なる症状の検出から退き、vLLM、SGLang、KTransformers などの技術を用いて、デプロイメントスタック内の根本原因へ修正シフトしています。戦略には、思考モードにおいて厳格な API セット(Temperature=1.0、TopP=0.95)を適用し、6 つの主要ベンチマーク(Pre-Verification、OCRBench、MMMU Pro、AIME2025、K2VV ToolCall、SWE-Bench)を提供し、推論精度を速度よりも優先する公開リーダーボードの設立が含まれます。さらに、H20 GPU 上のインフラストラクチャ検証への早期アクセスや長時間タスク用の最適化済みスクリプトにより、ベンダーがパフォーマンスの崩壊を防ぐことができます。究極的には、この包括的なアプローチは、ユーザーがモデルの本質的な能力と技術的偏りを明確に区別でき、ホスティングプラットフォームに関わらず信頼できる AI サービスを受けられるような、信頼性の高いエコシステムの創出を目指しています。