Flide는 공유 상태를 정확히 분기해 결정 추론을 최대 9.5배 빠르게 한다

Flide: Accelerating Decision Inference with Exact State Forking

arXiv2610.42148v1

Bobo Li2026-10-31

무엇인가

이 논문은 Jev 같은 결정 모델이 LLM 에이전트의 System One 실행에서 여러 선택지에 대한 확률 분포를 빠르게 내는 워크로드를 다룬다. 결정 요청은 긴 문맥 s와 여러 질문 q1…qn으로 구성되는데, 기존 생성 중심 엔진은 각 질문을 독립 프롬프트로 취급해 공유 문맥을 반복 계산하거나 접두사 캐시에서 다시 시작한다. vLLM은 최신 버전에서 공유 문맥을 한 번 계산하지만 각 질문은 여전히 별도 시퀀스로 실행되고, 하이브리드 모델의 재귀 상태 캐시는 블록 경계에서만 복원되어 경계 이후 토큰을 다시 계산한다. SGLang의 multi-item scoring은 모든 질문 앞에 구분자 토큰을 붙여 문맥을 공유하지만, 이 토큰이 질문의 은닉 상태와 출력 확률을 바꾼다. 동적 배칭은 부동소수점 합산 순서를 바꿔 같은 요청의 결정을 서버 부하에 따라 흔들리게 할 수 있다. 저자들은 근본 원인을 결정 요청의 논리적 트리 구조와 이를 선형 시퀀스로 실행하는 물리적 구조의 불일치로 본다.

어떻게 동작하나

문제를 수식으로 정리하면 요청 r=(s,q1,…,qn)에서 s는 P개 토큰이고 qi는 |qi|개 토큰이다. 각 질문은 독립적으로 물었을 때의 프롬프트 s⊕qi와 토큰 단위로 같아야 하며, 마지막 토큰의 은닉 상태 hi로 선택지 Oi에 대한 확률 p_i(o)=exp(w_o^T h_i)/Σ_{o′∈Oi}exp(w_o′^T h_i)를 계산한다. 단순 처리에는 nP+Σ|qi| 토큰 계산이 들지만, 공유 상태를 한 번만 계산하면 P+Σ|qi|로 줄일 수 있다. 그러나 모든 답이 독립 실행과 정확히 같아야 하고, Gated DeltaNet 층은 모든 이전 토큰을 하나의 재귀 상태로 압축해 마스크로 형제 질문을 분리할 수 없으며, 짧은 요청은 수천 개 커널 런치에 지배되고, 에이전트 이력은 이전 상태를 재사용해야 한다는 세 가지 난점이 남는다.

무엇과 다른가

ForkAttention은 한 라운드의 요청들을 [s(1)|s(2)|…|q1(1)|…]처럼 패딩 없이 하나의 평탄한 토큰 스트림으로 배치한다. 각 토큰은 요청 인덱스 j, 분기 인덱스 c(c=0은 공유 줄기), 순차 위치 t를 메타데이터로 갖고, 질문의 위치 인덱스는 P부터 이어져 독립 프롬프트와 같은 rotary 위치를 받는다. 완전 어텐션에서는 같은 요청이고, 키가 공유 줄기 또는 같은 질문에 속하며, 키 위치가 질의 위치보다 앞서야 한다는 조건으로 가시성을 제한한다. 슬라이딩 윈도우 층은 폭 W 조건을 추가한다. Gated DeltaNet 층은 첫 호출에서 모든 요청의 상태 구간을 처리해 각 요청의 마지막 재귀 상태 S_P와 컨볼루션 윈도를 출력하고, 두 번째 호출에서 모든 질문 구간을 한꺼번에 처리하되 각 질문이 인덱스로 자기 요청의 S_P에서 시작하게 한다. 상태 복사 없이 형제 분기를 격리하는 것이다. 논문의 명제 3.1은 정확 산술에서 Flide가 계산한 각 질문 토큰의 은닉 상태가 s⊕qi를 단독 처리한 것과 동일하다고 주장하며, 부동소수점에서는 반올림 수준 차이만 남는다고 설명한다.

어떻게 쓰나

Flat-graph 실행은 라운드 구성을 GPU 상주 메타데이터로 표현해 커널 런치 오버헤드를 줄인다. 세그먼트 길이, 위치, 키 범위, 상태 인덱스 등이 장치 버퍼에 들어가고, 커널은 그 내용으로 작업량을 정한다. 서버 초기화 때 스트림 용량 T별로 CUDA 그래프를 캡처해 두고, 라운드마다 수용 가능한 가장 작은 그래프를 고른다. 요청 사이에는 패딩을 넣지 않고 꼬리에서만 패딩하며, 가장 큰 그래프 용량을 넘는 라운드는 요청 경계에서 여러 번 재생하고, 단일 요청이 용량을 넘으면 그래프 재생 없이 같은 평탄 스트림 실행을 쓴다. Selective readout은 마지막 층에서 질문의 마지막 토큰 행에만 MLP 등을 실행해 출력에 영향을 주지 않고 일을 줄인다. 증분 상태 분기는 위치 m의 체크포인트에 모든 Gated DeltaNet 층의 float32 재귀 상태와 컨볼루션 윈도, m 이전 완전 어텐션의 키·값을 저장하고, 이후 요청의 토큰이 m까지 일치하면 그 체크포인트에서 재개한다. 체크포인트는 답을 계산하는 같은 순전파 패스에서 생성된다. 선택적 비트 단위 결정론 모드는 라운드 구성과 무관하게 각 출력 원소의 합산 순서를 고정하고 질문별 어텐션 타일과 Gated DeltaNet 청크를 배정해, 같은 하드웨어·소프트웨어에서 부하와 무관하게 같은 비트를 반환하도록 한다.

