같은 매개변수를 세 방식으로 실행해
RetNet이 내세운 공학적 장점은 한 번 학습한 매개변수를 서로 호환되는 세 가지 방식으로 실행할 수 있다는 거야. 상황마다 가장 알맞은 방식을 고르면 돼.
병렬 방식(O(n²))은 어텐션처럼 n×n 점수 행렬을 만들고 지수 감쇠 마스크를 적용한 뒤 V와 곱해. 전체 시퀀스를 한 번에 다루며 GPU 병렬성을 최대한 쓰고 싶을 때 학습용으로 사용해. 표준 어텐션처럼 행렬 곱에 잘 맞는 형태야.
순환 방식(토큰당 O(1))은 상태 s를 유지하면서 토큰마다 갱신해. 자기회귀 추론에 사용하고 메모리와 계산량이 토큰마다 일정해. 긴 문맥 생성에서 유리한 방식이야.
청크 단위 순환 방식(O(N·B))은 시퀀스를 크기 B인 청크로 나눠. 청크 안에서는 병렬 방식을 쓰고, 청크 사이에서는 마지막 상태를 다음 청크로 넘겨 순환을 이어가. 긴 시퀀스 학습과 긴 프롬프트의 프리필에 알맞아. GPU 병렬성을 어느 정도 유지하면서 하나의 어텐션 행렬에 담을 수 없는 시퀀스를 처리할 수 있어.
청크 단위 방식이 둘 사이의 다리야
병렬 형태와 순환 형태를 함께 가진 아키텍처는 많아. RetNet이 실전에서 규모를 키울 수 있게 만드는 건 청크 단위 방식이야. 이 다리가 없으면 긴 시퀀스에서 O(n²) 메모리를 내거나 GPU 병렬성을 거의 포기해야 해. 청크 단위 처리는 두 극단 사이에 실제로 쓸 만한 절충점을 만들어.
벤치마크 수치도 컸어
원본 논문은 6.7B 규모에서 비슷한 Transformer보다 디코딩이 8.4배 빠르고, 메모리는 70% 적게 쓰며, 학습은 7배 빠르다고 보고했어. 측정한 조건에서는 실제 수치야. 다만 오늘날 FA3와 GQA로 최적화한 같은 규모의 Transformer와 비교해도 그대로인지는 어떤 기준 모델을 고르느냐에 달렸어.