문서

Laya Snake: 로컬 터미널 데모

Apple silicon에서 Laya MLX 예측으로 구동되는 실제 Snake 게임이며, 읽기 좋은 소셜 클립을 위해 설계한 터미널 레이아웃을 씁니다. 왼쪽 패널은 보드, 점수, 길이, 최고 점수를 보여줍니다. 오른쪽 패널은 네 방향 확률, 실행된 이동, 모델 추정치 두 개, 측정된 추론 시간, 결정 속도, 로컬/오프라인 상태를 보여줍니다.

실제로 기록한 Snake 실행

실행

Apple silicon Mac에서 이 저장소로 실행합니다:

uv run --extra demo laya-snake

기본 모델은 aac6fef/laya-multilingual-mlx이며, 원본 FP16 가중치를 씁니다. 데모는 models/hub/laya-multilingual-mlx와 models/laya-multilingual을 먼저 확인한 뒤 로컬 Hugging Face 캐시를 봅니다. 플레이 중에 없는 모델을 내려받는 일은 없습니다. 새로 체크아웃한 경우에는 미리 한 번 가중치를 내려받으십시오:

uv run --extra demo hf download aac6fef/laya-multilingual-mlx \
  --local-dir models/hub/laya-multilingual-mlx
uv run --extra demo laya-snake

최소 104열 × 35행의 터미널을 고정폭 글꼴과 트루컬러로 사용하십시오. macOS에서는 Menlo가 잘 맞습니다. 터미널이 더 작으면 크기를 키울 때까지 게임이 일시정지됩니다. 기본 보드 크기는 24 × 16, 초기 길이는 6, 프레젠테이션 목표는 초당 결정 12회입니다.

라이브 화면은 NO_COLOR를 따릅니다. 셸이 이 변수를 설정한다면, 컬러 프레젠테이션을 보려면 env -u NO_COLOR uv run --extra demo laya-snake를 쓰십시오. 벤치마크는 트루컬러를 명시적으로 켜서 이 환경 설정이 렌더링 작업 부하를 조용히 바꾸지 못하게 합니다.

조작 동작
Space 일시정지 / 재개
↑ / ↓, 또는 + / − 페이스 목표를 초당 결정 2회씩 늘림 / 줄임
R 다음 시드로 새 라운드 시작
Q 또는 Ctrl-C 종료하고 터미널 복원

유용한 모드:

# Every move waits for a new inference, with no pacing delay.
uv run --extra demo laya-snake --max-speed

# Optional measured compilation + prefix-reuse path.
uv run --extra demo laya-snake --optimize --max-speed

# Use the fixed computation-budget setting validated on the recorded M3 Max.
uv run --extra demo laya-snake --fps 20

# Execute the model's raw first choice without the execution safety shield.
uv run --extra demo laya-snake --unassisted

# A finite run without a terminal display.
uv run --extra demo laya-snake --headless --steps 600 --max-speed

--model은 로컬 디렉터리나 이미 캐시된 Hub ID를 받습니다. --width, --height, --seed, --initial-length가 실행을 구성합니다. 안전 플래너가 해밀턴 사이클을 쓰기 때문에, 보드는 최소 4 × 4여야 하고 한 변이 짝수여야 합니다. 속도 키는 페이스 모드에 영향을 주며, --max-speed는 현재 결정이 끝나는 즉시 항상 진행합니다.

기록과 내보내기

기록에는 실제 보드 상태, 원본 모델 확률, 실행된 동작, 타이밍, 모델 출처, 실행 요약이 들어 있습니다. 각 보드는 다음 이동 전에 이뤄진 예측과 짝을 이룹니다.

uv run --extra demo laya-snake --fps 12 --duration 100 \
  --record artifacts/snake/run.jsonl

# ffmpeg is required for video export; on macOS: brew install ffmpeg
uv run --extra demo laya-snake export artifacts/snake/run.jsonl \
  --start 65 --seconds 30 --output artifacts/snake/demo.mp4 \
  --gif artifacts/snake/demo.gif

uv run --extra demo laya-snake export artifacts/snake/run.jsonl \
  --start 85 --output artifacts/snake/poster.png

MP4 내보내기는 기본적으로 1920 × 1080, 초당 30 video 프레임, H.264, 원래 실제 경과 속도를 씁니다. 기록된 데이터에서 같은 터미널 셀을 렌더링하며, 화면 캡처가 아니라 렌더링된 리플레이입니다. 화면에 보이는 RECORDED RUN · 1× 레이블과 JSON 사이드카가 이를 알려줍니다. 30 FPS로 내보낸다고 초당 결정 12회 게임이 초당 결정 30회 게임이 되지는 않습니다. 각 영상 타임스탬프에서 내보내기는 가장 최근의 실제 소스 프레임을 씁니다. 빠른 기록은 선택한 영상 프레임 레이트가 표시할 수 있는 것보다 결정이 많을 수 있습니다.

터미널을 붙이지 않고 기록할 때는 --headless를 쓰십시오. 매 이동마다 모델 추론은 여전히 일어나고, 라이브 터미널 그리기만 생략됩니다. 출력 파일은 덮어쓰지 않습니다. 짧은 소셜 발췌에 일시정지나 리셋을 섞기보다는, 프레젠테이션이나 속도를 바꿀 때 새 기록을 시작하십시오.

