LLM 추론 속도를 7.8배 높이는 법

LLM이 토큰을 생성하는 방식은 2017년 Transformer 논문 이후 크게 바뀌지 않았다. 하나를 만들고, 그 결과를 입력에 추가하고, 다음 하나를 만든다. 이 순서가 깨지면 정확도가 떨어진다. 그래서 모델이 아무리 빨라져도 긴 응답에서는 여전히 병목이 생긴다.

이 문제를 우회하려는 시도가 없었던 건 아니다. Speculative Decoding은 작은 드래프트 모델이 여러 토큰을 한 번에 생성하고, 큰 모델이 이를 검증하는 방식으로 속도를 높인다. EAGLE, Medusa 같은 변형도 나왔다. 하지만 이 접근법들은 공통적인 한계를 가진다. 드래프트 모델이 틀리면 검증 단계에서 롤백이 일어나고, 드래프트 모델 자체를 따로 학습하거나 유지해야 한다. 무엇보다 두 모델 사이의 구조적 이질성을 조율하는 비용이 작지 않다.

Orthrus는 다른 방향을 택했다. 드래프트 모델을 외부에서 붙이는 대신, 확산 모델의 병렬 생성 원리를 기존 자동회귀 LLM 안에 통합하는 방식이다. 논문 제목이 “Dual-View Diffusion”인 이유가 여기 있다.

두 개의 시선으로 같은 문장을 보다

Orthrus의 핵심 아이디어는 단순하다. 하나의 KV 캐시를 두 개의 헤드가 공유한다. 하나는 기존 자동회귀 헤드로, 이전 맥락을 정확하게 표현하는 역할을 담당한다. 다른 하나는 확산 헤드로, 여러 토큰 위치를 동시에 예측하면서 병렬 생성을 담당한다. 두 헤드는 동일한 내부 표현(KV 캐시)을 보고 있지만, 하는 일이 다르다.

결정적인 부분은 합의 메커니즘이다. 확산 헤드가 생성한 병렬 토큰들이 자동회귀 헤드의 예측과 일치하는지를 정확하게 검증한다. 여기서 “정확하게”라는 표현이 중요한데, 이 합의 과정이 수학적으로 무손실임이 보장된다. 즉, Orthrus가 생성하는 결과물의 분포는 기존 자동회귀 모델과 완전히 동일하다. 빠르게 생성하되 더 허술하게 생성하는 것이 아니라는 뜻이다.

학습 비용도 낮다. 전체 모델 파라미터 중 16%만 추가 학습하면 되고, 기본 LLM은 동결(frozen) 상태를 유지한다. 메모리 오버헤드는 O(1)로, 추가되는 캐시 비용이 시퀀스 길이에 비례해 늘어나지 않는다.

수치로 보는 성능

현재 공개된 모델은 Qwen3 기반 세 가지 크기다.

  • Orthrus-Qwen3-1.7B: 평균 4.25배 속도향상
  • Orthrus-Qwen3-4B: 평균 5.20배 속도향상
  • Orthrus-Qwen3-8B: 평균 5.36배 속도향상

최대 속도향상 수치는 7.8배다. 이건 최적 조건에서의 피크값이지만, 평균적으로도 5배 이상이면 실사용에서 체감 차이가 상당하다. MATH-500 벤치마크에서는 8B 모델 기준 6배 속도향상이 기록됐다. 수학 문제처럼 긴 추론 과정이 필요한 작업일수록 병렬 생성의 이점이 두드러진다.

비교 대상으로 언급된 방법들은 EAGLE-3, DFlash 등 기존 speculative decoding 계열이다. 논문에서는 이들 대비 토큰 수락률이 높다고 주장한다. 토큰 수락률은 드래프트 모델이 생성한 토큰이 검증을 통과하는 비율인데, 이 값이 높을수록 실질적인 속도 이득이 커진다.

고속 데이터 처리와 디지털 네트워크

이미지 출처: Unsplash

직접 써보기: 설치부터 실행까지

환경 요구사항

Orthrus는 CUDA 호환 GPU가 필수다. Flash Attention이 핵심 의존성인 만큼 GPU 없이는 실행 자체가 안 된다. CUDA 버전에 따라 Flash Attention 설치 경로가 달라지므로 먼저 자신의 환경을 확인해야 한다.

설치

레포지토리는 uv 패키지 매니저 사용을 권장한다. 일반 pip보다 의존성 해결이 빠르고 충돌이 적다.

# 레포지토리 클론
git clone https://github.com/chiennv2000/orthrus
cd orthrus

# 핵심 패키지 설치
uv pip install -e .
uv pip install ninja packaging

# Flash Attention 설치 (빌드 시간이 꽤 걸린다)
uv pip install flash-attn --no-build-isolation

