문서

Snake 속도와 안정성: M3 Max

최종 트루컬러 캠페인은 이동 8,160회를 사망 0회, 안전 개입 4회로 완료했습니다. 기본 모델은 FP16의 aac6fef/laya-multilingual-mlx였고, 간결한 플래너 설명, 24 × 16 보드, 초기 길이 6을 썼습니다. 이 측정은 기본 eager 런타임을 사용하며, 선택적 컴파일은 Snake 최적화에서 따로 평가합니다.

지속적인 무제한 처리량: 2,400 스텝에 걸쳐 전체 초당 63.61 이동. 네 시드 각각이 이동 600회를 완료했습니다. 속도는 초당 46.32에서 76.37 이동 사이였습니다. 모든 게임이 살아남았고, 몸통 사이클 순서를 유지했으며, 계속 먹이에 도달했습니다. 안전 레이어는 이 에피소드들에서 원시 모델 제안 2건을 바로잡았습니다.

통과한 테스트 중 가장 높은 페이스 계산 예산: 20 FPS. 네 시드 모두 활성 틱의 최소 99%가 50 ms 안에 들어와야 한다는 요구를 충족했습니다. OS sleep 초과분을 포함한 실제 경과 속도는 초당 18.69–18.94 이동이었습니다. 이는 예산 설정이며, 매초 정확히 20프레임을 렌더링한다는 주장이 아닙니다.

지속 최고 속도

시드 스텝 실제 스텝/초 활성 틱 p50 / p99 (ms) 점수 / 길이 개입
101 600 46.32 15.52 / 39.67 20 / 26 1
102 600 67.91 13.84 / 22.96 24 / 30 0
103 600 74.20 12.27 / 21.42 23 / 29 1
104 600 76.37 11.98 / 21.00 16 / 22 0

무제한 모델 추론을 합친 p50 / p95 / p99는 10.08 / 31.68 / 33.61 ms였습니다. 전체 활성 틱 p50 / p99는 12.70 / 37.21 ms였습니다. 활성 틱에는 계획, 동기화된 추론, Rich 구성, 트루컬러 ANSI 직렬화, 게임 업데이트가 포함됩니다. 페이싱 지연은 넣지 않습니다.

고정 예산 안정성

시드 목표 FPS 스텝 실제 스텝/초 활성 틱 p99 (ms) 예산 초과
101 20.0 600 18.69 39.93 0 (0.00%)
102 20.0 600 18.86 45.09 0 (0.00%)
103 20.0 600 18.94 48.66 6 (1.00%)
104 20.0 600 18.85 44.53 0 (0.00%)

통과한 테스트는 2,400개 중 6개의 지연된 활성 틱(전체의 99.75%가 예산 내) 을 기록했습니다. 가장 나쁜 시드는 600개 중 6개가 지연되어, 미리 정의한 1% 한도에 정확히 걸렸습니다. 모든 이동은 새 모델 결과를 기다리므로, 추론이 느리면 오래된 동작을 실행하는 대신 게임 속도가 줄어듭니다.

짧은 스윕

아래 각 후보는 시드 7로 이동 120회를 실행했습니다. 짧은 통과 프로브는 더 긴 4시드 테스트에 올릴 후보를 고르는 것이며, 그 자체로 안정성을 주장하기에는 충분하지 않습니다. 타이밍 실패를 포함해 모든 게임이 살아남았습니다.

목표 FPS 실제 스텝/초 활성 틱 p99 (ms) 예산 초과 짧은 스윕
10.0 9.60 52.13 0.00% 통과
12.0 11.39 42.07 0.00% 통과
15.0 14.10 48.69 0.00% 통과
18.0 16.95 58.10 2.50% 실패
20.0 18.84 43.84 0.00% 통과
25.0 24.23 45.66 5.83% 실패
30.0 28.60 40.04 97.50% 실패
35.0 28.69 40.12 100.00% 실패
40.0 28.16 44.15 100.00% 실패
45.0 26.70 45.56 100.00% 실패
50.0 28.67 40.23 100.00% 실패
60.0 28.89 40.97 100.00% 실패

짧은 스윕은 단조롭지 않으며, 측정된 지연 시간은 시간에 따라 상당히 변합니다. 페이스 실행과 무제한 실행은 장치 유휴 기간이 다르고, 일반적인 데스크톱 활동·스케줄링·클록 동작을 실험적으로 분리하지 않았습니다. 데이터는 단일 원인이나 보편적인 속도 상한을 밝혀내지 못합니다. 우리는 달성한 속도, 모든 샘플, 통과한 테스트된 최고 설정을 보고합니다.

안정성 결과에 포함되는 것