MP4는 기본적으로 30초 발췌이며, --gif는 같은 원래 속도로 처음 15초를 내보냅니다. GIF 길이를 바꾸려면 --gif-seconds를 쓰십시오. 배포되는 소셜 자산에는 두 형식과 PNG 포스터가 모두 들어 있습니다.

AI가 하는 일

이것은 특징 보조 신경 결정 데모로, Snake 훈련 없이 기존 Laya 체크포인트를 씁니다. 결정론적 플래너가 합법적인 방향, 안전한 사이클 진전, 현재 빈 칸 연결성을 설명합니다. Laya는 어느 안전 방향이 가장 많이 진전하는지를 포함한 그 설명을 받습니다. 그리고 UP, DOWN, LEFT, RIGHT에 대한 분포를 돌려줍니다. 확률 막대는 그 원본 모델 출력입니다.

기본 안전 방패는 모델의 허용 가능한 방향 중 확률이 가장 높은 것을 실행합니다. 원시 첫 선택이 허용 불가라면, UI는 원래 분포를 유지하고 실행된 이동을 SHIELD로 표시하며 개입 카운터가 올라갑니다. 기본 실행은 Laya + cycle safety로 표시됩니다. --unassisted는 그 실행 제한을 끄지만, 모델에는 여전히 플래너 특징을 줍니다. 어느 모드도 체크포인트가 처리되지 않은 보드에서 Snake 전략을 추론할 수 있음을 입증하지 않습니다.

Agent.predict 호출 하나가 매 이동마다 실제 질문 세 개를 배치로 처리합니다:

표시 실제 의미
NEXT MOVE 설명된 네 방향에 대한 Laya choice 확률
DEAD-END RISK Laya noul 답에서 나온 1 − P(safe route available)
FOOD REACHABLE 제공된 현재 빈 칸 도달 가능성 요약에 대한 Laya noul 답
INFERENCE 토크나이즈와 결과 변환을 포함한 동기화된 Agent.predict 실제 시간
DECISIONS 최근 측정된 완료 결정 속도
NETWORK OFFLINE Hub 오프라인 모드로 로컬 체크포인트를 로딩하고 로컬 추론; Mac의 Wi-Fi를 끄지는 않음

두 추정치는 모델 출력이며, 캘리브레이션된 Snake 사망 확률이 아닙니다. 현재 빈 칸 도달 가능성은 꼬리가 움직인 뒤의 미래 도달 가능성과도 다릅니다. 플래너가 안전 경로를 제공하기 때문에 위험은 오랫동안 낮게 남을 수 있습니다. 라이브 플레이 중에 무작위 값이나 미리 녹음한 예측으로 대체하지 않습니다.

사이클 방패는 몸통의 순환 순서를 보존하고, 꼬리나 먹이를 지나쳐 진행하는 일이 없습니다. 허용된 모든 동작은 현재 먹이를 향해 양의 진전을 이룹니다. 처음에 유효한 보드라면 이것이 사용 가능한 안전 후속 상태와 유한한 먹이 진전 한계를 줍니다. 테스트는 보드가 가득 찰 때까지 허용 가능한 동작들 사이에서 임의의 선택을 행사합니다.

속도 테스트 재현

uv run --extra demo laya-snake benchmark \
  --rates 10,12,15,18,20,25,30,35,40,45,50,60 \
  --sweep-steps 120 --soak-steps 600 --seeds 101,102,103,104 \
  --output artifacts/snake/benchmark.json

완료된 에피소드를 보존하고 기록된 구성을 이어가려면 --resume --output artifacts/snake/benchmark.json을 쓰십시오. 각 보고서는 체크포인트, 프롬프트, 환경, 소스 해시를 밝힙니다. 실패한 속도에는 추가 시드가 필요 없고, 통과한 속도는 요청한 모든 시드를 완료해야 합니다.

벤치마크는 모델 추론, 계획, Rich 구성, 메모리로의 ANSI 직렬화, 게임 업데이트를 측정합니다. 모델 로딩, 워밍업, 터미널 에뮬레이터 자체의 화면 그리기는 제외합니다. 무제한 에피소드는 실제 지속 moves/초를 측정합니다. 페이스 에피소드는 시드마다 활성 틱의 최소 99%가 요청한 계산 예산 안에 들어오는지를 따로 확인합니다. OS sleep 초과분은 보고되는 달성 속도에 그대로 포함됩니다.

최종 트루컬러 M3 Max 실행은 전체 초당 63.61 스텝으로 무제한 스텝 2,400회를 포함해, 사망 0회로 결정 8,160회를 완료했습니다. 통과한 테스트 최고 계산 예산 설정은 20 FPS였고, 달성한 페이스 속도는 초당 18.69–18.94 스텝이었습니다. 더 높은 페이스 설정은 게임이 살아 있는 동안 명시된 마감 기준을 통과하지 못했습니다. 시드별 결과, 개입, 한계는 전체 Snake 벤치마크 보고서를 참고하십시오.

소셜 클립에서는 기본 12 FPS 목표가 시청자에게 선택된 방향과 늘어나는 점수를 볼 시간을 줍니다. --max-speed는 측정된 처리량을 보여줍니다. 포함된 30초 영상은 소스 실행의 원래 속도를 유지합니다.