콘텐츠로 이동

벤치마크 모범 사례

버전: 0.3.2 상태: 방법론 발전에 따라 업데이트되는 문서 참고: MLPerf Inference, SPEC CPU 2017, NVIDIA GenAI-Perf

개요

asiai bench는 확립된 벤치마크 표준을 따라 Apple Silicon의 추론 엔진 간 신뢰할 수 있고, 재현 가능하며, 비교 가능한 결과를 생성합니다. 이 문서는 구현된, 계획 중인, 또는 의도적으로 제외된 모범 사례를 추적합니다.

준수 요약

카테고리 사례 상태 도입 버전
메트릭 TTFT와 tok/s 분리 구현됨 v0.3.1
결정론적 샘플링 (temperature=0) 구현됨 v0.3.2
서버 API의 토큰 수 (SSE 청크가 아님) 구현됨 v0.3.1
엔진별 전력 모니터링 구현됨 v0.3.1
generation_duration_ms 명시적 필드 구현됨 v0.3.1
워밍업 엔진당 1회 비계측 생성 구현됨 v0.3.2
실행 횟수 기본 3회 (SPEC 최소) 구현됨 v0.3.2
주요 메트릭으로 중앙값 (SPEC 표준) 구현됨 v0.3.2
보조로 평균 + 표준편차 구현됨 v0.3.0
분산 풀링된 프롬프트 내 표준편차 구현됨 v0.3.1
CV 기반 안정성 분류 구현됨 v0.3.0
환경 순차적 엔진 실행 (메모리 격리) 구현됨 v0.1
서멀 스로틀링 감지 + 경고 구현됨 v0.3.2
서멀 레벨 + speed_limit 기록 구현됨 v0.1
재현성 벤치마크별 엔진 버전 저장 구현됨 v0.3.2
모델 포맷 + 양자화 저장 구현됨 v0.3.2
하드웨어 칩 + macOS 버전 저장 구현됨 v0.3.2
오픈소스 벤치마크 코드 구현됨 v0.1
회귀 과거 기준선 비교 (SQLite) 구현됨 v0.3.0
(engine, model, prompt_type)별 비교 구현됨 v0.3.1
metrics_version 필터링 구현됨 v0.3.1
프롬프트 4가지 다양한 프롬프트 유형 + 컨텍스트 채움 구현됨 v0.1
프롬프트별 고정 max_tokens 구현됨 v0.1

계획된 개선 사항

P1 — 통계적 엄밀성

사례 설명 표준
95% 신뢰 구간 CI = mean +/- 2*SE. +/- stddev보다 유용. 학술
백분위수 (P50/P90/P99) 특히 TTFT용 — 테일 레이턴시가 중요. NVIDIA GenAI-Perf
이상치 감지 (IQR) [Q1 - 1.5IQR, Q3 + 1.5IQR] 범위 밖 실행 플래그. 통계 표준
추세 감지 실행 간 단조 성능 저하 감지 (서멀 드리프트). 학술

P2 — 재현성

사례 설명 표준
엔진 간 쿨다운 서멀 안정화를 위해 3-5초 일시 중지. GPU 벤치마크
토큰 비율 검증 tokens_generated < max_tokens의 90%일 때 경고. MLPerf
내보내기 형식 커뮤니티 제출용 asiai bench --export JSON. MLPerf 제출

P3 — 고급

사례 설명 표준
ignore_eos 옵션 처리량 벤치마크를 위해 max_tokens까지 강제 생성. NVIDIA
동시 요청 테스트 배치 처리량 테스트 (vllm-mlx에 해당). NVIDIA
백그라운드 프로세스 감사 벤치마크 중 무거운 프로세스 실행 시 경고. SPEC

의도적 편차

