PipelineRL: 인플라이트 중량 업데이트를 통한 LLM 강화학습 최적화
요약
본 기술 기사는 LLM(대규모 언어 모델)의 강화학습(RL) 훈련 과정에서 발생하는 '인플라이트(inflight) 중량 업데이트' 개념을 소개하며, 이를 통해 추론 성능과 학습 안정성 간의 트레이드오프를 해결하는 PipelineRL 프레임워크를 제시합니다. PipelineRL은 추론 서버가 추론을 멈추지 않고도 최적화 단계 후 실시간으로 가중치를 업데이트할 수 있게 하여, 데이터 효율성과 GPU 활용도를 극대화합니다. 이 프레임워크는 기존 복잡한 RL 알고리즘(예: 가치 함수 사용)의 단점을 개선하고 단순화된 GRPO 기반 접근 방식을 채택했음에도 불구하고, Open-Reasoner-Zero와 경쟁할 만한 높은 성능을 달성함을 입증했습니다. 또한 모듈식 아키텍처를 통해 다양한 최신 추론/훈련 소프트웨어(vLLM, DeepSpeed 등)와의 통합이 용이하도록 표준 API 인터페이스를 정의합니다.
핵심 포인트
- PipelineRL은 인플라이트 중량 업데이트를 구현하여 LLM RL 훈련의 핵심 문제인 '추론 성능 vs. 데이터 수집 지연' 트레이드오프를 해결한다.
- 실시간 가중치 업데이트 덕분에 추론 서버는 항상 최적 배치 크기를 유지하며, 온-폴리시 또는 근접 온-폴리시 데이터를 효과적으로 수집할 수 있다.
- 제안된 RL 구현은 복잡한 구성 요소(가치 함수, KL 페널티 등)를 제거하고 단순화되었음에도 불구하고 높은 안정성과 경쟁력 있는 성능을 유지한다.
- PipelineRL은 모듈식 아키텍처와 표준 API(`init_process_group`, `request_weight_update`)를 제공하여 다양한 산업용 LLM 추론/훈련 솔루션과의 플러그 앤 플레이 통합을 가능하게 한다.
인플라이트 (inflight) 중량 업데이트는 RL(강화학습) 훈련 동안 발생하는 현상입니다 (그림 1 참조). 이는 PipelineRL이 항상 높은 추론 성능을 달성하고, 롤아웃에 사용된 중량과 최신 업데이트 모델 중량 간의 지연을 최소화할 수 있게 합니다. 결과: 대규모 언어 모델의 빠르고 안정적인 RL 훈련.
이 블로그 포스트에서 우리는 다음 두 가지를 보여줍니다: 1) 인플라이트 중량 업데이트는 훈련 과정에 해를 끼치지 않으며, 2) PipelineRL은 더 간단한 RL 알고리즘을 사용하면서도 Open-Reasoner-Zero 와 경쟁력 있는 결과를 달성합니다. 또한 새로운 추론/트레이너 조합을 용이하게 하는 모듈러 PipelineRL 아키텍처도 제시합니다.
전통적인 RL 접근법 (그림 1a) 에서는 높은 성능의 추론과 온-폴리시 데이터 수집 사이에서 트레이드오프가 존재합니다. 이 트레이드오프를 설명하기 위해 먼저 전통적인 RL 알고리즘을 알고리즘적으로 정의해 보겠습니다:
current_policy = initial_policy
opt_state = init_optimizer(current_policy)
while True:
...
높은 성능의 추론을 달성하려면 인플레서버는 큰 배치 크기를 사용해야 하며, 따라서 여러 정책 최적화 단계에 대한 데이터를 생성해야 합니다. 그러나 각 최적화 단계는 현재 정책과 추론 정책으로 수집된 데이터 사이의 지연을 증가시켜, 점차적으로 수집된 데이터가 오프-폴리시 (off-policy) 가 되고 훈련에 더 효과적이지 않게 됩니다. 온-폴리시 학습은 단일 최적화 단계의 데이터를 필요로 합니다. 그러나 많은 GPU 를 사용하여 소량의 데이터를 생성하는 것은 비효율적이기 때문입니다. 이는 GPU 당 배치 크기가 작음을 의미하기 때문입니다. 또한 인플레서버가 짧은 시퀀스를 완료하고 몇 가지 가장 긴 시퀀스만 진행 중일 때, 배치 크기는 감소합니다.
PipelineRL (그림 1b) 은 인플라이트 중량 업데이트를 통해 이 트레이드오프를 해결합니다. 우리는 추론 서버에서 각 최적화 단계 후 중량을 업데이트하며, 추론을 결코 중단하지 않습니다. 우리는 모든 인플레서버에서 추론을 일시적으로 멈추는 데 필요한 시간만큼만 새로운 중량을 수신하기 위해 일시정지합니다. 인플라이트 중량 업데이트는 추론 서버가 항상 최적의 배치 크기를 유지할 수 있게 하며, 동시에 데이터가 온-폴리시 또는 근접 온-폴리시를 보장하여 더 나은 GPU 활용도와 더 효과적인 학습을 가능하게 합니다.
PipelineRL 의 효과성과 인플라이트 중량 업데이트의 이점을 입증하기 위해 우리는 Open-Reasoner-Zero 데이터셋에서 7B 모델과 32B 모델을 훈련시켰습니다. 학습 곡선을 보면, PipelineRL 은 인기 있는 추론 테스트 벤치마크인 AIME 2024 와 MATH 500 에서 Open-Reasoner 의 성능을 맞거나 초과함을 볼 수 있습니다 (그림 2 참조).
특히, 우리의 RL 구현은 Open-Reasoner-Zero 보다 훨씬 단순합니다. Open-Reasoner-Zero 는 가치 함수를 사용하지만, 우리의 구현은 GRPO 의 단순화된 버전입니다. 특히 우리는 안정적인 훈련을 위해 신뢰 영역 중요도 중량 클램핑이 필요하지 않다고 발견했습니다. DAPO 논문에서 제시된 과장 시퀀스 필터링이나 보상 형성도 필요하지 않았습니다. 손실을 정규화할 때 우리는 배치의 시퀀스 수를 분모로 사용하여 모든 토큰에 균등한 가중치를 부여합니다. 우리는 KL 페널티와 엔트로피 보상을 사용하지 않았으며 (물론 우리의 구현은 참조 모델 KL 을 지원합니다). 우리의 구현의 단순성에도 불구하고, 또는 아마도 그 덕택으로 훈련이 매우 안정적임을 이 wandb 보고서에서 볼 수 있습니다.
이전 모델 버전으로 계산된 KV 캐시 (sequence generation proceeds with stale keys and values in the KV cache) 를 사용하여 시퀀스 생성이 진행되므로, 비행 중 (inflight) 가중치 업데이트가 불안정한 훈련 프로세스를 초래할 것이라 예상할 수 있습니다. 그러나 우리의 실험은 이것이 안정성에 부정적인 영향을 미치지 않는다는 것을 보여줍니다.
PipelineRL 은 모듈러 구조로 설계되어 고도로 전문화된 추론 및 훈련 소프트웨어 (SGLang, vLLM, Nvidia Dynamo, DeepSpeed, FSDP, TorchTitan, FastLLM 등) 의 빠른 개선점을 활용할 수 있도록 구축되었습니다. 우리는 추론 및 훈련 컴포넌트 간의 명확한 계약을 제안하여 새로운 추론 및 훈련 솔루션이 사용할 때마다 쉽게 통합할 수 있습니다.
추론 소프트웨어는 PipelineRL[1] 에 다음 API 를 노출해야 합니다:
프로세스 그룹 초기화: 시작 시간 (start-up time) 에, Trainer 0 (지정된 코디네이터) 는 모든 추론 서버에 HTTP POST /init_process_group 요청을 보냅니다. 이 요청은 가중치 업데이트를 위한 프로세스 그룹을 초기화합니다.가중치 업데이트 트리거: 트레이너들이 학습 단계를 완료한 후 (옵티마이저 단계 및 가중치 수집), Trainer 0 는 추론 엔드포인트에 HTTP POST /request_weight_update 요청을 제출합니다. 요청에는 메인 트레이너 프로세스가 NCCL 을 통해 전송할 가중치의 순서 및 모양에 대한 세부 정보가 포함되어 있습니다. 추론 서버는 추론을 일시 중지하고 가중치 브로드캐스트를 받아야 합니다.채팅 완성: 액터 프로세스는 HTTP POST /v1/chat/completion 요청을 사용하여 액터 LLM 과 상호작용합니다.
만약 init_process_group 및 request_weight_update API 가 산업 표준이 된다면, PipelineRL 을 사용하여 다른 추론 구현을 플러그 앤 플레이로 시도할 수 있습니다.
PipelineRL 훈련 코드는 각 트레이너 워크러가 올바른数量的의 훈련 토큰이 누적될 때 바로 새로 생성된 훈련 데이터를 워크러에게 공급합니다. 이러한 Python API 를 노출하는 모든 훈련 소프트웨어를 PipelineRL 과 함께 사용할 수 있습니다:
워크러 초기화: 훈련 가중치 및 옵티마이저 상태를 로드하고 쉐어드 (shard) 합니다.프워드 패스 (Forward pass): 입력에 대한 토큰 로그 확률을 생성합니다.백워드 스텝 (Backward step): 선택된 RL 목표량을 나타내는 스칼라의 기울기를 계산하고 누적합니다.옵티마이저 단계 (Optimizer Step): 옵티마이저 단계를 실행합니다.가중치 수집 및 브로드캐스팅: 옵티마이저 단계 후, 트레이너 소프트웨어는 추론 서버에 브로드캐스트할 준비를 위해 업데이트된 모델 가중치를 레이어별로 수집해야 합니다.
PipelineRL 은 현재 HuggingFace accelerate 라이브러리를 사용하여 DeepSpeed 와 FSDP 사이에서 사용자의 선택을 제공합니다. 그러나 우리는 accelerate 계약이 너무 유연하고 혼란스러울 수 있다고 발견했습니다. 우리는 위의 엄격한 계약을 따르는 다른 트레이너를 사용하기 쉬워질 것입니다.
향상 기능 (Upcoming features). 우리의 구현은 여전히 실험적이며 중요한 기능을 누락하고 있습니다. 우리의 최우선 순위는 더 정확한 추론 배치 크기 제어, 멀티모달 지원 및 시퀀스 병렬 훈련을 위한 코루틴 사용입니다. 우리는 또한 더 많은 추론 서버 및 트레이너 통합에 대한 기여를 환영합니다. 그러나 우리는 pipeline-rl 저장소를 모든 가능한 알고리즘 및 보상 함수를 지원하는 프레임워크로 만들려고 시도하지 않습니다. 우리의 견해는 pipeline-rl 이 GRPO 의 해커블하고 빠른 참조 구현이어야 하며 쉽게 검증 가능한 보상을 가져야 한다는 것입니다. PipelineRL 을 사용하여 연구 프로젝트를 수행하고 싶다면, 저장소를 포크하여 코드를 해킹하는 것을 즐기세요!
곧 더 많은 연구가 공개됩니다. Inflight weight updates 가 훈련 동역학에 미치는 영향을 이해하고 PipelineRL 이 가져온 속도 향량을 정밀하게 측정하기 위해서는 더 많은 분석이 필요합니다. 또한, PipelineRL 과 비동기 강화학습 (Asynchronous Reinforcement Learning) 을 위한 LLM 에 대한 관련성 높은 기존 작업 간의 유사성에 대해 많은 것을 말할 수 있습니다. 모든 것들과 더 많은 내용을 위해 곧 발표될 연구 논문을 기다려주세요!
Alexandre Piché 는 TapeAgents 를 개발하는 동안 우리 RL 코드의 첫 번째 동기 버전 (synchronous version) 을 작성했습니다. Dzmitry Bahdanau 는 코드를 비동기 및 분산으로 재작성 (refactored) 하고 inflight weight updates 를 구현했습니다. Rafael Pardinas 는 sequence packing 을 구현했습니다. Ehsan Kamaloo 는 실험을 실행하는 데 도움을 주었고, Xiaoyin Chen 은 프레임워크 디버깅에 도움을 주었습니다.
우리는 TRL, OpenRLHF, veRL 과 같은 기존 LLM RL 구현에서 많은 트릭 (tricks) 을 빌려온 것을 인정합니다. Simple-RL, Deepscaler, DAPO, OpenReasoner 와 같은 다른 오픈소스 추론 프로젝트의 아티팩트 (artifacts) 는 PipelineRL 의 안정화에 필수적이었습니다. 우리는 thoughtful comments 를 주신 Christopher Manning 과 Michael Noukhovitch 를 인정하고 싶습니다. 마지막으로, ServiceNow Research 팀과 ServiceNow CoreLLM 팀에 훌륭한 동료로 감사드립니다.
[1] 코드 내의 현재 계약 (contract) 은 약간 다르지만, 위에서 설명한 대로 재작성 (refactoring) 하고 있습니다.
우리는 여기서 보고하는 7B 와 32B 실험 모두 동일한 하이퍼파라미터를 사용했습니다:
- 배치 크기 (batch size) 4096
- 학습률 (learning rate) 1e-6
- 생성된 토큰 최대 개수 (max number of generated tokens) 8192
- OpenReasoner 실험에서는 16K 토큰의 생성을 허용했습니다.
보고된 실험에 사용된 컴퓨팅 자원:
- 7B 모델: 2 노드에서 약 3.5 일
- 32B 모델: 4 노드에서 약 6 일
AI 자동 생성 콘텐츠
본 콘텐츠는 Hugging Face Blog의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기