Test-Time Compute Scaling: 추론 시간 최적화
훈련이 아닌 추론 시점에서 더 많은 계산 자원을 사용하여 성능을 향상시키는 새로운 패러다임
2026년 2월 1일·6 min read·
ai
ai-agent
llm
test-time-compute
scaling
inference
추론 시점에서 계산 시간 활용
개념
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]
[Wait]
"따라서..."
[Final Answer] → "답을 내릴 때"
"42"
사고 시간 제어
쉬운 문제: [Wait] × 2 → 빠른 답변
중간 문제: [Wait] × 10 → 적당한 사고
어려운 문제: [Wait] × 50 → 깊은 사고
계산량과 성능의 관계
성능(%)
| ╱╱╱
| ╱╱╱
| ╱╱╱
| ╱╱╱
| ╱╱╱━━━━━━━━ (포화)
| ╱╱╱
└────────────────────
추론 시간 (계산량)
중요한 발견
| 발견 | 설명 |
|---|---|
| 성능 향상 | 추론 시간 증가 → 성능 향상 |
| 포화점 | 특정 지점 이후 효과 감소 |
| 문제 의존 | 쉬운 문제는 포화 빠름 |
동적 계산량 조절
문제 난이도에 따른 조절
"1 + 1 = ?"
→ 쉬움 → [Wait] × 1 → "2"
"AIME 문제"
→ 어려움 → [Wait] × 50 → 깊은 분석 → 답변
자신감 기반 조절
초기 사고 후 자신감 평가:
- 자신감 높음 → 바로 답변
- 자신감 낮음 → [Wait] 추가 → 더 생각
비용 효율성
| 접근 | 비용 | 성능 향상 |
|---|---|---|
| 더 큰 모델 훈련 | 매우 높음 | 점진적 |
| 더 많은 데이터 | 높음 | 점진적 |
| 추론 시간 증가 | 낮음 | 큰 폭 |
비용 비교
더 큰 모델 훈련:
- GPU 수천 대 × 수개월 = $수백만
추론 시간 증가:
- 추가 토큰 비용 × 필요할 때만 = $수천
구현 방식
단순 반복
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)
적응적 조절
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: 사고 시간 제어 기법