사례 편차 이유
MLPerf 최소 600초 지속 시간 데이터센터 GPU용으로 설계됨. Apple Silicon에서 3회 실행 + 4개 프롬프트로 약 2-5분이면 안정적인 결과에 충분합니다.
SPEC 2회 비계측 워밍업 워크로드 1회 워밍업 생성 사용 (2회 전체 워크로드가 아님). JIT 워밍업이 최소인 로컬 추론 엔진에는 1회 워밍업으로 충분합니다.
모집단 표준편차 vs 표본 표준편차 N-1 제수 대신 N 제수의 모집단 표준편차를 사용. 적은 N (3-5회)에서는 차이가 미미하며 모집단이 더 보수적입니다.
주파수 스케일링 제어 Apple Silicon은 CPU 거버너 제어를 노출하지 않습니다. 대신 thermal_speed_limit를 기록하여 스로틀링을 감지합니다.

Apple Silicon 고유 고려 사항

통합 메모리 아키텍처

Apple Silicon은 CPU와 GPU가 메모리를 공유합니다. 두 가지 주요 의미가 있습니다:

  1. 두 엔진을 동시에 벤치마크하지 마세요 — 동일한 메모리 풀을 경쟁합니다. asiai bench는 설계상 엔진을 순차적으로 실행합니다.
  2. VRAM 보고 — Ollama와 LM Studio는 size_vram을 네이티브로 보고합니다. 다른 엔진 (llama.cpp, mlx-lm, oMLX, vLLM-MLX, Exo)에서는 libproc을 통한 ri_phys_footprint를 대체 추정값으로 사용합니다. 이는 Activity Monitor가 표시하는 값과 동일하며 Metal/GPU 할당을 포함합니다. 추정값은 UI에 "(est.)"로 표시됩니다.

서멀 스로틀링

  • MacBook Air (팬 없음): 지속 부하에서 심각한 스로틀링. 5-10분 후 결과 저하.
  • MacBook Pro (팬 있음): 경미한 스로틀링, 보통 팬 속도 증가로 처리.
  • Mac Mini/Studio/Pro: 능동 냉각, 최소 스로틀링.

asiai bench는 결과별로 thermal_speed_limit를 기록하고 실행 중 스로틀링이 감지되면 (speed_limit < 100%) 경고합니다.

KV 캐시와 컨텍스트 길이

큰 컨텍스트 크기 (32k+)는 모델 로드 시 KV 캐시를 사전 할당하는 엔진에서 성능 불안정을 일으킬 수 있습니다. 예: LM Studio는 기본적으로 loaded_context_length: 262144 (256k)를 사용하며, 이는 35B 모델에 약 15-25 GB의 KV 캐시를 할당하여 64 GB 통합 메모리를 포화시킬 수 있습니다.

권장 사항: - 큰 컨텍스트 벤치마크 시 실제 테스트 크기에 맞게 엔진 컨텍스트 길이를 설정하세요 (예: 64k 테스트의 경우 lms load model --context-length 65536). - 공정한 결과를 위해 동일한 컨텍스트 길이 설정의 엔진을 비교하세요.

벤치마크별 저장 메타데이터

SQLite의 모든 벤치마크 결과에 포함됩니다:

필드 예시 목적
engine "ollama" 엔진 식별
engine_version "0.17.4" 업데이트 간 성능 변화 감지
model "qwen3.5:35b-a3b" 모델 식별
model_format "gguf" 포맷 변형 구분
model_quantization "Q4_K_M" 양자화 수준 구분
hw_chip "Apple M4 Pro" 하드웨어 식별
os_version "15.3" macOS 버전 추적
thermal_level "nominal" 환경 조건
thermal_speed_limit 100 스로틀링 감지
metrics_version 2 수식 버전 (버전 간 회귀 방지)

이 메타데이터로 다음이 가능합니다: - 공정한 회귀 비교: 메타데이터가 일치하는 결과만 비교 - 머신 간 벤치마크: 하드웨어 차이 식별 - 커뮤니티 데이터 공유: 자체 기술 결과 (v1.x에서 계획)