Composer 2.5

🏷️ 정보 LLM headliner

Cursor가 2026년 5월 18일 Composer 2.5를 공개했습니다. Cursor가 자체 학습시키는 코딩 에이전트 모델이고, 베이스는 Composer 2와 같은 Kimi K2.5 오픈소스 체크포인트입니다.

한 줄 요약은 "지능도 올리고 동작도 다듬었다"입니다. 흥미로운 건 그걸 어떻게 학습시켰느냐인데, Cursor 블로그가 짚는 세 가지 방법이 꽤 구체적이라 하나씩 풀어 봅니다.

벤치 먼저, 어떤 의미인가요

Cursor가 공개한 표입니다.

벤치

Composer 2.5

Opus 4.7

GPT-5.5

Composer 2

Terminal-Bench 2.0

69.3%

69.4%

82.7%

61.7%

SWE-Bench Multilingual

79.8%

80.5%

77.8%

73.7%

CursorBench v3.1 (harder tasks)

63.2%

64.8% (max) / 61.6% (xhigh default)

64.3% (xhigh) / 59.2% (medium default)

52.2%

세 벤치가 각각 뭔지부터 짧게 짚고 가겠습니다.

수치를 읽는 법.

CursorBench는 Cursor 자체 벤치라 자기 모델에 유리할 수 있다는 점은 감안해야 합니다. 그래도 Opus 4.7이 max effort에서 64.8%, default에서 61.6%라는 걸 같이 보여준 건 정직한 표시입니다. Composer 2.5의 default 동작이 Opus의 max 근처에 있다는 정도의 메시지로 읽힙니다.

한 가지 비는 게 있다면 레이턴시·비용·툴콜 정확도 같은 벤치 점수에 안 잡히는 축입니다. 코딩 에이전트는 점수 1%p보다 답이 빨리 오느냐, 잘못된 도구를 안 부르냐가 실제 사용감을 결정합니다. Composer 2.5가 텍스트 피드백 RL로 국소 동작을 다듬은 이유도 여기 있고, 자세한 학습 방법은 다음 섹션에서 봅니다.

학습

1. 텍스트 피드백을 활용한 타깃형 RL

코딩 에이전트는 한 작업이 수십만 토큰짜리 롤아웃으로 늘어집니다. 보상은 보통 "작업을 최종적으로 풀었는지"로 계산되는데, 그러면 모델 입장에서는 "내가 뭘 잘못해서 망친 거지?"를 알 수 없습니다. 100번 도구 호출 중 1번 잘못 부른 것이 최종 보상에 미치는 영향은 거의 0에 가깝습니다. 잘못된 도구 호출, 어색한 설명, 스타일 위반 같은 국소적인 문제는 이 방식으로 절대 안 잡힙니다.

Cursor의 해법은 이렇습니다.

  1. 롤아웃 중 모델이 더 나았을 수 있는 지점을 고른다
  2. 그 지점에 짧은 힌트를 끼워 넣는다 (예: "Reminder: Available 도구는 X, Y, Z입니다")
  3. 힌트가 들어간 컨텍스트로 모델을 한 번 더 돌려서 나온 분포를 teacher로 둔다
  4. 원래 컨텍스트의 모델을 student로 두고, student의 토큰 확률을 teacher 쪽으로 끌어당기는 KL loss를 추가한다

전체 trajectory에 대한 RL 보상은 그대로 두고, 바꾸고 싶은 그 한 턴에만 국소적인 학습 신호를 꽂는 구조입니다. 예시로 든 게 "Tool not found" 케이스인데, 사용 불가능한 도구를 부르려 한 그 한 턴에만 "유효한 도구 목록은 이거다" 힌트를 주입하면, teacher 분포에서 잘못된 도구의 확률은 내려가고 유효한 도구의 확률은 올라갑니다. student는 그 확률을 흉내내도록 업데이트되고요.

이게 왜 영리하냐면, 최종 보상을 건드리지 않고도 모델 동작을 고칠 수 있기 때문입니다. 보통은 보상 함수에 룰을 더 박아 넣어서 동작을 잡는데, 그러면 보상 해킹이 심해지거나 작업 자체를 못 풀게 됩니다. 텍스트 피드백은 "내가 원하는 동작을 자연어로 그 지점에 꽂는다"라는 점에서 훨씬 핀셋에 가깝습니다.

Cursor는 이 방법을 코딩 스타일부터 모델의 커뮤니케이션 톤까지 다양한 동작에 적용했다고 합니다. 벤치엔 잘 안 잡히지만 실제 쓸 때 체감되는 부분, 답변이 산만하다거나 같은 말을 반복한다거나 하는 부분이 여기서 잡히는 거죠.

