0
stars
74
commits
Python
primary language
May 21, 2026
updated
π€ Models & Datasets | π Blog Post
Test-time compute scalingμ΄ κ²°κ΅ νμ(search) μ λ°λ³΅μ΄λΌλ κ΄μ μμ, LLM λμ½λ©μ ν΅μ¬ λ³μμΈ μνλ§ μ¨λκ° νμ ν¨μ¨μ λ―ΈμΉλ μν₯μ λΆμνλ μ°κ΅¬ νλ μμν¬μ λλ€.
"The two methods that seem to scale arbitrarily are search and learning." β Rich Sutton, The Bitter Lesson
Test-time compute scaling(TTS)μ λͺ¨λΈμ΄ νλμ λ¬Έμ μ λν΄ Nλ²μ μΆλ‘ μ μνν¨μΌλ‘μ¨, μΆκ° νμ΅ μμ΄ μ±λ₯μ ν₯μμν€λ κΈ°λ²μ λλ€. μ΄ κ³Όμ μ λ³Έμ§μ μΌλ‘ ν΄ κ³΅κ°(solution space)μ λ°λ³΅μ μΌλ‘ νμνλ κ²κ³Ό λμΌν©λλ€.
μ΄λ μνλ§ μ¨λ $T$λ νμ λ²μλ₯Ό μ§μ μ μΌλ‘ κ²°μ ν©λλ€:
| μ¨λ | νμ νΉμ± | μμ κ°μ |
|---|---|---|
| μ μ¨ (Cold, $T \to 0$) | μ’κ³ μ§μ€λ νμ β κ³ νλ₯ κ²½λ‘μ μλ ΄ | λ¨μΌ μ λ΅μ΄ λͺ νν λ¬Έμ , λ Όλ¦¬κ° μ°μμ μΈ λ¬Έμ |
| κ³ μ¨ (Hot, $T \to 1+$) | λκ³ λ€μν νμ β μ νλ₯ κ²½λ‘κΉμ§ νμ | μ¬λ¬ μ κ·Όλ²μ΄ κ°λ₯ν λ¬Έμ , μ°½μμ μΆλ‘ μ΄ νμν λ¬Έμ |
ν΅μ¬ κ°μ€: λμΌν κ³μ° μμ°(N) νμμ, λ¬Έμ μ νΉμ±μ λ°λΌ μ΅μ μνλ§ μ¨λκ° λ€λ₯΄λ©°, μ μ¨κ³Ό κ³ μ¨μ νμ λ²μ μ°¨μ΄κ° λ¬Έμ λ³ TTS ν¨μ¨ μ°¨μ΄λ₯Ό μ€λͺ νλ€.
μΈ κ°μ§ νμ μκ³ λ¦¬μ¦ λͺ¨λ PRM(Process Reward Model) κΈ°λ°μΌλ‘ μ¨λλ³ νμ ν¨μ¨μ μΈ‘μ ν©λλ€:
| μκ³ λ¦¬μ¦ | ν΅μ¬ μμ΄λμ΄ |
|---|---|
| Best-of-N | Nκ° μμ±λ³Έ μνλ§ ν PRM μ΅κ³ μ μ μ ν |
| Beam Search | κ° μΆλ‘ λ¨κ³μμ PRM μ μλ‘ λΉ νμ₯ |
| DVTS | λ€μμ±κ³Ό κ²μ¦μ κ· νμκ² κ²°ν©ν νΈλ¦¬ νμ |
μ¨λκ° κ° μκ³ λ¦¬μ¦μ νμ λ€μμ±κ³Ό μλ ΄ μλμ λ―ΈμΉλ μν₯μ λΉκ΅ν¨μΌλ‘μ¨, "μΈμ hotμ΄ coldλ³΄λ€ μ 리νκ°" λ₯Ό κ·λͺ ν©λλ€.
conda create -n sal python=3.11 && conda activate sal
pip install -e '.[dev]'
huggingface-cli login
export CONFIG=recipes/Qwen2.5-1.5B-Instruct/best_of_n.yaml
uv run python scripts/test_time_compute.py $CONFIG
κΈ°λ³Έ μ€μ μΌλ‘ MATH-500μ 첫 10λ¬Έμ μ Best-of-N(n=4)μ μ€ννκ³ κ²°κ³Όλ₯Ό data/μ μ μ₯ν©λλ€.
컀맨λλΌμΈμΌλ‘ μ€μ μ μ€λ²λΌμ΄λ:
uv run python scripts/test_time_compute.py $CONFIG \
--model_path=meta-llama/Llama-3.2-8B-Instruct \
--prm_path=Skywork/Skywork-o1-Open-PRM-Qwen-2.5-1.5B \
--dataset_name=AI-MO/aimo-validation-aime \
--dataset_split=train \
--n=64 \
--seed=42
μ°Έκ³ : κΈ°λ³Έ configλ Llama 3 μν μΆλ‘ μ΅μ ν μ±ν ν νλ¦Ώμ μ¬μ©ν©λλ€. λ€λ₯Έ λͺ¨λΈ κ³μ΄μ
--custom_chat_template=noneμ€μ μ΄ νμν©λλ€.
# μ μ¨ (μ§μ€ νμ)
uv run python scripts/test_time_compute.py $CONFIG --temperature=0.4
# κ³ μ¨ (λ€μμ± νμ)
uv run python scripts/test_time_compute.py $CONFIG --temperature=1.2
νμ μμ° Nμ μ¬λ¬ μ¨λμ λΆλ°°νμ¬ νμ λ€μμ±μ κ·Ήλνν©λλ€:
# Best-of-N: μ¨λλ³ λΉμ¨λ‘ n λΆλ°°
uv run python scripts/test_time_compute.py $CONFIG \
--temperatures "0.4,0.8,1.2" \
--temperature_ratios "0.33,0.34,0.33" \
--n 12
# Beam Search / DVTS: κ° λΉμ΄ μ¨λ λͺ©λ‘μ μν
uv run python scripts/test_time_compute.py $CONFIG \
--approach beam_search \
--temperatures "0.4,0.8,1.2" \
--beam_width 3 --n 12
μ€μ μ μ½: nμ μ¨λ μλ‘ λλμ΄ λ¨μ΄μ ΈμΌ νλ©°, beam_search/dvtsμ κ²½μ° beam_widthλ‘λ λλμ΄ λ¨μ΄μ ΈμΌ ν©λλ€. μ 체 κ°μ΄λλ TEST_GUIDE.mdλ₯Ό μ°Έκ³ νμΈμ.
# μ 체 μ¨λ μ€ννΈλΌμ λν λκ·λͺ¨ μ€ν μ μΆ
./run_hnc.sh
run_hnc.shλ μ μ¨(cold)κ³Ό κ³ μ¨(hot) 쑰건μ ν¬ν¨ν μ€ν λ°°μΉλ₯Ό Slurm μ΄λ μ΄ μ‘μΌλ‘ μ μΆν©λλ€.
μμ± λͺ¨λΈ:
| λͺ¨λΈ | μ 곡 λ μνΌ |
|---|---|
Qwen/Qwen2.5-3B-Instruct | best_of_n, beam_search, dvts |
Qwen/Qwen2.5-1.5B-Instruct | best_of_n, beam_search, dvts |
meta-llama/Llama-3.2-3B-Instruct | best_of_n, beam_search, dvts |
meta-llama/Llama-3.2-1B-Instruct | best_of_n, beam_search, dvts |
nvidia/AceMath-7B-Instruct | best_of_n, beam_search, dvts |
νΈν μ±ν
ν
νλ¦Ώμ κ°μ§ λͺ¨λ λͺ¨λΈμ --model_pathλ‘ μ¬μ© κ°λ₯ν©λλ€.
Process Reward Models:
RLHFlow/Llama3.1-8B-PRM-Deepseek-Data (κΈ°λ³Έκ°)peiyi9979/math-shepherd-mistral-7b-prmSkywork/Skywork-o1-Open-PRM-Qwen-2.5-1.5BSkywork/Skywork-o1-Open-PRM-Qwen-2.5-7Brecipes/training/)500λ¬Έμ , n=256, λ€μ€ μλ/μ¨λ 쑰건μ μ 체 μ€νμ λ³λ ¬νκ° νμν©λλ€.
# λ°μ΄ν°μ
μ λΆν νμ¬ μ΄λ μ΄ μ‘ μ μΆ
sbatch recipes/launch_array_default.slurm recipes/Qwen2.5-3B-Instruct/best_of_n.yaml \
--n=256 --seed=0 \
--hub_dataset_id=<YOUR_ORG>/Qwen2.5-3B-best_of_n-completions
# μ 체 μλ£ ν κ²°κ³Ό λ³ν©
python scripts/merge_chunks.py \
--dataset_name=<YOUR_ORG>/Qwen2.5-3B-best_of_n-completions \
--filter_strings seed-0
./run_default.sh # κΈ°λ³Έ μ€ν μ‘ μ 체 μ μΆ
./run_hnc.sh # Hot/Cold μ¨λ μ€ν μ μΆ
./merge_default.sh # μλ£λ λ³λ ¬ κ²°κ³Ό λ³ν©
python scripts/run_missing_auto.py --dry-run # λλ½ λ²μ νμ§ λ° μ μΆ
TRLλ‘ μ§μ PRMμ νμΈνλ:
pip install -e '.[trl]'
# recipes/training/ μ λͺ¨λΈλ³ νλ ¨ μ€ν¬λ¦½νΈ μ°Έκ³
βββ src/sal/ # ν΅μ¬ λΌμ΄λΈλ¬λ¦¬
β βββ config.py # μ€μ Config λ°μ΄ν°ν΄λμ€
β βββ models/ # PRM λ‘λ© λ° μΆλ‘
β βββ search/ # best_of_n, beam_search, dvts μκ³ λ¦¬μ¦
β βββ utils/ # λ°μ΄ν° λ‘λ©, μ€μ½μ΄λ§, μ¨λ μ€μΌμ€λ§
βββ scripts/ # μ€ν μ§μ
μ λ° μλν
β βββ test_time_compute.py # λ©μΈ μ€ν λ¬λ
β βββ merge_chunks.py # λ³λ ¬ μ‘ κ²°κ³Ό λ³ν©
β βββ run_missing_auto.py # λλ½ μ‘ μλ νμ§/μ μΆ
βββ recipes/ # λͺ¨λΈ/μκ³ λ¦¬μ¦λ³ YAML μ€μ + Slurm λ°μ²
βββ prm-toolkit/ # PRM μλ² μΈνλΌ (git μλΈλͺ¨λ)
βββ TEST_GUIDE.md # λ©ν° μ¨λ ν
μ€νΈ κ°μ΄λ
@misc{beeching2024scalingtesttimecompute,
title={Scaling test-time compute with open models},
author={Edward Beeching and Lewis Tunstall and Sasha Rush},
url={https://huggingface.co/spaces/HuggingFaceH4/blogpost-scaling-test-time-compute},
}
@misc{snell2024scalingllmtesttimecompute,
title={Scaling LLM Test-Time Compute Optimally can be More Effective than Scaling Model Parameters},
author={Charlie Snell and Jaehoon Lee and Kelvin Xu and Aviral Kumar},
year={2024},
eprint={2408.03314},
archivePrefix={arXiv},
primaryClass={cs.LG},
url={https://arxiv.org/abs/2408.03314},
}
Python
86.8%
Shell
13.1%
0
stars
74
commits
Python
primary language
May 21, 2026
updated
π€ Models & Datasets | π Blog Post
Test-time compute scalingμ΄ κ²°κ΅ νμ(search) μ λ°λ³΅μ΄λΌλ κ΄μ μμ, LLM λμ½λ©μ ν΅μ¬ λ³μμΈ μνλ§ μ¨λκ° νμ ν¨μ¨μ λ―ΈμΉλ μν₯μ λΆμνλ μ°κ΅¬ νλ μμν¬μ λλ€.
"The two methods that seem to scale arbitrarily are search and learning." β Rich Sutton, The Bitter Lesson
Test-time compute scaling(TTS)μ λͺ¨λΈμ΄ νλμ λ¬Έμ μ λν΄ Nλ²μ μΆλ‘ μ μνν¨μΌλ‘μ¨, μΆκ° νμ΅ μμ΄ μ±λ₯μ ν₯μμν€λ κΈ°λ²μ λλ€. μ΄ κ³Όμ μ λ³Έμ§μ μΌλ‘ ν΄ κ³΅κ°(solution space)μ λ°λ³΅μ μΌλ‘ νμνλ κ²κ³Ό λμΌν©λλ€.
μ΄λ μνλ§ μ¨λ $T$λ νμ λ²μλ₯Ό μ§μ μ μΌλ‘ κ²°μ ν©λλ€:
| μ¨λ | νμ νΉμ± | μμ κ°μ |
|---|---|---|
| μ μ¨ (Cold, $T \to 0$) | μ’κ³ μ§μ€λ νμ β κ³ νλ₯ κ²½λ‘μ μλ ΄ | λ¨μΌ μ λ΅μ΄ λͺ νν λ¬Έμ , λ Όλ¦¬κ° μ°μμ μΈ λ¬Έμ |
| κ³ μ¨ (Hot, $T \to 1+$) | λκ³ λ€μν νμ β μ νλ₯ κ²½λ‘κΉμ§ νμ | μ¬λ¬ μ κ·Όλ²μ΄ κ°λ₯ν λ¬Έμ , μ°½μμ μΆλ‘ μ΄ νμν λ¬Έμ |
ν΅μ¬ κ°μ€: λμΌν κ³μ° μμ°(N) νμμ, λ¬Έμ μ νΉμ±μ λ°λΌ μ΅μ μνλ§ μ¨λκ° λ€λ₯΄λ©°, μ μ¨κ³Ό κ³ μ¨μ νμ λ²μ μ°¨μ΄κ° λ¬Έμ λ³ TTS ν¨μ¨ μ°¨μ΄λ₯Ό μ€λͺ νλ€.
μΈ κ°μ§ νμ μκ³ λ¦¬μ¦ λͺ¨λ PRM(Process Reward Model) κΈ°λ°μΌλ‘ μ¨λλ³ νμ ν¨μ¨μ μΈ‘μ ν©λλ€:
| μκ³ λ¦¬μ¦ | ν΅μ¬ μμ΄λμ΄ |
|---|---|
| Best-of-N | Nκ° μμ±λ³Έ μνλ§ ν PRM μ΅κ³ μ μ μ ν |
| Beam Search | κ° μΆλ‘ λ¨κ³μμ PRM μ μλ‘ λΉ νμ₯ |
| DVTS | λ€μμ±κ³Ό κ²μ¦μ κ· νμκ² κ²°ν©ν νΈλ¦¬ νμ |
μ¨λκ° κ° μκ³ λ¦¬μ¦μ νμ λ€μμ±κ³Ό μλ ΄ μλμ λ―ΈμΉλ μν₯μ λΉκ΅ν¨μΌλ‘μ¨, "μΈμ hotμ΄ coldλ³΄λ€ μ 리νκ°" λ₯Ό κ·λͺ ν©λλ€.
conda create -n sal python=3.11 && conda activate sal
pip install -e '.[dev]'
huggingface-cli login
export CONFIG=recipes/Qwen2.5-1.5B-Instruct/best_of_n.yaml
uv run python scripts/test_time_compute.py $CONFIG
κΈ°λ³Έ μ€μ μΌλ‘ MATH-500μ 첫 10λ¬Έμ μ Best-of-N(n=4)μ μ€ννκ³ κ²°κ³Όλ₯Ό data/μ μ μ₯ν©λλ€.
컀맨λλΌμΈμΌλ‘ μ€μ μ μ€λ²λΌμ΄λ:
uv run python scripts/test_time_compute.py $CONFIG \
--model_path=meta-llama/Llama-3.2-8B-Instruct \
--prm_path=Skywork/Skywork-o1-Open-PRM-Qwen-2.5-1.5B \
--dataset_name=AI-MO/aimo-validation-aime \
--dataset_split=train \
--n=64 \
--seed=42
μ°Έκ³ : κΈ°λ³Έ configλ Llama 3 μν μΆλ‘ μ΅μ ν μ±ν ν νλ¦Ώμ μ¬μ©ν©λλ€. λ€λ₯Έ λͺ¨λΈ κ³μ΄μ
--custom_chat_template=noneμ€μ μ΄ νμν©λλ€.
# μ μ¨ (μ§μ€ νμ)
uv run python scripts/test_time_compute.py $CONFIG --temperature=0.4
# κ³ μ¨ (λ€μμ± νμ)
uv run python scripts/test_time_compute.py $CONFIG --temperature=1.2
νμ μμ° Nμ μ¬λ¬ μ¨λμ λΆλ°°νμ¬ νμ λ€μμ±μ κ·Ήλνν©λλ€:
# Best-of-N: μ¨λλ³ λΉμ¨λ‘ n λΆλ°°
uv run python scripts/test_time_compute.py $CONFIG \
--temperatures "0.4,0.8,1.2" \
--temperature_ratios "0.33,0.34,0.33" \
--n 12
# Beam Search / DVTS: κ° λΉμ΄ μ¨λ λͺ©λ‘μ μν
uv run python scripts/test_time_compute.py $CONFIG \
--approach beam_search \
--temperatures "0.4,0.8,1.2" \
--beam_width 3 --n 12
μ€μ μ μ½: nμ μ¨λ μλ‘ λλμ΄ λ¨μ΄μ ΈμΌ νλ©°, beam_search/dvtsμ κ²½μ° beam_widthλ‘λ λλμ΄ λ¨μ΄μ ΈμΌ ν©λλ€. μ 체 κ°μ΄λλ TEST_GUIDE.mdλ₯Ό μ°Έκ³ νμΈμ.
# μ 체 μ¨λ μ€ννΈλΌμ λν λκ·λͺ¨ μ€ν μ μΆ
./run_hnc.sh
run_hnc.shλ μ μ¨(cold)κ³Ό κ³ μ¨(hot) 쑰건μ ν¬ν¨ν μ€ν λ°°μΉλ₯Ό Slurm μ΄λ μ΄ μ‘μΌλ‘ μ μΆν©λλ€.
μμ± λͺ¨λΈ:
| λͺ¨λΈ | μ 곡 λ μνΌ |
|---|---|
Qwen/Qwen2.5-3B-Instruct | best_of_n, beam_search, dvts |
Qwen/Qwen2.5-1.5B-Instruct | best_of_n, beam_search, dvts |
meta-llama/Llama-3.2-3B-Instruct | best_of_n, beam_search, dvts |
meta-llama/Llama-3.2-1B-Instruct | best_of_n, beam_search, dvts |
nvidia/AceMath-7B-Instruct | best_of_n, beam_search, dvts |
νΈν μ±ν
ν
νλ¦Ώμ κ°μ§ λͺ¨λ λͺ¨λΈμ --model_pathλ‘ μ¬μ© κ°λ₯ν©λλ€.
Process Reward Models:
RLHFlow/Llama3.1-8B-PRM-Deepseek-Data (κΈ°λ³Έκ°)peiyi9979/math-shepherd-mistral-7b-prmSkywork/Skywork-o1-Open-PRM-Qwen-2.5-1.5BSkywork/Skywork-o1-Open-PRM-Qwen-2.5-7Brecipes/training/)500λ¬Έμ , n=256, λ€μ€ μλ/μ¨λ 쑰건μ μ 체 μ€νμ λ³λ ¬νκ° νμν©λλ€.
# λ°μ΄ν°μ
μ λΆν νμ¬ μ΄λ μ΄ μ‘ μ μΆ
sbatch recipes/launch_array_default.slurm recipes/Qwen2.5-3B-Instruct/best_of_n.yaml \
--n=256 --seed=0 \
--hub_dataset_id=<YOUR_ORG>/Qwen2.5-3B-best_of_n-completions
# μ 체 μλ£ ν κ²°κ³Ό λ³ν©
python scripts/merge_chunks.py \
--dataset_name=<YOUR_ORG>/Qwen2.5-3B-best_of_n-completions \
--filter_strings seed-0
./run_default.sh # κΈ°λ³Έ μ€ν μ‘ μ 체 μ μΆ
./run_hnc.sh # Hot/Cold μ¨λ μ€ν μ μΆ
./merge_default.sh # μλ£λ λ³λ ¬ κ²°κ³Ό λ³ν©
python scripts/run_missing_auto.py --dry-run # λλ½ λ²μ νμ§ λ° μ μΆ
TRLλ‘ μ§μ PRMμ νμΈνλ:
pip install -e '.[trl]'
# recipes/training/ μ λͺ¨λΈλ³ νλ ¨ μ€ν¬λ¦½νΈ μ°Έκ³
βββ src/sal/ # ν΅μ¬ λΌμ΄λΈλ¬λ¦¬
β βββ config.py # μ€μ Config λ°μ΄ν°ν΄λμ€
β βββ models/ # PRM λ‘λ© λ° μΆλ‘
β βββ search/ # best_of_n, beam_search, dvts μκ³ λ¦¬μ¦
β βββ utils/ # λ°μ΄ν° λ‘λ©, μ€μ½μ΄λ§, μ¨λ μ€μΌμ€λ§
βββ scripts/ # μ€ν μ§μ
μ λ° μλν
β βββ test_time_compute.py # λ©μΈ μ€ν λ¬λ
β βββ merge_chunks.py # λ³λ ¬ μ‘ κ²°κ³Ό λ³ν©
β βββ run_missing_auto.py # λλ½ μ‘ μλ νμ§/μ μΆ
βββ recipes/ # λͺ¨λΈ/μκ³ λ¦¬μ¦λ³ YAML μ€μ + Slurm λ°μ²
βββ prm-toolkit/ # PRM μλ² μΈνλΌ (git μλΈλͺ¨λ)
βββ TEST_GUIDE.md # λ©ν° μ¨λ ν
μ€νΈ κ°μ΄λ
@misc{beeching2024scalingtesttimecompute,
title={Scaling test-time compute with open models},
author={Edward Beeching and Lewis Tunstall and Sasha Rush},
url={https://huggingface.co/spaces/HuggingFaceH4/blogpost-scaling-test-time-compute},
}
@misc{snell2024scalingllmtesttimecompute,
title={Scaling LLM Test-Time Compute Optimally can be More Effective than Scaling Model Parameters},
author={Charlie Snell and Jaehoon Lee and Kelvin Xu and Aviral Kumar},
year={2024},
eprint={2408.03314},
archivePrefix={arXiv},
primaryClass={cs.LG},
url={https://arxiv.org/abs/2408.03314},
}
Python
86.8%
Shell
13.1%