Core ML Snake 릴리스 벤치마크
ANE FP16 데모는 제한 없는 600스텝 에피소드 세 번에서 49.1–50.0 새 의사결정/초를 유지했고, 사망은 0회였습니다. 그 통합 처리량은 49.66/s였습니다. 각 이동은 세 개의 순차 모델 질문, 플래너 작업, 트루컬러 터미널 직렬화를 포함합니다. 이는 완전한 활성 게임 루프이며, 별도의 단일 질문 ~5 ms 마이크로 벤치마크가 아닙니다.
페이싱 동작에서 초당 20 요청 의사결정이 활성 계산 마감 기준을 통과한 가장 높은 시험 설정이었습니다. 관찰된 실시간 속도는 실제 sleep과 스케줄링 오버헤드를 포함해 18.39–18.42/s였습니다. 이 결과는 완벽하게 맞춰진 20 FPS 디스플레이를 확립하지 않습니다. README 녹화는 가독성을 위해 초당 12 요청 의사결정을 사용하며, 실제 터미널에서 11.39/s를 관찰했습니다.
환경과 방법
- 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 미설치. - 리비전
39d6a9b3d0f67f06da74fbade6121ea134cbdb21의 공개 ANE FP16 번들, 실행 전에 다운로드. - B1/L96/K32, 게임 의사결정당 세 개의 순차 질문, 압축 프롬프트, 24×16 보드, 초기 Snake 세포 여섯 개. 워밍업 의사결정 스무 개 제외.
- 기본 표시 순환 안전 계층; 원시 top-1도 따로 측정.
- 동기
predict, 게임 특징, Rich 구성, 트루컬러 ANSI 직렬화, 게임 업데이트 포함. 로딩, 워밍업, 터미널 에뮬레이터 페인팅 제외. 페이싱 실행은 실제sleep호출을 포함.
통과에는 유한한 출력, 사망 0회, 보존된 순환 순서와 먹이 진행, 그리고 모든 페이싱 에피소드에서 활성 틱의 최대 1%가 요청 시간 예산을 초과할 것이 요구됩니다. 무제한 모드는 각 이동에서 새 예측을 기다리며 고정 마감이 없습니다. 다른 모델 벤치마크는 동시에 실행되지 않았습니다.
런타임, 체크포인트, 패키지 해시, 프롬프트 해시, 틱별 측정값은 coreml-snake.json에 기록됩니다.
무제한 안정성
| 시드 | 이동 수 | 관찰된 의사결정/s | 점수 / 최종 길이 | 사망 | 안전 개입 |
|---|---|---|---|---|---|
| 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개 의사결정에서 세 질문 API 지연 시간은 16.32 ms P50 / 21.33 ms P95였습니다. 전체 활성 틱 지연 시간은 19.07 ms P50 / 25.96 ms P95였습니다. 이는 명시적 지원이 있는 한정된 생존 증거이며, 모델이 안전 계층 없이 무한히 플레이할 수 있다는 주장이 아닙니다.
페이싱 스윕과 확인
모든 스윕은 시드 7로 120 이동을 사용합니다. 실패한 속도도 보존됩니다.
| 요청 의사결정/s | 관찰된 의사결정/s | 활성 마감 초과 | 결과 |
|---|---|---|---|
| 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/s 설정에서 더 긴 확인:
| 시드 | 이동 수 | 관찰된 의사결정/s | 활성 마감 초과 | 점수 | 결과 |
|---|---|---|---|---|---|
| 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 | 통과 |
세 질문 API는 이 페이싱 에피소드에서 약 26.3 ms P50이었고, 무제한 에피소드 동안은 16.3 ms였습니다. 이 실험은 페이싱 의존적 차이를 확립하지만, 그 원인을 분리하지는 못합니다. 스케줄링과 기기 전력 상태 전환이 별도 프로파일링이 필요한 가능한 설명이며, 이 보고서로 증명되지는 않습니다. 따라서 지속 처리량 결과를 고정 프레임 마감 보장으로 광고해서는 안 됩니다.
원시 top-1과 공유 가능한 녹화
안전 재정의를 끈 상태에서 시드 101/102/103은 각각 200 이동을 완료하며 7/6/7을 득점하고 사망 0회였습니다. 모델은 여전히 같은 정확한 플래너 특징을 받으므로, 이 실행은 처리되지 않은 보드로부터의 추론을 시험하지 않습니다. 장기 생존도 확립하지 않습니다.
모든 벤치마크 모드에 걸쳐 4,920개 의사결정, 사망 0회, 안전 개입 4회가 있었습니다. 별도로, 실제 터미널 쇼케이스는 75.034초에 걸쳐 855개 의사결정을 기록했고, 최종 점수 26, 길이 32, 사망 0회, 개입 0회였습니다. 그 원래 타임스탬프, 상태, 액션은 정확한 결정적 리플레이로 시험됩니다. 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 번들은
세 질문을 전부 배치 처리하며, 이 릴리스 보고서는 ANE FP16 번들만 측정합니다.
역사적인 페어링 모델 비교는 ANE_BENCHMARKS.md와
BENCHMARKS.md에
남아 있습니다.