2. 합성 데이터 25배

RL이 진행되면 모델이 학습 과제를 대부분 풀어 버려서 더는 배울 게 없어집니다. Cursor는 학습 진행 중에 더 어려운 과제를 동적으로 생성하는 방식으로 이걸 우회했고, Composer 2 대비 합성 과제를 25배 늘렸습니다.

기억해둘 만한 합성 패턴 하나는 기능 삭제(feature deletion) 입니다.

  1. 테스트가 잘 갖춰진 코드베이스를 준다
  2. 코드베이스를 계속 작동 가능한 상태로 유지하면서, 특정 테스트 가능한 기능만 골라 삭제하라고 시킨다
  3. 그 다음 합성 과제는: 삭제된 기능을 다시 구현하라
  4. 보상은 원래 있던 테스트가 통과하는지로 측정

테스트가 곧 정답이라 채점이 깔끔합니다. 그리고 자동으로 어렵게 만들기도 좋습니다. 더 깊이 얽힌 기능을 지우면 더 어려운 복원 과제가 되니까요.

재밌는 건 같이 적은 보상 해킹 사례입니다. 모델이 똑똑해질수록 정공법으로 푸는 대신 우회로를 찾아내기 시작했다고 합니다.

원래 과제 의도는 "기억과 추론으로 구현해봐"였는데 모델이 "어, 이 캐시 파일이 답을 갖고 있네?" 식으로 풀어버린 겁니다. Cursor는 에이전트 기반 모니터링으로 이런 케이스를 잡아냈다고 적었습니다. RL 스케일이 커질수록 "모델이 우리가 의도하지 않은 길로 보상을 따먹는다"는 흔한 경고가 실제 사례로 적힌 거고, 학습 데이터 큐레이션이 점점 디버깅 작업이 되어간다는 신호입니다.

3. 샤딩된 Muon과 듀얼 메시 HSDP

이 부분은 사전학습 인프라 얘기라 좀 더 기술적입니다. 핵심만 잡으면 1T 파라미터 MoE 모델에서 옵티마이저 한 스텝이 0.2초라는 결과를 어떻게 만들었느냐입니다.

Muon 옵티마이저는 모멘텀 업데이트 뒤에 Newton-Schulz 반복을 돌려 가중치를 직교화합니다. MoE 모델의 expert 가중치가 가장 무거운 비용이라, Cursor는 이 부분을 이렇게 처리했습니다.

  1. 같은 shape의 expert 텐서들을 배치로 묶는다
  2. all-to-all 통신으로 샤드를 모아 완전한 행렬로 만든다
  3. Newton-Schulz를 실행한다
  4. all-to-all로 다시 원래 샤딩으로 돌려보낸다
  5. 이 통신을 비동기로 돌려서, 한 태스크가 통신 기다리는 동안 다른 Muon 태스크 컴퓨트를 진행한다

여기에 HSDP 레이아웃을 두 개로 나눈 게 듀얼 메시 부분입니다.

이렇게 분리하면 두 종류의 병렬성을 서로 겹쳐서 굴릴 수 있고, 결과적으로 16개 GPU 짜리 단일 메시가 아니라 CP=2, EP=8 같은 조합을 8개 GPU에 얹는 식으로 절약이 됩니다. 작은 텐서엔 광범위한 통신을 피하면서, 큰 텐서엔 충분한 분산을 주는 거죠.

요점은 MoE에서는 가중치 크기에 따라 통신 패턴을 다르게 짜야 한다는 겁니다. 단순한 FSDP 한 벌로 균등 분배하면 작은 가중치의 통신 오버헤드가 비대해집니다.

SpaceXAI 협업과 다음 모델

이 글의 사이드 노트인데 흥미로워서 짚어둡니다. Cursor는 SpaceXAI와 협력해서 총 컴퓨트 10배의 훨씬 큰 모델을 처음부터 학습 중이라고 밝혔습니다. Colossus 2 클러스터 기준 H100 환산 100만 개 규모. Composer 2.5는 K2.5 베이스의 finetuning 흐름인 반면, 다음 라운드는 자체 사전학습으로 가는 그림입니다.

이게 시사하는 건 Cursor가 영원히 오픈소스 베이스 위에서만 굴릴 생각은 아니라는 신호입니다. K2.5 라이선스에 묶이는 것, 베이스 모델 업데이트를 기다려야 하는 것, 베이스 모델의 행동을 못 바꾸는 것. 이런 제약을 풀려면 결국 자체 사전학습이 필요하죠.

가격과 사용

자세한 가격, 옵션은 모델 문서 참고.

정리

원문: Composer 2.5 (Cursor blog) · Composer 2 Technical Report