ドキュメント

Core ML Snake:ライブ確率、ローカル推論

ターミナルデモは毎手で本物の Laya モデルを実行します。左パネルには盤面・スコア・Snake の長さ、右パネルには方向の確率・推定行き止まりリスク・餌への到達可能性・実測予測時間・エンジン・出力トークンがゼロであること・オフライン推論の状態が表示されます。

Apple Silicon Mac で始める

pip install 'laya-coreml[demo]'
hf download aac6fef/laya-multilingual-coreml-ane --local-dir models/snake
laya-coreml-snake --model ./models/snake --fps 12

等幅フォントと truecolor 対応の、少なくとも 104 列 × 35 行の端末を使ってください。モデルのロードと初回の Core ML コンパイルはゲーム開始前に行われ、初回実行では数十秒かかることがあります。毎秒 12 回の意思決定は読みやすい表示速度であり、ハードウェアの上限ではありません。

モデルパスは明示的なダウンロード後は完全にローカルです。キャッシュされていない Hub ID でゲームを開始すると、OFFLINE と表示したままダウンロードするのではなく、手順を示して失敗します。ランタイムに MLX、PyTorch、Transformers は不要です。

操作 動作
Space 一時停止 / 再開
Up / Down または + / - 意思決定レートを上げる / 下げる
R 次のシード付きラウンドを開始
Q / Ctrl-C 終了して端末を復元

端末が小さすぎる場合、UI は待機します。--no-alt-screen は最終フレームをスクロールバックに残し、--headless は同じモデル/ゲームを表示なしで実行します。

2 つのデプロイの選択肢

既定の ANE バンドルはバッチ 1、長さ 96 です。各ゲームステップは 3 つの質問に逐次答えます。その 単一質問の約 5 ms というベンチマークは、ゲーム全体のフレーム時間ではありません。通常の Snake GPU バンドルは B3/L64/K4 を使い、それら 3 つの質問をバッチ化します:

hf download aac6fef/laya-multilingual-coreml-snake --local-dir models/snake-gpu
laya-coreml-snake --model ./models/snake-gpu --fps 12

エンジンのラベルは、選択された Core ML の計算ユニットを表します。専用の ANE グラフには、ANE レポートに別途の実行計画とハードウェアトレースの証拠があります。CPU+ANE は依然としてホスト側の処理を許容します。

モデルが制御するもの

コードが、合法手、ハミルトン閉路上の安全な前進、空セルを通って餌に到達できるかを計算します。Laya はこれらの特徴量を受け取り、方向と真偽の確率を返します。表示されるリスクは 1 - P(safe route) で、モデルの推定であり、次の手で死ぬ較正確率ではありません。

既定の安全シールドは、実行される手をサイクル安全な前進に制限します。UI は元のモデル確率を可視のまま保ち、提案された方向と実行された方向を表示し、両者が異なるときに可視の介入カウンタを増やします。--unassisted はこのシールドなしで生のモデル top-1 を実行します。シールドありでの死亡ゼロは、支援なしの Snake 知能や無制限の生存を証明するものではありません。

実際の実行を録画して共有可能なメディアをエクスポートする

laya-coreml-snake --model ./models/snake --fps 12 --seed 7 \
  --duration 75 --record snake.jsonl

# Requires ffmpeg: brew install ffmpeg
laya-coreml-snake export snake.jsonl --start 45 --seconds 20 \
  --output snake.mp4 --gif snake.gif --gif-seconds 15
laya-coreml-snake export snake.jsonl --start 55 --output snake.png

録画には、モデルの出所、発表されたアクションの前の各盤面、実際の確率、推論レイテンシ、経過タイムスタンプ、最終サマリーが含まれます。エクスポーターはライブのターミナル構成を再利用し、1× の実時間タイミングを保持します。画面上の RECORDED RUN · 1× はリプレイを示します。サイドカーはソースとレンダラーのハッシュを記録します。動画の FPS は録画をサンプリングするものであり、モデルの意思決定の回数を変えたり再生を加速したりはしません。

出力ファイルは新しいパスでなければなりません。--max-speed はペース制御を無効にし、移動前に各新しい予測を待ちます。モデル呼び出しをスキップはしません:

laya-coreml-snake --model ./models/snake --max-speed \
  --duration 20 --record snake-fast.jsonl

安定した意思決定レートを測る

laya-coreml-snake benchmark --model ./models/snake \
  --rates 20,30,40,50,60 --sweep-steps 120 --soak-steps 600 \
  --seeds 101,102,103 --raw-steps 200 --output snake-benchmark.json

ベンチマークはまず、シールドなしの挙動と上限なしの動作を測定し、目標レートを掃引し、その後、複数シードでのより長いエピソードで合格レートをテストします。合格には、死亡ゼロ、有限の出力、サイクル順序と餌の前進の保持、そしてアクティブな計算予算を超える tick が最大 1% 以下であることが必要です。

タイミングには、モデル予測、プランナー処理、truecolor Rich の合成、ANSI シリアライズ、ゲーム更新が含まれます。ペース制御テストには実際の sleep が含まれます。端末エミュレータの描画は、このインメモリレンダリングテストからは除外されます。結果は、このマシンとこれらのシードで合格した テスト済み の最高レートであり、普遍的な最大値ではありません。リリース実行については SNAKE_BENCHMARKS.md を参照してください。