Test-Time Compute Scaling: 추론 시간 최적화
훈련이 아닌 추론 시점에서 더 많은 계산을 투입하여 성능을 끌어올리는 패러다임
2026년 2월 1일·6 min read·
agent
test-time-compute
reasoning
scaling
추론 시점에서 계산 시간 활용
개념
Test-Time Compute Scaling은 훈련이 아닌 추론 시점에서 더 많은 계산 자원을 사용하여 성능을 향상시키는 접근이다.
패러다임 전환
- 기존 패러다임: 더 큰 모델 + 더 많은 데이터 + 더 많은 훈련 = 더 좋은 성능
- 새로운 패러다임: 같은 모델 + 추론 시간에 더 많이 생각 = 더 좋은 성능
자원 배분 비교
- 기존: 훈련 90%, 추론 10% — 대부분의 자원을 훈련에 투자
- 새로운: 훈련 50%, 추론 50% — 추론 시간에도 동등한 자원 배분
s1: 1,000개 예제의 힘
2025년 1월 발표된 s1은 이 패러다임을 극단적으로 보여준다.
훈련 방식
- 데이터 수집: 단 1,000개 어려운 문제
- 파인튜닝: 이 데이터만으로 훈련
- Budget Forcing: 특수 토큰으로 사고 시간 제어
성능
| 모델 | AIME 2024 | 훈련 데이터 |
|---|---|---|
| GPT-4 | 12% | 조 단위 토큰 |
| o1-preview | 74% | 비공개 |
| s1-32B | 81% | 1,000개 |
| o1-full | 85% | 비공개 |
1,000개 예제로 o1-preview를 능가한다.
Budget Forcing
s1의 핵심 기법은 Budget Forcing이다.
특수 토큰
- [Wait]: "더 생각해" — 모델이 추가 사고를 수행하도록 유도
- [Final Answer]: "답을 내릴 때" — 최종 답변을 출력하도록 지시
동작 예시
일반 생성: "답은 42이다." — 즉시 답변을 출력한다.
Budget Forcing: "음..." → [Wait] → "이 문제를 풀려면 먼저..." → [Wait] → [Wait] → "따라서..." → [Final Answer] → "42" — 여러 번의 사고 단계를 거쳐 더 깊이 생각한 뒤 답변한다.
사고 시간 제어
- 쉬운 문제: [Wait] x 2 — 빠른 답변
- 중간 문제: [Wait] x 10 — 적당한 사고
- 어려운 문제: [Wait] x 50 — 깊은 사고
계산량과 성능의 관계
| 추론 계산량 | 성능 변화 |
|---|---|
| 낮음 | 성능 향상이 제한적 |
| 중간 | 성능이 가파르게 향상 |
| 높음 | 향상 폭이 줄어들며 포화 구간 진입 |
중요한 발견
| 발견 | 설명 |
|---|---|
| 성능 향상 | 추론 시간 증가 → 성능 향상 |
| 포화점 | 특정 지점 이후 효과 감소 |
| 문제 의존 | 쉬운 문제는 포화 빠름 |
동적 계산량 조절
문제 난이도에 따른 조절
쉬운 문제: "1 + 1 = ?" → [Wait] x 1 → "2" — 최소한의 사고로 즉시 답변
어려운 문제: "AIME 문제" → [Wait] x 50 → 깊은 분석을 거쳐 답변
자신감 기반 조절
초기 사고 후 자신감을 평가하여 계산량을 조절한다:
- 자신감 높음: 바로 답변
- 자신감 낮음: [Wait] 추가 후 더 생각
비용 효율성
| 접근 | 비용 | 성능 향상 |
|---|---|---|
| 더 큰 모델 훈련 | 매우 높음 | 점진적 |
| 더 많은 데이터 | 높음 | 점진적 |
| 추론 시간 증가 | 낮음 | 큰 폭 |
비용 비교
- 더 큰 모델 훈련: GPU 수천 대 x 수개월 = $수백만
- 추론 시간 증가: 추가 토큰 비용 x 필요할 때만 = $수천
구현 방식
단순 반복
python
def think_longer(model, question, wait_tokens=10):
prompt = question
for _ in range(wait_tokens):
prompt += model.generate(prompt, max_tokens=50)
prompt += "[Wait]"
prompt += "[Final Answer]"
return model.generate(prompt)적응적 조절
python
def adaptive_thinking(model, question, max_waits=50):
prompt = question
for i in range(max_waits):
response = model.generate(prompt, max_tokens=50)
# 자신감 체크
confidence = model.evaluate_confidence(response)
if confidence > 0.9:
break
prompt += response + "[Wait]"
prompt += "[Final Answer]"
return model.generate(prompt)Best-of-N Sampling
또 다른 Test-Time Compute 기법:
같은 문제를 N번 풀어본다:
시도 1: 답 A / 시도 2: 답 B / 시도 3: 답 A / 시도 4: 답 A / 시도 5: 답 C
가장 좋은 것을 선택하거나 다수결을 적용한다 → 답 A
선택 기준
| 기준 | 설명 |
|---|---|
| 다수결 | 가장 많이 나온 답 |
| 검증 점수 | 자체 검증 점수 최고 |
| 길이 기반 | 더 긴 추론 = 더 신뢰 |
한계
- 포화점: 무한히 생각한다고 무한히 좋아지지 않음
- 비용 증가: 추론 비용은 여전히 비용
- 지연 시간: 사용자 대기 시간 증가
- 문제 유형: 모든 문제에 효과적이지 않음
적합한 사용 사례
| 적합 | 부적합 |
|---|---|
| 수학/과학 문제 | 실시간 대화 |
| 코딩 챌린지 | 간단한 QA |
| 복잡한 추론 | 일상적 작업 |
| 정확도 중요 | 속도 중요 |
관련 개념
- OpenAI o1: 내부 추론 토큰
- DeepSeek-R1: 오픈소스 추론 모델
- Budget Forcing: 사고 시간 제어 기법