← 학습 경로

RL · 2026-09-25

RL에서 양자화를 사용하는 방법

생성 비용을 줄이는 양자화가 학습과 추론의 계산을 어떻게 바꾸는지, BF16 학습·FP8 추론과 공통 양자화의 두 구성으로 살펴봅니다.

앞 글에서는 생성에 사용한 토큰과 MoE 전문가 선택을 학습에서도 유지하는 방법을 살펴봤습니다. 이번에는 같은 입력과 전문가 경로를 사용하더라도, 계산에 쓰는 숫자의 표현이 달라지는 경우를 보겠습니다.

양자화는 생성 비용을 줄이는 방법입니다. 다만 생성기가 양자화한 값으로 응답을 만들고 학습기는 원래 값으로 그 응답의 확률을 계산하면, 두 엔진이 보는 확률이 달라질 수 있습니다. 이 글에서는 그 이유를 먼저 살펴보고, 학습 순전파에도 추론과 같은 양자화 규약을 적용하는 구성과 학습은 BF16으로 유지하면서 추론에 FP8을 쓰는 구성을 비교하겠습니다.

생성 비용을 줄이는 양자화

RL에서는 모델을 업데이트하기 위해 먼저 응답을 생성해야 합니다. 긴 응답이나 여러 번의 도구 호출이 필요한 과제에서는 이 생성 과정이 전체 학습 시간의 큰 부분을 차지할 수 있습니다. 따라서 추론 엔진이 쓰는 메모리와 계산 비용을 줄이는 일이 RL 시스템에서도 중요합니다.

양자화는 숫자를 더 적은 비트의 제한된 표현으로 바꾸는 방법입니다. BF16은 16비트, FP8은 8비트 부동소수점 형식입니다. FP8 같은 작은 표현을 쓰면 해당 값의 저장·이동에 필요한 메모리를 줄일 수 있고, 이를 지원하는 하드웨어와 연산 구현에서는 계산도 빨라질 수 있습니다. 다만 전체 실행 속도가 비트 수에 정확히 비례하는 것은 아닙니다.

그 대가로 원래 구분할 수 있던 값들을 같은 값으로 표현하거나 가까운 값으로 바꾸게 됩니다. RL에서는 이 변화가 생성과 학습 사이에 어떤 차이를 만드는지 함께 봐야 합니다.

같은 가중치에서도 확률이 달라진다

프롬프트 P와 앞선 토큰을 고정하고, 같은 버전의 모델을 두 엔진에서 실행한다고 하겠습니다. 추론 엔진은 다음 토큰을 생성하기 위해 확률을 계산하고, 학습 엔진은 생성된 토큰을 학습하기 위해 그 확률을 다시 계산합니다. 여기서 순전파(forward)는 입력이 모델을 통과해 출력 확률로 이어지는 계산입니다.

그림 1은 가중치 하나를 0.26이라고 두고, 추론 쪽에서 이를 0.30으로 근사하는 상황을 보여줍니다. 숫자는 단순 반올림을 빌린 설명용 예시입니다. 실제 BF16이나 FP8에서 이 십진수를 정확히 어떻게 표현하는지를 나타내지는 않습니다.

같은 입력 P와 앞선 토큰, 같은 가중치 버전에서 학습은 원래 값으로 계산하고 추론은 양자화한 근삿값으로 계산한다. 설명용 0.26이 0.30으로 바뀌며, 다음 토큰 A·B·C의 확률도 달라질 수 있음을 개념적으로 보여준다.

학습 쪽은 원래 값으로 계산하지만 추론 쪽은 근삿값으로 계산합니다. 이런 차이가 모델의 여러 연산을 거치면 마지막에 나오는 토큰 확률도 달라질 수 있습니다. 그림의 확률 막대는 그 가능성을 보여주는 개념도이며, 0.26과 0.30에서 계산한 실제 결과는 아닙니다.

앞서 정책 업데이트에서 사용했던 것은 바로 이 토큰 확률입니다. 따라서 양자화는 생성 속도뿐 아니라 응답을 만들 때 사용한 확률과 학습할 때 계산하는 확률의 관계에도 영향을 줍니다. 여기서는 학습으로 가중치가 바뀌기 전에도 생길 수 있는 차이에 집중하고 있습니다.

