핵심 요약
- 커서는 Composer 2를 범용 코딩이 아니라 커서 안에서 이뤄지는 소프트웨어 개발 작업에 맞춰 훈련했다고 설명했다.
- 강한 기반 모델에서 출발해 코드 중심의 추가 사전학습과 대규모 강화학습을 함께 진행했다. 강화학습에서는 도구 사용, 작업 환경 탐색, 올바른 코드 작성에 초점을 맞췄다.
- 훈련은 한 클러스터에서 진행하고, 강화학습에 필요한 추론은 세계 여러 클러스터로 분산했다. 변경된 모델 가중치만 압축해 전송하는 방식이 이를 뒷받침했다.
- 실제 제품과 닮은 훈련 환경, 추론과 훈련 사이의 수치 일치, 긴 작업을 이어가기 위한 문맥 요약이 별도의 과제였다.
한 가지 작업에 모델 용량을 집중하다
커서의 Composer 2 연구 책임자 페데리코는 자체 모델을 훈련한 이유를 제품 안의 특정 작업에 모델의 용량을 집중하기 위해서라고 설명했다. 목표는 코딩 전반이 아니라 커서에서 수행하는 소프트웨어 개발이다. 그는 이런 특화 덕분에 Composer가 Opus 등 다른 코딩 모델보다 훨씬 낮은 비용으로 제공된다고 말했다.
Composer 2는 강한 기반 모델에서 출발했다. 페데리코에 따르면 기반 모델은 약 1조 개 매개변수 가운데 약 300억 개가 활성화되는 희소 모델이다. 커서는 먼저 코드 토큰을 중심으로 대규모 추가 사전학습을 진행하고, 그 결과를 바탕으로 다양한 작업에 강화학습을 적용했다. 추가 사전학습에는 코드 라이브러리와 반복되는 코드 패턴뿐 아니라 웹 데이터도 포함됐다.
두 단계의 역할은 달랐다. 추가 사전학습은 다음 토큰을 예측하며 코드에 관한 지식을 넓힌다. 강화학습은 모델이 커서의 도구 실행 환경에서 직접 작업하도록 하고, 결과에 따라 보상을 주면서 도구 호출과 작업 수행 방식을 다듬는다. 페데리코는 코드를 작성할 줄 아는 것과 올바른 코드를 작성하는 것은 다르다고 설명했다. 커서는 처음부터 자체 기반 모델을 만드는 대신 이 순서로 접근해 사용자에게 쓸 만한 모델을 더 빨리 제공할 수 있었다고 밝혔다.
강화학습은 전체 작업 세션을 실행한다
파이어웍스의 디마는 강화학습의 한 번의 실행인 롤아웃을 커서 에이전트의 작업 세션 전체에 비유했다. 모델이 요청을 받고 도구를 호출하며 코드를 생성한 뒤 결과를 확인하는 과정이다. 한 세션은 수십 차례의 상호작용으로 이어질 수 있다. 코드가 컴파일되는지 확인하거나 다른 모델이 결과를 평가하는 방식으로 보상을 줄 수 있지만, 두 사람은 Composer 2에 사용한 구체적인 보상 설계는 공개하지 않았다.
이 과정에는 모델을 업데이트하는 훈련 장비 외에도 세션을 실행할 추론 장비와 작업 환경이 필요하다. 롤아웃이 끝날 때마다 추론을 멈추고 훈련을 재개하면 한쪽 장비가 기다리는 시간이 길어진다. 두 회사는 롤아웃과 훈련을 동시에 진행하는 방식을 설명했다. 다만 롤아웃이 끝났을 때 훈련 모델은 이미 몇 단계 갱신됐을 수 있다. 장비 가동률을 높이는 대신 오래된 모델의 실행 결과를 다뤄야 하는 셈이다.
훈련과 추론을 다른 지역에 배치하다
훈련에는 빠른 연결망으로 묶인 큰 클러스터가 필요하다. 반면 롤아웃을 실행하는 추론은 더 작은 GPU 묶음으로 나눌 수 있다. 페데리코는 Composer 2 훈련에 모두 네 곳의 클러스터를 사용했다고 말했다. 훈련은 한 클러스터에서 진행하고 추론을 여러 지역에 분산했으며, 이전 모델인 Composer 1.5의 사용자 수요가 낮을 때는 서비스용 추론 GPU 일부도 훈련에 활용했다.
분산 배치의 난점은 갱신된 모델을 추론 클러스터에 전달하는 일이었다. 디마에 따르면 모델 전체 크기는 약 1TB지만 매 단계에서 바뀌는 부분은 상대적으로 작았다. 두 회사는 변경분을 압축해 전체 모델보다 약 20배 작은 데이터를 전송하는 방식을 구축했다. 그는 전송이 보통 1분 이내에 끝나고, 추론 모델의 가중치를 교체하기 위해 멈추는 시간은 약 30초라고 설명했다. 이 방식에는 전체 저장본과 변경분의 관리·복구 체계도 필요했다.
같은 모델도 계산 결과가 어긋날 수 있다
강화학습에서는 추론 때 나온 토큰의 확률을 훈련 과정에서 다시 계산한다. 그런데 같은 버전의 모델이어도 두 계산 결과가 다를 수 있다. 디마는 부동소수점 연산 순서와 실행 방식의 미세한 차이가 원인이며, 강화학습에서는 이런 잡음이 약한 학습 신호를 흐릴 수 있다고 설명했다.
여러 전문가 모듈 중 일부만 선택해 쓰는 희소 모델에서는 문제가 커진다. 작은 수치 차이로 다른 전문가 모듈이 선택되면, 추론에 쓰이지 않은 부분을 훈련에서 업데이트할 수도 있다. 두 회사는 추론 때 선택한 모듈 정보를 훈련에 전달하는 라우터 재현과 연산 방식의 정렬을 해법으로 제시했다. 모든 계산을 똑같이 만들수록 속도가 느려질 수 있어, 수치 차이를 줄이는 정도와 성능 사이의 균형이 필요하다고 했다.
실제 제품을 닮은 환경과 긴 작업의 문맥
페데리코는 강화학습 환경이 사용자의 컴퓨터와 최대한 비슷해야 한다고 강조했다. 모델이 모의 환경과 실제 환경의 차이를 이용해 보상만 높이는 행동을 배울 수 있기 때문이다. 코딩 작업에서는 저장소의 의존성을 설치하는 것만으로 충분하지 않을 때도 있다. 데이터베이스 변경을 검증하려면 데이터베이스 서비스까지 실행돼야 한다. 커서는 도구를 실행하는 장치, 모델이 상호작용하는 시스템, 결과를 확인하는 보상 요소를 환경의 세 부분으로 설명했다. 페데리코에 따르면 커서는 이를 위해 빠르게 가동할 수 있는 가상 머신 체계를 구축했다.
커서는 사용자 반응도 모델 개선에 활용한다고 밝혔다. 다만 실제 사용자에게는 한 요청의 실행 결과만 돌아오고, 잘못된 결과가 곧 사용자 경험에 영향을 준다. 모의 환경에서는 같은 작업을 여러 번 시도해 결과를 비교할 수 있다. 페데리코는 사용자 대상 학습만으로 처음부터 모델을 만들기는 어렵다고 설명했다. 사용자가 쓸 만큼 충분히 좋은 모델이어야 피드백도 얻을 수 있기 때문이다.
긴 작업에는 또 다른 한계가 있다. 작업 과정이 길어질수록 마지막 결과의 원인을 앞선 어느 행동에 돌릴지 판단하기 어려워지고, 모델의 문맥 공간도 소진된다. 커서는 강화학습 과정에 작업 내용을 요약해 새 문맥에서 이어가는 절차를 넣었다. 페데리코는 Composer 2의 문맥 창이 약 20만 토큰이지만, 이 요약 방식으로 그보다 긴 작업을 이어갈 수 있다고 설명했다.
Composer 2 사례에서 두 회사가 강조한 것은 모델 훈련만이 아니다. 제품 안의 실제 작업을 재현하고, 훈련과 추론을 계속 가동하며, 분산된 장비 사이에서 모델 상태를 맞추는 일이 함께 필요했다.
댓글 0
첫 댓글을 남겨 주세요.