평가 스크립트 (HumanEval·MMLU)

평가 스크립트 (HumanEval·MMLU)

ExLlamaV2 저장소는 모델 품질을 측정할 수 있는 HumanEval과 MMLU 벤치마크 스크립트를 제공해요. 두 벤치마크 모두 다이내믹 배칭으로 구현돼 있어서, 수천 개의 샘플을 큐에 넣고 처리량이 높은 상태로 돌릴 수 있어요. 양자화한 모델을 만들었을 때 '실제로 품질이 유지됐나'를 객관적으로 확인하는 데 제격이에요.

아래는 공통 인자와 각 벤치마크별 사용법이에요.

공통 인자

  • -m / --model directory: (필수) 모델 경로 (EXL2, GPTQ, FP16 모두 가능)
  • -gs / --gpu_split list: GPU별 메모리 할당(GB), 모델 가중치·정적 버퍼용(캐시 제외). 예: -gs 10.5,0,10.5는 CUDA 디바이스 0과 2에 10.5GB를 할당하고 디바이스 1은 건너뜀. -gs auto는 자동 분할 모드로 가용 디바이스를 순서대로 채워요.
  • -l / --length int: 컨텍스트 길이. 기본은 모델의 자연 컨텍스트 길이인데, 대부분의 벤치마크엔 지나치게 길 수 있어요.
  • -rs / --rope_scale float: RoPE 스케일 계수(선형)
  • -ra / --rope_alpha float: RoPE 스케일 계수(NTK)
  • -nfa / --no_flash_attn: flash-attn을 쓰지 않음
  • -nxf / --no_transformers: xformers를 쓰지 않음
  • -fst / --fast_safetensors: 대체 로딩 모드. Linux에선 direct I/O와 pinned buffer를 써서, 콜드 캐시의 아주 빠른 NVMe RAID 어레이에서 더 빨리 로드될 수 있어요. Windows에선 일반 비-메모리맵 I/O를 써서 보통은 더 느려요. 다만 두 경우 모두 큰 모델 로드 시 ExLlama가 시스템 메모리를 소진하는 상황을 해결하는 데 도움이 될 수 있어요.

HumanEval

OpenAI의 표준 HumanEval 테스트를 ExLlamaV2용으로 다이내믹 배칭으로 구현한 거예요. 함수 정의를 보고 그 구현을 완성하는 코드 생성 벤치마크라서, 코드 특화 모델의 추론 품질을 보는 데 적합해요.

pip install human-eval
python eval/humaneval.py -m <model_dir> -o humaneval_output.json
evaluate-functional-correctness humaneval_output.json

인자:

  • -o / --output file: (필수) 생성된 샘플을 받을 출력 JSON 파일
  • -spt / --samples_per_task int: 각 HumanEval 태스크당 샘플 수. 태스크당 1개로도 대략적인 pass@1을 계산할 수 있지만, 샘플이 많을수록 정확해요. pass@10에는 태스크당 최소 10개가 필요해요.
  • --max_tokens int: 샘플을 짧게 자르기 전에 생성할 최대 토큰 수. 이 한도에 먼저 닿지 않으면, 각 생성의 정지 조건은 함수 정의 뒤 처음 나오는 '공백이 뒤따르지 않는 개행', 즉 첫 비-들여쓰기 줄이에요. 기본 768로 대부분의 HumanEval 태스크에 충분해요.
  • -pf / --prompt str: 기본적으로 샘플은 베이스 모델·인스트럭트 모델 둘 다에 맞는 raw 완성형이에요. 프롬프트 형식을 주면 각 태스크를 '응답 프리픽스가 붙은 인스트럭트 프롬프트'로 바꿔요.
  • -v / --verbose: 완성본이 생성되는 대로 출력 (기본은 진행 바)
  • -cs / --cache_size int: 총 캐시 토큰 수. 최고의 배칭 성능을 위해 최대한 높게 잡는 걸 권장해요.
  • -cq4 / --cache_q4: Q4 캐시 사용
  • -cq6 / --cache_q6: Q6 캐시 사용
  • -cq8 / --cache_q8: Q8 캐시 사용

MMLU

표준 MMLU 테스트를 ExLlamaV2용으로 다이내믹 배칭으로 구현한 거예요. 인문·과학·사회 등 다과목 객관식 지식 벤치마크라서, 모델의 전반적인 지식·추론 수준을 폭넓게 보는 데 좋아요.

pip install datasets
python eval/mmlu.py -m <model_dir>

인자:

  • -sub / --subjects list: 나열한 과목으로 테스트를 제한. 예: -sub anatomy,nutrition,professional_medicine. 전체 과목 목록은 데이터셋에서 확인할 수 있어요.
  • -fs / --fewshot_examples int: 각 질문 앞의 fewshot 예시 수. 기본 5.
  • -shf / --shuffle: 각 질문의 보기(답지)를 섞어요.
  • -cs / --cache_size int: 총 캐시 토큰 수. 최고의 배칭 성능을 위해 최대한 높게 잡는 걸 권장해요.
  • -cq4 / --cache_q4: Q4 캐시 사용
  • -cq6 / --cache_q6: Q6 캐시 사용
  • -cq8 / --cache_q8: Q8 캐시 사용

더 알아보기

  • ExLlamaV2 개요 — 평가가 어떻게 추론 워크플로에 들어맞는지
  • EXL2 양자화 변환 — 평가 전에 양자화 모델을 만드는 법
  • Q4/FP8 캐시 평가 — 캐시 모드가 이 벤치마크 점수에 미치는 영향
  • 원본: Evaluation scripts 문서