학습과 추론을 구성하는 두 가지 방법

첫 번째 방법은 학습 순전파와 추론에 같은 양자화 규약을 적용하는 것입니다. 학습할 때도 생성기가 사용하는 양자화 값을 사용하도록 맞추는 접근입니다.

두 번째 방법은 BF16 학습 + FP8 추론입니다. 학습기는 BF16 계산 경로를 유지하고, 갱신한 가중치를 추론기로 보낼 때 FP8로 변환합니다. 생성 비용을 줄이면서 기존 학습 구성을 활용할 수 있습니다. 대신 그림 1처럼 양쪽 계산에 차이가 생길 수 있으므로, 이 조합에서 학습이 안정적으로 진행되는지 확인해야 합니다. Miles v0.1은 이 구성을 지원하며, 새로운 모델 구조를 지원하기 시작할 때 구성하기 쉬운 선택으로 설명합니다. Miles v0.1 §3.1

왼쪽 구성은 공통 양자화 규약을 적용해 학습 순전파와 추론이 같은 양자화 값을 사용한다. 오른쪽 구성은 학습 순전파는 BF16 값을 사용하고 추론만 FP8로 양자화한다.

그림 2 왼쪽의 공통 규약은 단순히 양쪽에 같은 포맷 이름을 붙인다는 뜻이 아닙니다. 어떤 값으로 양자화하고, 그 값을 어떤 scale로 해석할지도 맞춘다는 의미입니다. Scale은 저장한 작은 수를 실제 계산값으로 해석할 때 사용하는 배율입니다. 예를 들어 코드 3에 scale 0.1을 곱하면 0.3이지만, 같은 코드에 scale 0.2를 곱하면 0.6이 됩니다. 코드가 같아도 배율이 다르면 다른 값을 사용합니다.

Miles는 이런 규약을 체크포인트 변환, 학습 순전파, 갱신한 가중치의 전달, 추론 실행에 걸쳐 유지합니다. 그림의 공통 블록은 두 엔진이 같은 규칙을 따른다는 뜻이며, 양자화를 한 장소에서 한 번만 수행한다는 뜻은 아닙니다. 가중치가 갱신된 뒤에도 새 값을 같은 방식으로 양자화해야 합니다. Miles v0.1 §3.1

여기서 맞추는 대상은 학습 순전파와 추론의 계산입니다. 옵티마이저가 유지하는 상태나 역전파의 모든 연산까지 같은 비트 수로 바꾼다는 뜻은 아닙니다.

Miles의 FP4는 양쪽을 함께 맞춘다

Miles v0.1은 FP8, MXFP8, NVFP4에 대해 학습과 추론을 함께 구성하는 경로를 설명합니다. NVFP4는 4비트 부동소수점 기반의 양자화 형식입니다. 논문의 중요한 구분은 “FP4를 쓰지 않는다”가 아니라 “BF16 학습 + NVFP4 추론 조합은 지원하지 않는다”는 것입니다.

NVFP4 경로에서는 학습 순전파를 포함해 가중치를 다루는 단계들이 같은 양자화 규약에 참여해야 합니다. 학습 순전파가 양자화 없이 BF16 값만 사용하는 구성은 이 조건을 충족하지 않습니다. 반면 양쪽에 대응하는 NVFP4 규약을 적용하는 구성은 제공합니다. 논문 시점에서 MXFP8과 NVFP4 경로는 Beta이며, 지원하는 하드웨어와 검증된 모델의 범위가 정해져 있습니다. Miles v0.1 §3.1·표 5

따라서 RL에서 양자화를 선택할 때는 추론의 비트 수와 함께 학습 순전파가 어떤 값으로 계산하는가를 봐야 합니다. BF16 학습을 유지할 수도 있고, 양쪽이 같은 양자화 값을 보도록 구성할 수도 있습니다. 다음 글에서는 두 엔진 사이에 남는 확률 차이를 학습 업데이트에서 다루는 방법을 살펴보겠습니다.

목차로 돌아가기 ↑