WorldTUI 360Mモデル、ターミナルをシミュレートするよう訓練される
TL;DR
WorldTUIは、360MパラメータのQwen2.5-Coderモデルを微調整して、ターミナルエミュレータとして動作させます。各キーストロークがモデルに供給され、モデルは画面グリッドの更新を予測します。結果として得られるデモは完全にブラウザ内で動作し(208MBのint4モデル)、ファイルの作成、vim、tmuxの実行、さらにはスネークゲームまでプレイでき、コマンド間で単純な状態を記憶します。
モデルがターミナルをどのように表現するか
結論: ターミナルは文字のグリッドとしてエンコードされ、モデルは線形なトークンストリームではなく、行単位の差分操作を予測します。
- 入力は、画面サイズ、内容、カーソル位置を記述するスナップショットトークンブロックで始まります(例:
BOS SCREEN_START 32 96 …)。 - 各キーストロークは、
INPUT_START/INPUT_ENDトークンでラップされた生のバイト('l'、\r、ESC [ Dなど)として送信されます。 - モデルは、
OUTPUT_START/OUTPUT_END内で、ROW_0 17 'l'やCURSOR 0 18 1などの操作セットを出力し、どのセルを上書きするかと最終的なカーソル状態を示します。 - 特別な
WAITトークンは経過時間をエンコードし、スネークゲームのような自律的な更新を可能にします。 - 語彙は333トークンに削減されています:256のバイト値トークン、64の行識別子、およびいくつかの制御トークン(例:
COPY、WAIT)。このコンパクトな語彙により、モデルはブラウザに適したサイズに収まります。
行コピー操作による効率的な画面更新
結論: COPY操作を導入することで、スクロールや行操作のトークンコストを、行あたり数千から数トークンに削減します。
- ターミナルがスクロールするとき、新しい画面のすべての文字を出力する代わりに、モデルは
ROW_i COPY jコマンドを発行し、前の行を新しい位置にコピーします。 - これにより、典型的な3,000トークンの全画面再描画が、影響を受ける行あたり約3トークンに削減されます。
- 同じメカニズムで、画面のクリア、vimでの行の挿入/削除、manページの更新も処理されます。
トレーニングデータの生成
結論: 著者は、ランダム化された環境で実際のDockerシェルを記録し、キーストロークと画面の完全な整合を保証することで、336kの合成ターミナルセッション(約2Bトークン)を生成しました。
- ランダムなユーザー名、ホスト名、プロンプト、ターミナルサイズ。
- ペルソナ(開発者、システム管理者など)を反映したランダムなファイルシステムレイアウト。
- 重み付けされたアクティビティ選択(vim編集、Python REPL、tmuxなど)。
- コマンドを現実的に保つための状態追跡(例: 既存ファイルを開く)。
- 1.2%のタイプミス率を持つ人間らしいタイピング。
- セッションの35%はアプリケーションの途中から始まり、モデルに任意の状態から続行することを教えます。
最終データセットは、32×96、24×80、40×120の画面サイズにわたります。
微調整と自己修正
結論: DAggerスタイルの自己修正例を追加することで、メモリ一貫性が劇的に向上し、PresetBenchスコアが24/47から38/47(int4)に上昇しました。
- 最初の教師あり微調整の後、モデルを記録されたセッションで実行し、自身の間違いを収集しました。
- 各間違いについて、モデルの画面をグラウンドトゥルースに戻す修正デルタが構築され、トレーニング例として使用されました。
- 修正は、実際の画面にすでに現れたトークンのみを使用することが許可され、幻覚を防ぎます。
- サンプリングされたセッションの約3分の1で有用な修正が得られました。このプロセスは3ラウンド実行されました。
トレーニング(修正ラウンドを含む)は、RTX 4090で約75 GPU時間を消費しました。
ベンチマーク
結論: WorldTUIは、コマンド出力の正確さと単純なファイルメモリタスクの両方で、プロンプト付きのベースモデルを上回ります。
| モデル | ShellBench (106コマンド) | ファイル読み戻し (13) |
|---|---|---|
| Qwen2.5-Coder-0.5B (プロンプト付き) | 52 | 2 |
| Qwen3-0.6B (プロンプト付き) | 60 | 3 |
| WorldTUI | 80 | 9 |
最大の利得はメモリテストで、WorldTUIは9/13の読み戻しシナリオを正しく再現しますが、ベースモデルは2〜3です。
速度最適化
結論: 並列行デコードと投機的検証により、RTX 4090上で大きなフレームのレイテンシが6.7秒から0.87秒に短縮されます。
- 並列行: 各行はバッチ内で独立にデコードされ、KVキャッシュを共有するため、デコードコストは全行の合計(約3,000ステップ)ではなく、最長の行(約100ステップ)に等しくなります。
- 投機的デコード: 並列パスはすべての行のドラフトを生成します。同じモデルによる2回目の検証パスがドラフトをチェックし、最初の不一致を修正して、一貫性を維持します(例: 正しいvimウィンドウ配置)。
- Mac M4では、単一文字のレイテンシは約60msです。完全な
manページは、逐次では2.5秒かかりますが、並列ドラフトでは0.9秒です。
ブラウザ向けモデルサイズ削減
結論: 埋め込みテーブルを333トークンの語彙に削減し、int4量子化することで、モデルは208MBに縮小され、WebGPU推論が可能になります。
- 元のQwen2.5-Coder-0.5B: 494Mパラメータ、990MB。
- 未使用のトークン埋め込みを削除後: 約360Mパラメータ、716MB。
- Int4量子化: 208MBのダウンロードサイズ。
- 推論はカスタムWGSLシェーダーを介して完全にクライアントサイドで実行されます。アクティベーションは32ビット浮動小数点のままです。
蒸留実験
結論: レイヤーを削除すると、次のトークンの精度が高いままでもメモリ一貫性が損なわれ、メモリが特定のより深い表現に依存していることを示しています。
- レイヤー7だけを削除すると、トークン精度にはほとんど影響しませんでした(99.3% → 98.9%)が、正確なメモリ読み戻しは64/64から0/64に減少しました。
- レイヤー1、7、15、22を保持する16層の学生モデルは、メモリで教師と一致しました(64/64)が、ShellBenchのパフォーマンスを失いました(正しいコマンド数65対78)。
- このトレードオフのため、さらなる蒸留の試みは断念されました。
実証された機能
結論: WorldTUIは、インタラクティブな全画面アプリケーション(vim、tmux、スネーク)を実行し、セッション間で単純な状態を保持できますが、複雑なファイルシステム操作ではまだ幻覚を起こします。
- メモリ: 別々のtmuxペインで作成、編集、読み戻されたファイルは、ほとんどの場合正しく保持されます。
- Vim: モード切り替え(
Esc)、挿入、保存、終了をサポートします。 - Tmux: ペインの作成、ナビゲーション、環境変数の展開を処理します。
- Python REPL: 単純な式を受け入れます。軽微なタイプミスを許容します(
pythoonでPythonが起動します)。 - スネーク: 計算集約的であるにもかかわらず、スムーズに動作します。
制限事項
結論: モデルには実際のファイルシステムや外部ツールがなく、幻覚や時折のパス追跡エラーが発生します。
- Dockerコンテナ内ではインターネットアクセスがなく、
lynxなどのツールは機能しません。 - 複雑なファイル操作(例: 既存ファイルへの追記)は、しばしば誤った出力を生成します。
- ネストされたディレクトリのナビゲーションで、現在のパスを見失うことがあります。
- FirefoxのWebGPUパフォーマンスはChromeより約20倍遅く、原因は不明です。
コミュニティの反応(抜粋)
"WorldTUIは、*インテリジェントな出力を予測するモデルと、インテリジェンス自体の違いは何か?*という問いを探求する非常に良い方法です。" – OtherShrezzing
"とてもクールです。楽しいプロジェクトですね。優れた既存モデルの微調整を理解すれば、探求すべき広い分野があると感じます。" – oilkillsbirds
"試してみましたが、デモのGIFほどには動作しません。存在しないフォルダが既に存在すると言われ、
lsの後にはフォルダがありません。" – donperignon
"次のステップは、インターネットのふりをするモデルを訓練することです。(そのターミナルでlynxを実行して、画像なしで訓練/テストできます)" – amelius
"ファイルシステム用のツール呼び出しAPI、組み込みのbusybox、そして『busyboxがここで行うことを出力する』ための単一の出力トークンがあれば、小さなモデルでどれだけのことができるだろうかと思います。" – Lerc
要点
- WorldTUIは、適度な360Mパラメータのモデルが、完全に整合されたキーストロークと画面のデータで訓練された場合、一貫性のあるインタラクティブなターミナル世界を学習できることを証明しています。
- DAggerスタイルの例による自己修正は、永続的なメモリを改善する鍵です。
- 並列行デコードと投機的検証は、コンシューマーGPUとブラウザでほぼリアルタイムのレイテンシを達成するために不可欠です。
- 将来の研究では、よりリッチな状態表現(実際のファイルシステムAPI、ツール呼び出し、拡散ベースの画面更新)を探求し、幻覚を減らし、適用範囲を広げることができるでしょう。
試してみる: デモは https://simedw.com/projects/worldtui で利用可能です(208MBのダウンロード、Chrome/Edge推奨)。
Sources
関連
- プロジェクト
- Dispatch
- Dispatch
- Dispatch
- プロジェクト