Open R1: 업데이트 #3
요약
본 기술 기사는 코드 추론 능력을 테스트하기 위한 새로운 고품질 데이터셋과 모델을 소개합니다. 특히 CodeForces와 국제 정보학 올림피아드(IOI)의 난이도 높은 문제를 활용하여, 10만 개의 샘플을 포함하는 'CodeForces-CoTs' 및 IOI 전용 데이터셋을 구축했습니다. 이를 기반으로 Claude 3.7 Sonnet 같은 폐쇄형 모델보다 우수한 성능을 보이는 오픈 웨이트 코드 모델인 'OlympicCoder'를 개발하고 공개합니다.
핵심 포인트
- CodeForces와 IOI의 난이도 높은 문제를 활용하여 고품질 코딩 추론 데이터셋(CodeForces-CoTs, IOI)을 구축했습니다.
- 새롭게 개발된 OlympicCoder 모델은 오픈 웨이트 기반이며, 기존 최고 성능의 폐쇄형 모델보다 우수한 성능을 보였습니다.
- OlympicCoder는 CodeForces-CoTs와 같은 정제된 데이터를 사용하여 튜닝되었으며, 모든 테스트한 오픈 웨이트 모델 중 최상위 성능을 자랑합니다.
- IOI 데이터셋은 전체 테스트 케이스가 공개되어 있어 모델의 코드 추론 능력을 검증하기에 매우 이상적입니다.
지난 몇 주 동안 우리는 DeepSeek-R1 레시피의 경쟁 프로그래밍 (코드 추론) 부분을 재현하는 데 집중했습니다.
이번 글에서는 다음 내용을 공유합니다:
- CodeForces-CoTs: C++ 와 Python 에서 솔루션을 생성하기 위해 R1 에서 정제된 거의 10 만 개의 고품질 샘플이 포함된 데이터셋.
- IOI 벤치마크: 2024 년 국제 정보학 올림피아드 (IOI) 의 난이도가 높은 문제들에서 새로운 벤치마크.
- OlympicCoder: Claude 3.7 Sonnet 과 같은 폐쇄형 소스 프론티어 모델보다 IOI 문제에서 성능이 우수한 두 개의 7B 와 32B 코드 모델을 세밀하게 튜닝한 것.
OlympicCoder 모델들이 다양한 지시 명령 학습 및 추론 모델과 비교되는 개요입니다. 우리는 CodeForces-CoTs 를 사용하여 모델을 훈련하면 최상급 성능을 얻을 수 있다고 발견했습니다. OlympicCoder-32B 는 우리가 테스트한 모든 오픈 웨이트 모델보다, 일부는 100 배 더 큰 모델까지도 우세합니다 🤯.
데이터셋, 벤치마크 및 모델을 구축하는 방법을 배우기 위해 아래를 계속 읽으세요!
CodeForces
-
문제 데이터셋:
open-r1/codeforces -
DeepSeek-R1 cots 데이터셋:
open-r1/codeforces-cots
International Olympiad in Informatics (IOI)
-
문제 문장 데이터셋 (IOI'2020 - IOI'2024):
open-r1/ioi -
테스트 케이스:
open-r1/ioi-test-cases -
공식 (지문) 솔루션:
open-r1/ioi-sample-solutions -
DeepSeek-R1 cots 데이터셋 (IOI'2020-IOI'2023):
open-r1/ioi-cots -
40 개 이상의 선도 모델에 대한 IOI'2024 평가 데이터:
open-r1/ioi-2024-model-solutions -
생성 및 평가를 실행하기 위한 코드
OlympicCoder
-
7B 모델:
open-r1/OlympicCoder-7B -
32B 모델:
open-r1/OlympicCoder-32B
CodeForces 는 경쟁 프로그래머들 사이에서 가장 인기 있는 웹사이트 중 하나로, 참가자들이 난이도가 높은 알고리즘 최적화 문제를 해결해야 하는 정기적인 대회와 함께 운영됩니다. 이러한 문제의 난이도는 모델을 코딩 추론 능력을 개선하고 테스트하기 위해 흥미로운 데이터셋을 만듭니다.
과거의 노력인 DeepMind 의 CodeContests 데이터셋은 많은 CodeForces 문제를 컴파일했지만, 우리는 이제 open-r1/codeforces를 출시합니다. 이 데이터셋은 첫 번째 대회부터 2025 년까지의 약 10k 개의 문제를 포함하며, DeepMind 의 데이터셋에 포함되어 있지 않은 약 ~3k 개가 있습니다. 또한, 문제의 약 60% 에 대해 우리는 편집러 (editorial) 를 포함했습니다. 이는 대회 주최자가 작성한 올바른 솔루션을 설명하는 것입니다. 또한 공식 웹사이트에서 추출한 각 문제에 대한 3 개의 올바른 솔루션도 찾을 수 있습니다.
또한, 우리는 DeepSeek-R1 이 이러한 문제에서 생성한 사슬 사고 (chain of thought) 생성을 포함하는 open-r1/codeforces-cots를 출시합니다. 여기서 우리는 모델에 C++ (경쟁 프로그래밍에서 주로 사용되는 언어) 와 Python 에서 솔루션을 생성하도록 요청했습니다. 총 10 만 개의 샘플이 있습니다.
우리는 이 데이터셋을 사용하여 Qwen2.5 Coder Instruct 7B 와 32B 를 세밀하게 튜닝하여 OlympicCoder-7B 와 OlympicCoder-32B 모델을 얻었습니다. 이 모델에 대한 자세한 내용은 블로그 글의 후단에 있습니다.
DeepMind 의 대회와 같은 경쟁 프로그래밍 문제를 포함하는 데이터셋은 테스트 케이스를 포함하고 검증 가능하다고 주장하지만, 이러한 테스트 케이스는 종종 대회 웹사이트에서 사용되는 전체 세트의 작은 부분입니다. CodeForces 는 특히 표시된 테스트 케이스를 약 500 자로 제한합니다. 이는 이러한 데이터셋이 이 한계에 들어맞는 짧은, 쉬운 테스트 케이스만 포함한다는 것을 의미합니다.
예를 들어, R1 이 생성한 해답이 모든 공개 테스트 케이스를 통과한 7 개의 문제를 선택하여 CodeForces 플랫폼에 제출해 보았습니다.
짧은 테스트에서는 모두 통과했지만, 전체 테스트 세트에서는 각각 실패했습니다. 이는 새로운 완전 검증 가능한 경쟁 프로그래밍 데이터셋의 필요성을 강조합니다. 우리는 향후 CodeForces 데이터셋에 추가될 수 있는 더 어려운 테스트를 생성하고 검증하기 위해 모델 기반 솔루션을 시도할 계획이나, 현재는 다른 곳에서 완전히 공개된 문제 데이터를 찾았습니다.
국제 정보학 올림피아드 (IOI) 는 AIME 와 같은 경우, IOI 는 매우 우수한 학생들 중 일부가 초대되는 IMO 의 프로그래밍 대등한 것으로, 4 명씩 국가당 고등학교 학생들을 엄선하여 복잡한 알고리즘 문제를 테스트합니다.
문제는 매우 어렵고, 전체 테스트 세트는 허용된 (CC-BY) 라이선스로 공개되어 있습니다. 이는 IOI 가 모델의 코드 추론 능력을 테스트하기 위한 완벽한 데이터셋임을 의미합니다.
IOI 는 각 문제가 여러 하위 과제 (subtasks) 를 가지며, 각각 다른 입력 제약 조건을 가집니다. 하위 과제를 해결하려면 제출물이 해당 시간 제한 (엄격한) 내에서 모든 테스트 케이스를 통과해야 합니다. 최종 하위 과제는 일반적으로 '전체 문제'이지만, 일부 하위 과제는 훨씬 쉬운 (제약이 더 많은) 문제를 설명하며, 참가자들은 종종 전체 문제를 풀기보다 점수를 얻기 위해 특정 하위 과제를 목표로 합니다.
최근 OpenAI 의 논문에서 o1 live 가 IOI'2024 에서 경쟁한 후, 우리는 IOI'2024 의 모든 문제 (그리고 2020 년까지의 이전 IOIs) 를 처리하여 각 프롬프트가 모델에게 특정 하위 과제를 해결하도록 요청하도록 분할했습니다. 우리는 처리된 문제 설명과 실행 및 테스트를 위해 필요한 모든 평가/체크러 파일과 테스트 케이스를 open-r1/ioi 와 open-r1/ioi-test-cases 에 공개합니다.
우리는 IOI 규칙에 따라 해답을 실행하고 점수를 매기기 위해 커스텀 코드를 작성했습니다. 이는 https://github.com/huggingface/ioi 에서 이용 가능하며, IOI'2024 에서 40 개 이상의 주요 추론 모델을 평가했습니다.
IOI 는 문제당 제출 제한이 50 회입니다. 우리는 각 하위 과제에 대해 50 개의 제출을 생성한 후, OpenAI 가 대회 조건에서 점수를 얻기 위해 사용한 것과 유사한 선택 전략을 적용했습니다. 결과는 아래에 있으며, 수평선은 실제 대회 데이터의 동메달, 은메달, 금메달 모델의 임계값입니다. o1 은 동메달에 매우 가깝지만, 결국 어떤 모델도 메달 임계값 (참가자의 50 퍼센티일) 에 도달하지는 않습니다.
우리의 OlympicCoder 모델 (빨간색) 은 다른 프론티어 모델과 비교하여 잘 수행하며, 일부 폐쇄형 모델 (금색) 과도 경쟁합니다. claude-3.7-sonnet-thinking 과 OlympicCoder-32B 는 우리가 분할한 o1-mini 와 DeepSeek-R1 을 50 제출 제한 설정에서 능가합니다.
중요한 점은 제출 전략이 Qwen-2.5-Coder-32B-Instruct, OlympicCoder-32B 의 기본 모델과 같은 비 추론 (reasoning) 모델을 페널티를 줄 수 있다는 것입니다. 실제 대회 조건을 모사하기 위해 — 제출의 점수는 실제로 제출된 후에야만 알려짐 — OpenAI 가 o1-ioi 에 사용했던 것과 유사한 라운드 로빈 제출 전략을 채택했습니다: 우리는 문제의 마지막 하위 과제를 목표로 하는 해결책을 먼저 제출하고, 그 다음에 두 번째로 마지막 하위 과제를 목표로 하는 해결책으로 이어지며, 제출이 선택될 때만 해결책을 평가합니다. 이미 이전 선택된 제출들로 해결된 하위 과제를 목표로 하는 제출은 건너뛰고, 각 목표 하위 과제 내에서 우리는 더 긴 생성 (longer generations) 에서의 제출을 선호합니다 — 이는 추론 모델에게는 의미 있는 기준이지만 다른 모델에는 그렇지 않습니다.
제출 제한 50 개를 제거하여 (이는 대회 조건을 벗어날 것입니다) 모든 생성된 제출을 평가하면 다음과 같은 결과를 얻습니다:
OlympicCoder 모델을 만들 때, CodeForces 데이터셋에 적용된 다양한 필터의 역할을 이해하기 위해 많은 수의 SFT 실험을 수행했습니다. 우리는 다음 open-r1/codeforces-cots 하위 집합이 전체적으로 가장 좋은 성능을 발휘함을 발견했습니다:
solutions
: 문제 진술을 기반으로 R1 이 생성한 해결책.
solutions_w_editorials
: 문제 진술과 올바른 해결책을 설명하는 설명을 함께 제공했을 때 R1 이 생성한 해결책.
우리는 C++ 해결책에만 집중했지만, Python 해결책을 혼합하면 성능이 더 크게 향상될 가능성이 높습니다.
우리는 LiveCodeBench 를 모델 테스트 베드로 사용했다가, 훨씬 어려운 IOI 벤치마크를 통해 가장 잘 수행되는 체크포인트를 실행했습니다. 모델을 훈련하기 위해 다양한 하이퍼파라미터 구성을 테스트하고 다음을 결정했습니다:
- 모델: Qwen2.5 Coder Instruct 7B 와 32B
- 에포크 (Epochs): 10
- 유효 배치 크기 (Effective batch size): 128
- 학습률 (Learning rate): 4e-5
- 스케줄러 (Scheduler): Cosine, 피크 학습률의 10% 로 감소
- 컨텍스트 크기: 7B 는 32,768 토큰, 32B 는 22,528 토큰
아래에서는 R1 추론 트레이스 (reasoning traces) 에 Qwen2.5 Coder 모델을 튜닝할 때 배운 교훈을 공유합니다.
샘플 패킹 (sample packing) 은 가변 길이의 시퀀스를 효율적으로 처리하고 훈련을 가속화하는 데 널리 사용되는 방법입니다. 아래의 그림에서 보듯이, 이는 훈련 샘플 (색상) 을 패딩 토큰 (gray) 을 사용하지 않아도 되도록 크기가 동일한 조각으로 연결합니다:
패킹을 사용하면 샘플은 각 조각의 경계 사이에서 겹칠 수 있지만, 대부분의 샘플이 조각 크기보다 훨씬 작다면 실제로는 크게 문제가 되지 않습니다.
그러나 R1 에서 추출한 추론 트레이스 (reasoning traces) 에 대해 패킹이 성능에 해를 끼칠 수 있는지 궁금해졌습니다. 많은 트레이스가 길고 절단된 답변의 비율이 높을 수 있기 때문입니다. 이는 모델이 긴 컨텍스트 정보를 주의하는 데 훈련하기 어렵다는 것을 의미하며, 특히 질문과 답변이 다른 조각으로 패킹되었을 때 더욱 그렇습니다.
아래에 있는 놀라운 그림에서 보듯이, 우리는 패킹이 모델의 성능을 현저히 해친다고 발견했습니다: 패킹을 사용할 경우 모델은 LiveCodebench 의 문제들을 거의 해결할 수 없으나, 패킹을 사용하지 않으면 여러 에포크 동안 성능이 향상된 후 평평해집니다:
AI 자동 생성 콘텐츠
본 콘텐츠는 Hugging Face Blog의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기