Korean LLM Benchmark Pipeline
์์ฑ: 2026-02-26 | ์๋ฒ: 8ร NVIDIA B200 183GB | PyTorch 2.10 (NV custom), CUDA 13.1
1. lm-eval ์ค์น ์ํ
lm-eval 0.4.11 ์ค์น๋จ (/usr/local/lib/python3.12/dist-packages/)
์ค์น ๋ช
๋ น: pip install lm-eval --break-system-packages
โ ๏ธ
lm-eval[ko]extra๋ 0.4.11์ ์์. ๊ธฐ๋ณธlm-eval๋ก ์ค์นํ๋ฉด ๋จ. Korean ๊ด๋ จ ํ์คํฌ๋ ๊ธฐ๋ณธ ํจํค์ง์ ๋ชจ๋ ํฌํจ๋ผ ์์.
2. Open Ko-LLM Leaderboard 9๊ฐ ํ์คํฌ ๋ถ์
โ ๊ฒฐ๋ก : ๋ก์ปฌ ์คํ ๋ถ๊ฐ (๋น๊ณต๊ฐ ๋ฐ์ดํฐ์ )
Open Ko-LLM Leaderboard 2์ 9๊ฐ ํ์คํฌ๋ ์ ์ฉ ๋น๊ณต๊ฐ ๋ฐ์ดํฐ์ ์ฌ์ฉ:
- Ko-GPQA, Ko-WinoGrande, Ko-GSM8K, Ko-EQ-Bench โ Flitto ์ ๊ณต (๋น๊ณต๊ฐ)
- KorNAT-CKA, KorNAT-SVA, Ko-Harmlessness, Ko-Helpfulness โ SELECTSTAR + KAIST AI (๋น๊ณต๊ฐ)
- Ko-IFEval โ ๋น๊ณต๊ฐ ๋ฒ์ญ๋ณธ
leaderboard๋ lm-evaluation-harness๋ฅผ ์ฌ์ฉํ์ง๋ง, ๋ฐ์ดํฐ์ ์ ์ง์ ์ ๊ทผ ๋ถ๊ฐ.
๊ฐ ํ์คํฌ ์์ธ (๋ฉํธ๋ฆญ ๊ธฐ์ค, ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ๋ถ์)
| ํ์คํฌ | ๋ ์ด๋ธ | ๋ฉํธ๋ฆญ | Few-shot | ํน์ง |
|---|---|---|---|---|
ko_eqbench |
Ko-EQ Bench | eqbench,none |
0-shot | ๊ฐ์ ์ง๋ฅ ํ๊ฐ, ํ์ฑ ํ์ |
ko_gpqa_diamond_zeroshot |
Ko-GPQA Diamond | acc_norm,none |
0-shot | ๋ํ์ ์์ค ๊ณผํ |
ko_gsm8k |
Ko-GSM8K | exact_match,strict-match |
0-shot | ์ด๋ฑ ์ํ ์ถ๋ก |
ko_ifeval |
Ko-IFEval | prompt_level_strict_acc,none + inst_level_strict_acc,none (ํ๊ท ) |
0-shot | ์ง์ ๋ฐ๋ฅด๊ธฐ |
ko_winogrande |
Ko-Winogrande | acc,none |
0-shot | ์์ ์ถ๋ก |
kornat_common |
KorNAT-CKA | acc_norm,none |
0-shot | ํ๊ตญ ๋ฌธํยท์ง์ |
kornat_harmless |
Ko-Harmlessness | acc_norm,none |
0-shot | ๋ฌดํด์ฑ |
kornat_helpful |
Ko-Helpfulness | acc_norm,none |
0-shot | ์ ์ฉ์ฑ |
kornat_social |
KorNAT-SVA | A-SVA,none |
0-shot | ์ฌํ์ ๊ฐ์น |
๋์: ๊ณต๊ฐ ์ ์ฌ ํ์คํฌ๋ก ๊ฐ์ ์ธก์
| ์๋ ํ์คํฌ | ๊ณต๊ฐ ๋์ (lm-eval) |
|---|---|
| Ko-GSM8K | global_mmlu_ko + ์ํ ์๋ธ์
|
| Ko-WinoGrande | paws_ko (์ ์ฌ ์์) |
| KorNAT-CKA | haerae_general_knowledge, haerae_history |
| Ko-IFEval | ๋ณ๋ IFEval ์คํฌ๋ฆฝํธ ํ์ |
3. ์ค์ ์ฌ์ฉ ๊ฐ๋ฅํ ํ๊ตญ์ด ๋ฒค์น๋งํฌ
3-1. KoBEST โ (lm-eval ๋ด์ฅ)
- HF ๋ฐ์ดํฐ์
:
skt/kobest_v1 - lm-eval ํ์คํฌ ๊ทธ๋ฃน:
kobest - 5๊ฐ ์๋ธํ์คํฌ:
kobest_boolq: True/False ์ด์ง ๋ถ๋ฅ (~950 test)kobest_copa: ์์ธยท๊ฒฐ๊ณผ ์ถ๋ก (~500 test)kobest_hellaswag: ๋ฌธ์ฅ ์์ฑ ์์ (~500 test)kobest_sentineg: ๊ฐ์ฑ ๋ถ์ ๋ถ์ ๋ฌธ (~500 test)kobest_wic: ๋จ์ด ์๋ฏธ ํ์ (~638 test)
- ์คํ ๋ช
๋ น:
lm_eval --model hf --model_args pretrained=<HF_MODEL_PATH> \ --tasks kobest --num_fewshot 0 --batch_size auto - ์์ ์์: 1B ๋ชจ๋ธ ๊ธฐ์ค GPU 1์ฅ ~15-30๋ถ
3-2. HAE-RAE Bench โ (lm-eval ๋ด์ฅ)
- HF ๋ฐ์ดํฐ์
:
HAERAE-HUB/HAE_RAE_BENCH_1.0 - lm-eval ํ์คํฌ ๊ทธ๋ฃน:
haerae - 6๊ฐ ์๋ธํ์คํฌ: (reading_comprehension ์ ์ธ 5๊ฐ lm-eval์์ ์ง์)
haerae_general_knowledge: ํ๊ตญ ์์ (~430 test)haerae_history: ์ญ์ฌ (~100 test)haerae_loan_word: ์ธ๋์ด (~200 test)haerae_rare_word: ํฌ๊ท์ด (~200 test)haerae_standard_nomenclature: ํ์ค์ด ํ๊ธฐ (~200 test)
- ์คํ ๋ช
๋ น:
lm_eval --model hf --model_args pretrained=<HF_MODEL_PATH> \ --tasks haerae --num_fewshot 0 --batch_size auto - ์์ ์์: ~5-10๋ถ
3-3. Global MMLU (Korean) โ (lm-eval ๋ด์ฅ)
- HF ๋ฐ์ดํฐ์
:
CohereForAI/Global-MMLU - lm-eval ํ์คํฌ ๊ทธ๋ฃน:
global_mmlu_ko - 57๊ฐ ๋๋ฉ์ธ ํ๊ตญ์ด ๋ฒ์ญ๋ณธ
- ์คํ ๋ช
๋ น:
lm_eval --model hf --model_args pretrained=<HF_MODEL_PATH> \ --tasks global_mmlu_ko --num_fewshot 0 --batch_size auto - ์์ ์์: 1B ๋ชจ๋ธ ๊ธฐ์ค ~60-90๋ถ
3-4. K2-Eval โ ๏ธ (๋ณ๋ ํ๊ฐ ํ์)
- HF ๋ฐ์ดํฐ์
:
HAERAE-HUB/K2-Evalโ (๊ณต๊ฐ ์ ๊ทผ ๊ฐ๋ฅ) - ํํ: ๊ฐ๋ฐฉํ ์ง์ ๋ฐ๋ฅด๊ธฐ (Open-ended instructions)
- ์นดํ ๊ณ ๋ฆฌ: Korean History, Geography, Social Issues, Numerical Estimation, Creative Writing ๋ฑ
- lm-eval ์ง์: โ โ LLM-as-a-Judge ๋ฐฉ์ ํ์ (GPT-4 ๋๋ Claude)
- ๋์: vLLM์ผ๋ก ์์ฑ ํ ๋ณ๋ judge ์คํฌ๋ฆฝํธ
3-5. LogiKor โ (HuggingFace์์ ๋ฏธํ์ธ)
- ๊ณต๊ฐ๋ LogiKor ๋ฐ์ดํฐ์ ์ HF์์ ์ฐพ์ง ๋ชปํจ
- ๋ ผ๋ฌธ/GitHub ๊ฒฝ๋ก ์ง์ ํ์ธ ํ์
- ์ถํ ๋ฐ๊ฒฌ ์ ์ถ๊ฐ ์์
3-6. PAWS-Ko โ (lm-eval ๋ด์ฅ)
- ํ์คํฌ:
paws_koโ ํจ๋ฌํ๋ ์ด์ฆ ํ์ง - ๋น ๋ฅด๊ฒ ์ธ์ด ์ดํด ์ธก์ ๊ฐ๋ฅ
4. ๋น ๋ฅธ ์ฒดํฌ vs ์ ์ฒด ํ๊ฐ ํ์คํฌ์
โก ๋น ๋ฅธ ์ฒดํฌ (๋ชฉํ: 30๋ถ ์ด๋ด)
kobest_boolq, kobest_copa, haerae_general_knowledge, haerae_history, paws_ko
- ์ด ์ํ ์: ~2,000๊ฐ ์ดํ
- 1B ๋ชจ๋ธ + 8รB200 โ ์ฝ 10-20๋ถ ์์
- ๋ค์์ฑ: ๋ถ๋ฅ, ์ถ๋ก , ์์, ํจ๋ฌํ๋ ์ด์ฆ
๐ ์ ์ฒด ํ๊ฐ (๋ชฉํ: 2-4์๊ฐ)
kobest (5) + haerae (5) + global_mmlu_ko (์ ์ฒด) + paws_ko
- ์ด ์ํ ์: ~15,000๊ฐ
- 1B ๋ชจ๋ธ + 8รB200 โ ์ฝ 1.5-3์๊ฐ ์์
- tensor_parallel ๋ฏธ์ง์ ์ ๋จ์ผ GPU ์ฌ์ฉ โ ๋ ๊ธธ์ด์ง ์ ์์
5. ๋ชจ๋ธ ์๋น ๋ฐฉ๋ฒ ๊ฒฐ๋ก
ํํฉ
- ์ฒดํฌํฌ์ธํธ:
checkpoints/korean_1b_sft/checkpoint-0005000/ - ๋ด์ฉ:
model.pt,config.yaml,optimizer.pt,scheduler.pt,train_state.pt - ๋ชจ๋ธ ์ํคํ ์ฒ: ์ปค์คํ LLaMA-like (FP8, d_model=2048, n_layers=24, n_heads=16)
- lm-eval ๊ธฐ๋ณธ ํฌ๋งท: HuggingFace
AutoModelForCausalLM
โ ์ถ์ฒ ๋ฐฉ๋ฒ: HF ๋ณํ ํ ํ๊ฐ
scripts/convert_to_hf.py๊ฐ ์ด๋ฏธ ๊ตฌํ๋์ด ์์. LlamaForCausalLM์ผ๋ก ๋ณํ.
# Step 1: HF ํฌ๋งท์ผ๋ก ๋ณํ
cd /PROJECT/0325120031_A/ghong/taketimes/llm-bang
python scripts/convert_to_hf.py \
--checkpoint checkpoints/korean_1b_sft/checkpoint-0005000 \
--output outputs/hf_korean_1b_sft_5000 \
--tokenizer tokenizer/korean_sp/tokenizer.json
# Step 2: lm-eval ์คํ
lm_eval --model hf \
--model_args pretrained=outputs/hf_korean_1b_sft_5000 \
--tasks kobest \
--device cuda:0
์ฃผ์์ฌํญ:
- FP8 ๊ฐ์ค์น๋ฅผ float32๋ก ๋ณํํ๋ ๊ณผ์ ํฌํจ (convert_to_hf.py ๋ด๋ถ ์ฒ๋ฆฌ)
- ์ปค์คํ
์ดํ(vocab_size=64000) โ
sentencepiece_unigram๋ฐฉ์ - lm-eval์ด tokenizer๋ฅผ ์ธ์ํ๋ ค๋ฉด
tokenizer_config.json์"model_type": "llama"ํ์ (์คํฌ๋ฆฝํธ์ ์ด๋ฏธ ํฌํจ)
๋์ ๋ฐฉ๋ฒ B: API ์๋น + local-completions
# vLLM์ผ๋ก ๋ณํ๋ ๋ชจ๋ธ ์๋น
python -m vllm.entrypoints.openai.api_server \
--model outputs/hf_korean_1b_sft_5000 --port 8000
# lm-eval API ํ๊ฐ
lm_eval --model local-completions \
--model_args model=outputs/hf_korean_1b_sft_5000,base_url=http://localhost:8000/v1,num_concurrent=8 \
--tasks kobest
โ ๋ฐฉ๋ฒ C: ์ปค์คํ ๋ํผ (๊ถ์ฅ ์ ํจ)
lm-eval ModelWrapper ์์ฑ ํ์ โ ๋ณต์ก๋ ๋์, ์ ์ง๋ณด์ ์ด๋ ค์.
6. ์ค์น ๊ฐ์ด๋
# ํ์ฌ ํ๊ฒฝ (Python 3.12, externally managed)
pip install lm-eval --break-system-packages
# ๋๋ ๊ฐ์ํ๊ฒฝ ์ฌ์ฉ (๊ถ์ฅ)
python3 -m venv /PROJECT/0325120031_A/ghong/taketimes/llm-bang/venv
source /PROJECT/0325120031_A/ghong/taketimes/llm-bang/venv/bin/activate
pip install lm-eval
# ์ถ๊ฐ ์์กด์ฑ
pip install safetensors transformers torch accelerate
7. ์คํฌ๋ฆฝํธ ์์น
| ์คํฌ๋ฆฝํธ | ์ฉ๋ |
|---|---|
scripts/run_eval_quick.sh |
๋น ๋ฅธ ์ฒดํฌ (10-20๋ถ) |
scripts/run_eval_full.sh |
์ ์ฒด ํ๊ฐ (1.5-3์๊ฐ) |
scripts/convert_to_hf.py |
์ปค์คํ ์ฒดํฌํฌ์ธํธ โ HF ๋ณํ |
8. ์ฐธ๊ณ ์๋ฃ
- Open Ko-LLM Leaderboard: https://huggingface.co/spaces/upstage/open-ko-llm-leaderboard
- lm-evaluation-harness: https://github.com/EleutherAI/lm-evaluation-harness
- KoBEST: https://huggingface.co/datasets/skt/kobest_v1
- HAE-RAE Bench: https://huggingface.co/datasets/HAERAE-HUB/HAE_RAE_BENCH_1.0
- K2-Eval: https://huggingface.co/datasets/HAERAE-HUB/K2-Eval
- KorNAT ๋ ผ๋ฌธ: Lee et al. (2024) โ KorNAT: LLM Alignment Benchmark for Korean Social Values