Core ML Snake リリースベンチマーク
ANE FP16 デモは、上限なしの 600 ステップのエピソード 3 本で 49.1〜50.0 の新しい意思決定/秒を持続し、死亡はゼロでした。 プールされたスループットは 49.66/秒 でした。各手には、3 つの逐次的なモデル質問、プランナー処理、truecolor のターミナルシリアライズが含まれます。これは完全なアクティブゲームループであり、別途の単一質問の約 5 ms マイクロベンチマークではありません。
ペース制御動作では、要求 20 意思決定/秒が、アクティブ計算の締め切り基準を通過したテスト済み設定のうち最高でした。観測された実時間レートは 18.39〜18.42/秒で、実際の sleep とスケジューリングのオーバーヘッドを含みます。この結果は、完全に時間どおりの 20 FPS 表示を証明するものではありません。README の録画は可読性のために要求 12 意思決定/秒を使い、実端末で 11.39/秒を観測しました。
環境と方法
- Apple M3 Max、40 コア GPU、128 GiB、macOS 27.2、Python 3.12.13。
- まっさらな環境に
laya-coreml==0.1.0ホイールをインストール。Core ML Tools 9.0、NumPy 2.1.3、Rich 15.0.0。Torch、MLX、Transformers はインストールされていない。 - 公開 ANE FP16 バンドル、リビジョン
39d6a9b3d0f67f06da74fbade6121ea134cbdb21、実行前にダウンロード済み。 - B1/L96/K32、ゲームの意思決定ごとに 3 つの逐次質問、コンパクトなプロンプト、24×16 の盤面、初期の Snake セル 6 個。20 回のウォームアップ意思決定は除外。
- 既定の可視サイクル安全層。生の top-1 も別途測定。
- 同期
predict、ゲーム特徴量、Rich の合成、truecolor ANSI シリアライズ、ゲーム更新を含む。ロード、ウォームアップ、端末エミュレータの描画は除外。ペース制御実行には実際のsleep呼び出しを含む。
合格には、有限の出力、死亡ゼロ、サイクル順序と餌の前進の保持、そして各ペース制御エピソードで 要求された時間予算を超えるアクティブ tick が最大 1% であることが必要です。上限なしモードは各手で新しい予測を待ち、固定の締め切りを持ちません。他のモデルベンチマークは同時に実行されていません。
ランタイム、チェックポイント、パッケージハッシュ、プロンプトハッシュ、tick ごとの計測値は coreml-snake.json に記録されています。
上限なしの安定性
| シード | 手数 | 観測された意思決定/秒 | スコア / 最終長さ | 死亡 | 安全介入 |
|---|---|---|---|---|---|
| 101 | 600 | 49.10 | 20 / 26 | 0 | 1 |
| 102 | 600 | 49.89 | 24 / 30 | 0 | 0 |
| 103 | 600 | 49.99 | 23 / 29 | 0 | 1 |
これら 1,800 の意思決定にわたり、3 質問 API のレイテンシは 16.32 ms P50 / 21.33 ms P95 でした。アクティブ tick 全体のレイテンシは 19.07 ms P50 / 25.96 ms P95 でした。これは明示的な支援を伴う限定的な生存の証拠であり、モデルが安全層なしで無期限にプレイできるという主張ではありません。
ペース制御の掃引と確認
各掃引はシード 7 で 120 手を使います。失敗したレートも保持されます:
| 要求意思決定/秒 | 観測された意思決定/秒 | アクティブ締め切り超過 | 結果 |
|---|---|---|---|
| 20 | 18.55 | 0.83% | 合格。以下で確認 |
| 30 | 28.67 | 10.83% | 不合格 |
| 40 | 37.22 | 37.50% | 不合格 |
| 50 | 44.21 | 53.33% | 不合格 |
| 60 | 50.68 | 100.00% | 不合格 |
20/秒設定でのより長い確認:
| シード | 手数 | 観測された意思決定/秒 | アクティブ締め切り超過 | スコア | 結果 |
|---|---|---|---|---|---|
| 101 | 600 | 18.39 | 4 / 600, 0.67% | 20 | 合格 |
| 102 | 600 | 18.42 | 4 / 600, 0.67% | 24 | 合格 |
| 103 | 600 | 18.42 | 3 / 600, 0.50% | 23 | 合格 |
3 質問 API はこれらのペース制御エピソードでおよそ 26.3 ms P50 で、上限なしエピソードの 16.3 ms と比べられました。実験はペース制御に依存する差を示しますが、その原因を切り分けてはいません。スケジューリングとデバイスの電力状態遷移は考えられる説明ですが、別途のプロファイリングが必要であり、このレポートで証明されたものではありません。したがって、持続スループットの結果を固定フレームの締め切り保証として宣伝してはなりません。
生の top-1 と共有可能な録画
安全上書きを無効にした状態で、シード 101/102/103 はそれぞれ 200 手を完了し、スコア 7/6/7、死亡ゼロでした。モデルは依然として同じ正確なプランナー特徴量を受け取るため、これらの実行は未処理の盤面からの推論をテストするものではありません。長期的なゲームの生存を証明するものでもありません。
すべてのベンチマークモードを通じて、4,920 の意思決定、死亡ゼロ、安全介入 4 回でした。別途、実端末のショーケースは 75.034 秒で 855 の意思決定を記録し、最終スコア 26、長さ 32、死亡ゼロ、介入ゼロでした。その元のタイムスタンプ、状態、アクションは、正確な決定論的リプレイでテストされています。GIF、MP4、出所については LAUNCH.md を参照してください。
再現する
pip install 'laya-coreml[demo]==0.1.0'
hf download aac6fef/laya-multilingual-coreml-ane \
--revision 39d6a9b3d0f67f06da74fbade6121ea134cbdb21 \
--local-dir models/ane
laya-coreml-snake benchmark --model ./models/ane \
--rates 20,30,40,50,60 --sweep-steps 120 --soak-steps 600 \
--seeds 101,102,103 --raw-steps 200 --output snake-benchmark.json
観測された制約なしレートでプレイするには、laya-coreml-snake --model ./models/ane --max-speed を使います。実際の端末描画は、シリアライズのベンチマークと比べてレートを下げることがあります。別途の Snake GPU バンドルは 3 つの質問すべてをバッチ化します。このリリースレポートが測るのは ANE FP16 バンドルだけです。過去のペアのモデル比較は ANE_BENCHMARKS.md と BENCHMARKS.md に残っています。