CUDA 13을 지원하는 환경이라면 pip으로 직접 설치하는 방법도 있다.

pip install "flash-attn-4[cu13]"

Flash Attention 빌드는 GPU 환경과 CUDA 버전에 민감하다. 에러가 나면 --no-build-isolation 플래그와 ninja, packaging 선설치가 해결책인 경우가 많다.

모델 선택

HuggingFace의 chiennv 계정에서 세 가지 크기를 제공한다. 어떤 모델을 골라야 할지는 가진 GPU VRAM에 달려 있다.

모델 평균 속도향상 권장 대상
Orthrus-Qwen3-1.7B 4.25× 실험·프로토타이핑, VRAM 제약 환경
Orthrus-Qwen3-4B 5.20× 균형 잡힌 선택, 대부분의 단일 GPU
Orthrus-Qwen3-8B 5.36× 최고 성능, 최대 7.8× 피크

속도향상 폭은 생성 토큰 수가 많을수록 커진다. 짧은 응답보다 MATH-500처럼 긴 추론 과정이 필요한 태스크에서 차이가 극적으로 벌어진다.

코드 예시

사용법은 일반 HuggingFace Transformers 코드와 거의 같다. 차이는 use_diffusion_mode=True 파라미터 하나다.

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, TextStreamer

model = AutoModelForCausalLM.from_pretrained(
    "chiennv/Orthrus-Qwen3-8B",
    dtype=torch.bfloat16,
    device_map="cuda",
    attn_implementation="flash_attention_2",
    trust_remote_code=True,
).eval()

tokenizer = AutoTokenizer.from_pretrained("chiennv/Orthrus-Qwen3-8B")

messages = [
    {"role": "system", "content": ""},
    {"role": "user", "content": "Write a program to count word frequency in a paragraph."}
]

input_ids = tokenizer.apply_chat_template(
    messages,
    return_tensors="pt",
    add_generation_prompt=True,
    enable_thinking=False
).input_ids

output_ids = model.generate(
    input_ids=input_ids.to(model.device),
    max_new_tokens=2048,
    use_diffusion_mode=True,          # 이 한 줄이 Orthrus 모드를 활성화한다
    streamer=TextStreamer(tokenizer, skip_prompt=True)
)

enable_thinking=False는 Qwen3의 사고(thinking) 모드를 끄는 설정이다. Orthrus의 병렬 생성 이점을 온전히 보려면 긴 출력을 유도하는 편이 유리하다. max_new_tokens를 넉넉하게 설정하고, 코딩 문제나 수학 풀이처럼 단계별 추론이 길게 이어지는 태스크로 테스트해보는 것이 체감 속도 차이를 확인하기 좋다.

use_diffusion_mode=True를 빼면 기존 자동회귀 방식으로 돌아간다. 두 모드 결과물의 품질 차이를 같은 프롬프트로 비교해보는 것도 흥미로운 실험이다.

현재 한계

vLLM, SGLang과의 통합은 레포지토리에 “추후 지원 예정”으로 명시돼 있다. 아직은 HuggingFace Transformers 위에서만 동작하는 단계다. 프로덕션 API 서버로 올리거나 배치 추론을 처리해야 한다면 시기상조다. 연구 재현이나 로컬 실험 용도로 평가하는 것이 현실적인 접근이다.

논문은 arXiv 2605.12825로 등록됐고, MIT 라이선스로 공개돼 상업적 활용에도 제약이 없다.

이 접근법이 갖는 의미

Orthrus가 주목받는 이유는 속도 수치 자체보다는 접근 방식의 방향성에 있다. 확산 언어 모델(Diffusion LM)은 병렬 생성 능력이 있지만, 자동회귀 모델 대비 정확도가 떨어진다는 이유로 주류에 오르지 못했다. Orthrus는 이 두 패러다임을 분리해서 경쟁시키는 대신, 자동회귀 모델 안에 확산 특성을 심는 방식을 택했다. 정확도는 자동회귀로 보장하고, 속도는 확산으로 얻는 구조다.

추론 최적화 분야에서 무손실을 주장하는 방법들은 많지만 실제로 검증된 경우는 드물다. Orthrus가 주장하는 수학적 무손실이 다양한 벤치마크와 실무 환경에서도 유지되는지, vLLM·SGLang 통합 이후 실제 서빙 환경에서 같은 속도 이득이 나오는지를 확인해야 진짜 평가가 가능하다. 다만 구조 자체의 설득력은 충분하고, 파라미터 효율성과 메모리 오버헤드 측면의 이점은 실용적으로도 의미 있다. 오픈소스 추론 스택에 통합되는 시점이 이 기법의 실질적인 분기점이 될 것이다.


출처

댓글 남기기