문서

Core ML Snake: 실시간 확률, 로컬 추론

터미널 데모는 매 이동마다 실제 Laya 모델을 실행합니다. 왼쪽 패널은 보드, 점수, Snake 길이를 보여주고, 오른쪽 패널은 방향 확률, 추정 막다른 길 위험, 먹이 도달 가능성, 측정된 예측 시간, 엔진, 출력 토큰 0개, 오프라인 추론 상태를 보여줍니다.

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

최소 104열 × 35행의 터미널을, 고정폭 글꼴과 트루컬러 지원과 함께 사용하십시오. 모델 로딩과 최초 Core ML 컴파일은 게임 시작 전에 일어나며 첫 실행에서는 수십 초가 걸릴 수 있습니다. 초당 열두 의사결정은 읽기 좋은 표시 속도이며, 하드웨어 최대치가 아닙니다.

모델 경로는 명시적 다운로드 이후 완전히 로컬입니다. 캐시되지 않은 Hub ID로 게임을 시작하면 OFFLINE을 표시하면서 다운로드하는 대신 안내와 함께 실패합니다. 이 런타임은 MLX, PyTorch, Transformers가 필요하지 않습니다.

조작 동작
Space 일시정지 또는 재개
Up / Down, 또는 + / - 의사결정 속도 높이기 또는 낮추기
R 다음 시드 라운드 시작
Q / Ctrl-C 종료하고 터미널 복원

터미널이 너무 작으면 UI가 기다립니다. --no-alt-screen은 최종 프레임을 스크롤백에 남기고, --headless는 디스플레이 없이 같은 모델/게임을 실행합니다.

두 가지 배포 선택

기본 ANE 번들은 배치 1, 길이 96을 가집니다. 각 게임 스텝은 세 질문을 순차적으로 답합니다. 그 단일 질문 ~5 ms 벤치마크는 전체 게임 프레임 시간이 아닙니다. 일반 Snake GPU 번들은 B3/L64/K4를 사용하고 그 세 질문을 배치 처리합니다.

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을 실행합니다. 실드가 있는 사망 0회는 비보조 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

벤치마크는 먼저 실드 없는 동작과 무제한 작동을 측정하고, 목표 속도를 스윕한 뒤, 여러 시드로 더 긴 에피소드에서 통과 속도를 시험합니다. 통과에는 사망 0회, 유한한 출력, 보존된 순환 순서와 먹이 진행, 그리고 틱의 최대 1%가 활성 계산 예산을 초과할 것이 요구됩니다.

타이밍에는 모델 예측, 플래너 작업, 트루컬러 Rich 구성, ANSI 직렬화, 게임 업데이트가 포함됩니다. 페이싱 테스트는 실제 sleep을 포함합니다. 터미널 에뮬레이터 페인팅은 이 인메모리 렌더링 테스트에서 제외됩니다. 그 결과는 이 기기와 이 시드에서 통과한 가장 높은 시험된 속도이며, 보편적 최대치가 아닙니다. 릴리스 실행은 SNAKE_BENCHMARKS.md를 참조하십시오.