Laya는 합법적인 방향과 먹이를 향한 최선의 허용 가능 진전을 포함한 플래너 특징을 받습니다. 실제 확률을 계산합니다. 사이클 안전 레이어는 원시 확률 막대를 유지하면서 실행을 바로잡을 수 있고, 모든 개입을 셉니다. 이 체크포인트는 여기서 Snake로 훈련되지 않았습니다. 정확한 UI 지표 의미와 정책 동작.

별도의 원시 top-1 대조군은 실행 방패를 끈 상태로 시드 101–103을 각각 이동 600회 실행했습니다. 셋 다 살아남았고 점수는 9, 24, 19로, 방패를 쓴 대응 실행의 20, 24, 23과 대비됩니다. 원시 대조군도 여전히 플래너 특징을 받습니다. 이 지평선에서의 생존이 무기한 방패 없는 생존이나 도움 없는 보드 추론을 입증하지는 않습니다.

공개된 쇼케이스는 별도의 100.005초 실제 TTY 실행으로, 목표 12 FPS입니다: 이동 1,144회, 점수 40, 길이 46, 사망 0회, 개입 0회. 달성 처리량은 초당 11.44 이동이었습니다. 기록된 모든 보드와 동작은 테스트 스위트의 결정론적 리플레이로 검사됩니다. 화면에 보이는 추론 수치는 유리한 벤치마크 숫자로 바꿔치기한 것이 아니라 그 실행에서 나온 것입니다.

별도의 최적화된 최고 속도 TTY 기록은 20.01초에 이동 1,296회(초당 64.77 이동) 를 완료했고, 점수 44, 길이 50, 사망 0회, 개입 0회였습니다. 여기에는 실제 터미널 스트림 쓰기가 포함됩니다. 15초 원래 속도 영상과 전체 기록이 더 느린 프레젠테이션 클립과 함께 포함되어 있습니다.

측정 경계와 출처

  • Apple M3 Max, GPU 코어 40개, 통합 메모리 128 GiB; macOS 27.2, Python 3.12.13.
  • MLX 0.32.2, NumPy 2.5.3, Rich 15.0.0, tokenizers 0.23.2, huggingface-hub 1.32.0.
  • 원본 FP16 가중치이며, 양자화나 맞춤형 커널을 쓰지 않았습니다. 업스트림 모델 리비전: 052592a15d198d9ad47da779604259b10b47b7aa.
  • 이전에 검증된 공개 매니페스트의 가중치 SHA-256: 7fc5834af4d8fdfb268d272a9d1a66e5819a0daac98241651c4c888cc43adff1.
  • 각 이동은 질문 3개를 배치로 담아 Agent.predict를 한 번 호출합니다. 추론 타이밍에는 토크나이즈, 동기화된 MLX 평가, 출력 변환이 포함됩니다.
  • 벤치마크는 NO_COLOR와 무관하게 트루컬러를 명시적으로 켜고, Rich 출력을 메모리 내 스트림으로 직렬화합니다. 터미널 에뮬레이터의 화면 그리기, 모델 로딩, 워밍업은 제외됩니다. 실제 터미널 제어와 정리는 따로 테스트했습니다.
  • 보고서는 구성, 환경, 소스 핑거프린트, 그리고 스텝마다의 모든 확률·실행 결정·타이밍을 저장합니다. 나중에 추가된 출력 토큰 레이블과 선택적 최적화는 기준 모델이나 게임 정책을 바꾸지 않습니다.

이전 실행도 보존됩니다

최초의 상세 프롬프트 및 간결 프롬프트 캠페인은 도구 환경에서 NO_COLOR=1을 물려받았습니다. 이들은 모노크롬 직렬화를 측정한 것으로, 최종 컬러 벤치마크를 대체하지 않고 탐색적 결과로 보존합니다. 이전 간결 캠페인은 사망 없이 이동 12,360회를 완료했고 무제한 기준 전체 초당 52.55 이동을 측정했으며, 통과한 테스트 최고 예산은 18 FPS였습니다. 최종 실행과의 차이는 컬러를 켠 탓으로 돌리지 않습니다: 이 머신의 타이밍은 상당히 변동합니다.

상세 프롬프트 20 FPS 소크는 네 시드 모두 타이밍 기준을 통과하지 못했지만, 모든 게임은 살아남았습니다. 이전 간결 캠페인의 더 높은 속도 실패도 보존합니다. 완료된 실패 에피소드 중 삭제된 것은 없습니다.

파일과 재현

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

중단 후에는 같은 출력 경로로 --resume을 쓰십시오. 라이브 프레젠테이션은 읽기 좋은 12 FPS 목표를 기본으로 하며, --max-speed는 현재의 연속 결정 속도를 측정합니다.