전제와 한계

실험은 NVIDIA H200 한 장에서 RACE, QuALITY, MultiRC, Decision Index로 만든 여섯 워크로드로 진행됐다. 한 상태에 질문 하나를 보내는 경우와 데이터셋의 여러 질문을 한 요청으로 보내는 경우를 모두 포함하며, MultiRC는 문단당 평균 48개 질문까지 있다. 모델은 Qwen3.5 0.8B~27B, Gemma 4 E2B~31B, 결정 전용 Open-Jev 2B·9B이고, 베이스라인은 vLLM, SGLang, SGLang multi-item scoring, vllm-jev와 RadixFlow다. 저자들이 보고한 핵심 수치는 최고 베이스라인 대비 최대 9.5배 낮은 지연과 8.5배 높은 처리량이다. 상태당 질문이 하나인 경우에도 가장 작은 Qwen3.5에서 단일 요청 지연을 최대 3.2배 줄였고, 완전 어텐션 모델인 Gemma 4에서는 vLLM의 접두사 캐시와 비교해도 다중 질문 요청 지연을 1.1~2.9배 줄였다. 한 상태에 64개 질문을 붙인 실험에서는 vLLM보다 12.7배 빨랐다. 결정 전용 Open-Jev에서는 짧은 입력에서 약 3배, 긴 프롬프트에서 최대 1.7배 빨랐다. SWE-agent 궤적 1000개 이상 상태 실험에서는 1000토큰당 한계 지연이 약 1ms에 머물렀고, 가장 강한 베이스라인보다 초당 4.4~7.2배 많은 단계를 완료했다.

답안 충실도 실험에서 Flide는 네 Qwen3.5 크기 평균으로 모든 워크로드에서 float32 기준의 최상위 답과 가장 자주 일치했고, 정확도는 모든 셀에서 vLLM과 1.2포인트 이내였다. 1개 클라이언트와 64개 클라이언트 사이의 최상위 답 변화율은 Flide가 최대 0.2%, SGLang이 최대 1.7%, vLLM이 최대 3.2%였다. 구분자 방식의 중앙값 출력은 float32 기준에서 Flide보다 약 12배 크게 벗어났고, 범주 결정을 최대 29% 뒤집은 반면 Flide는 최대 2.3%였다. Qwen3.5-4B 절제 실험에서 상태 분기를 빼면 다중 질문 QuALITY 문서 지연이 10배 이상 증가했고, CUDA 그래프를 빼면 짧은 입력에서 수천 개 커널이 순차 실행되어 큰 지연이 생겼으며, 플랫 그래프를 빼면 짧은 RACE 요청 라운드 처리량이 3분의 1 이상 줄었다. Selective readout도 추가 처리량 이득을 냈다.

개발자에게 이 논문은 긴 공유 문맥에 여러 개의 범주형 질문을 붙여 빠르고 보정된 확률이 필요한 서빙 경로, 특히 에이전트 라우팅·응답 평가·다음 행동 선택에 직접 관련된다. vLLM이나 SGLang을 그대로 쓰면서 질문별 프롬프트를 반복하거나 구분자로 문맥을 공유하고 있다면, 지연뿐 아니라 확률 왜곡과 부하에 따른 결정 변동을 확인해야 한다. Flide식 접근을 검토할 때는 하이브리드 모델의 Gated DeltaNet 상태 분기 지원, CUDA 그래프 용량과 라운드 분할, 체크포인트 재사용 조건, 선택적 결정론 모드의 하드웨어·소프트웨어 동일성 전제를 확인해야 한다. 저자들이 밝힌 한계와 전제는 명확하다. 정확성 명제는 정확 산술에서 성립하고 부동소수점에서는 반올림 수준 차이가 남으며, 비트 단위 동일성은 선택 모드에서 같은 하드웨어·소프트웨어일 때 보장된다. 가장 큰 그래프 용량을 넘는 라운드는 분할되고 단일 요청이 용량을 넘으면 CUDA 그래프 재생을 쓰지 못하며, 증분 재개는 체크포인트 위치까지 토큰이 일치해야 한다. 실험도 H200 한 장과 특정 모델·데이터셋·베이스라인 설정에 한정된다.