Open R1 업데이트 #3: OlympicCoder 및 코드 추론 통찰력

Hugging Face는 도전적인 국제 정보 올림피아드(IOI) 문제에서 Claude 3.7 Sonnet을 포함한 폐쇄형 프론티어 모델을 능가하는 미세 조정된 7B 및 32B 코드 모델 쌍인 OlympicCoder를 출시했습니다. 이번 출시는 전문화된 데이터셋을 생성하고 추론 흔적(reasoning traces)을 증류(distillation)함으로써 DeepSeek-R1 레시피의 경쟁 프로그래밍 측면을 재현하려는 Open R1 프로젝트의 노력의 일환입니다.

OlympicCoder 및 IOI 벤치마크

OlympicCoder-32B는 테스트된 모든 오픈 웨이트 모델을 능가하며, 50회 제출 제한 설정에서 o1-mini 및 DeepSeek-R1을 능가합니다. 이러한 능력을 평가하기 위해 Hugging Face는 2024년 국제 정보 올림피아드(IOI)를 기반으로 한 새로운 벤치마크를 개발했습니다. 이 벤치마크는 CC-BY 라이선스 하에 전체 테스트 세트가 제공되는 복잡한 알고리즘 문제를 테스트합니다.

제출 전략 및 평가

실제 대회 조건을 시뮬레이션하기 위해 Hugging Face는 솔루션의 점수를 제출 후에만 알 수 있는 라운드 로빈 제출 전략을 채택했습니다. 이 전략은 가장 어려운 서브태스크를 먼저 목표로 하는 제출을 우선시하며, 추론 모델을 위해 더 긴 생성물을 선호합니다. 이러한 엄격한 대회 조건 하에서 어떤 모델도 메달권(인간 참가자의 상위 50%)에 도달하지는 못했지만, o1이 동메달 수준에 가장 근접했습니다.

새로운 코드 추론 데이터셋

OlympicCoder를 훈련시키기 위해 Hugging Face는 인기 있는 경쟁 프로그래밍 플랫폼인 CodeForces를 기반으로 한 두 가지 주요 데이터셋을 출시했습니다:

  • open-r1/codeforces: 10,000개 이상의 문제로 구성된 데이터셋으로, 그 중 약 3,000개는 DeepMind의 CodeContests와 같은 이전 데이터셋에 포함되지 않았던 것입니다. 약 60%에는 에디토리얼(주최측 설명)이 포함되어 있습니다.
  • open-r1/codeforces-cots: DeepSeek-R1에서 증류된 거의 100,000개의 사고 사슬(CoT) 샘플로, C++ 및 Python 솔루션을 제공합니다.

코드 검증 가능성 위기

Hugging Face는 기존 경쟁 프로그래밍 데이터셋에서 "검증 가능성 위기"를 식별했습니다. 많은 데이터셋이 짧은 테스트 케이스(종종 500자 제한)만 포함하고 있어, 모델이 공개 테스트는 통과하지만 전체 테스트 세트에서는 실패하는 상황이 발생합니다. 이 발견은 전체적으로 사용 가능하고 검증 가능한 문제 데이터를 제공하는 IOI 벤치마크로의 전환을 유도했습니다.

추론 모델 훈련을 위한 기술적 교훈

Qwen2.5 Coder Instruct를 베이스로 사용하여 SFT 실험을 진행한 결과, Hugging Face는 R1 추론 흔적을 사용하여 모델을을 훈련시키는 데 있어 다섯 가지 핵심 교훈을 식별했습니다:

  1. 샘플 패킹은 추론 성능을 저하시킵니다: 훈련 샘플을 동일한 크기의 청크로 연결하는 것은 모델의 문제 해결 능력을 크게 저하시켰습니다. 이는 긴 추론 흔적이 청크에 의해 잘리거나 분할되었을 가능성이 높기 때문입니다.
  2. 더 높은 학습률이 더 효과적입니다: 대부분의 Qwen SFT 실험에 사용되는 표준 2e-5보다 4e-5의 학습률을 사용하는 것이 상당한 성능 향상(LiveCodeBench에서 거의 10점 차이)을 제공했습니다.
  3. 에디토리얼은 성능을 높이지 않습니다: R1 증류를 위한 프롬프트에 공식 에디토리얼을 포함하는 것은 결과 모델의 성능을 향상시키지 않았습니다. 문제 문구로부터의 단순한 샘플링이 약간 더 효과적이었습니다.
  4. <think> 토큰으로 프리필(Prefill)하기: 도메인 내 및 도메인 외 쿼리에 대해 일관되게 긴 CoT 동작을 유도하기 위해, 채팅 템플릿에서 어시스턴트의 응답을 <think> 토큰으로 프리필해야 합니다.
  5. 긴 컨텍스트를 위한 8비트 옵티마이저: 32B 모델로 확장할 때 긴 컨텍스트로 인한 메모리 부족(OOM) 오류를 것을 피하기 위해, FSDP와 paged_adamw_8bit 옵티마이저를 결합하면 컨텍스트를 최대 22,528 토큰까지 확장할 수 있습니다.

GRPO 및 수학 데이터셋 업데이트

TRL 라이브러리의 GRPO 개선 사항

Hugging Face는 TRL 라이브러리의 Group Relative Policy Optimization (GRPO) 구현을 여러 효율성 및 확장성 개선 사항과 함께 업데이트했습니다:

  • 생성 재사용: 최적화를 가속화하기 위해 샘플을 여러 번 재사용할 수 있습니다 (권장 $\mu$는 2에서 4 사이).
  • 보상 가중치 설정: 사용자는 이제 서로 다른 보상 함수에 서로 다른 가중치를 할당할 수 있습니다 (예: 형식을 맞추는 것보다 정확성을 우선시함).
  • 통합: PEFT 및 vLLM 통합, 그래디언트 체크포인팅, 그리고 최적화된 선택적 log softmax 계산을 추가했습니다.
  • GRPO 및 수학 데이터셋 개선 사항

Open R1 수학 데이터셋 개선 사항

OpenR1-Math-Raw 데이터셋은 reparsed_answers (Llama-3.3-70B-Instruct를 통해 추출됨)와 correctness 컬럼을 통해 풍부해졌습니다. 어블레이션 연구(Ablation studies)에 따르면, 엄격한 검증(예: Llama 검증과 math_verify를 결합함)은 초기 단계 성능을을 크게 향상시키지만, 훈련이 길어질수록 더 많은 샘플(심지어 틀린 샘플이라도)을 보유하는 것이 유익하기 때문에 성능 격차는 줄어듭니다.

미래 로드맵

Hugging Face는 다음과 같은 다음 단계에 집중할 계획입니다:

  • 범용 추론 모델을 위한 증류된 데이터셋의 혼합을 완성하는 것입니다.
  • Qwen2.5-Coder-32B-Instruct와 같은 더 큰 모델로 GRPO를 확장하여 R1-Zero 변형을 만드는 것입니다.
  • 여러 도메인에서 보상 신호를 활용하고 비추론 데이터에 대해 보상 모델을 활용하는 것입니다.

Sources

관련

  • Dispatch
  • Dispatch
  • Dispatch
  • Dispatch
  • Dispatch