본문으로 건너뛰기
HF Daily Papers조회 3

개인 장치에서 MoE 모델을 서빙하는 FreeToken

FreeToken은 PCIe 전송과 CPU 실행을 나눠 개인용 GPU에서 35B부터 753B MoE 모델까지 서빙한다.

왜 중요한가

오픈 웨이트 Frontier 모델은 공개돼도 수백 기가바이트의 Expert 풀과 데이터센터급 GPU가 필요해 개인 사용자와 소규모 팀이 지속적으로 실행하기 어려웠습니다. FreeToken은 GPU, CPU, 호스트 메모리, PCIe를 하나의 추론 플랫폼으로 조정해 8GB 노트북 GPU에서 35B 모델을 39.3 tok/s로 실행하고, 단일 RTX PRO 6000에서 753B GLM-5.2를 14.9 tok/s로 서빙했습니다.

핵심 기여

대역폭에 맞춘 GPU·CPU Expert 실행

FreeToken은 GPU 캐시에 없는 Expert를 모두 PCIe로 옮기는 대신, 측정한 PCIe 전송 대역폭과 CPU Expert 처리 대역폭의 비율에 따라 일부는 GPU 캐시에 채우고 나머지는 CPU에서 직접 실행합니다. 두 경로를 동시에 진행한 뒤 Gate 가중치가 적용된 부분 출력을 합쳐 원래 MoE 계산과 동일한 결과를 유지합니다. RTX 5090에서 이 정책은 Qwen3.6-35B-A3B와 DeepSeek-V4-Flash의 Decode 처리량을 기존 최선의 Edge 서빙 시스템보다 각각 1.8–2.3배와 1.5–1.9배 높였습니다.

Agent 문맥 편집을 위한 상태 재사용

Agent가 Thinking 구간이나 Tool 출력물을 삭제하면 기존 시스템은 마지막 유효 Checkpoint 이후 긴 문맥을 다시 계산해야 했습니다. FreeToken은 Thinking segment, Tool call, 대화 턴을 표시하는 특수 토큰 경계에 Recurrent state Checkpoint를 저장하고, 편집 뒤에도 남은 가장 깊은 Prefix에서 Full-Attention KV와 Recurrent state를 복원합니다. 그 결과 변경된 블록 뒤의 새 Suffix만 다시 Prefill하며, 여러 턴으로 이어지는 Coding과 Email·Calendar 작업에서 Decode 속도를 단일 턴 기준 12% 이내로 유지했습니다.

변하는 Edge 메모리를 위한 통합 실행 스택

FreeToken은 CPU 메모리에 전체 Routed Expert 풀을 원본 상태로 유지하고, 남은 GPU 메모리를 모든 MoE 층이 공유하는 Elastic Expert Cache로 사용합니다. Scheduler Safe Point에서 KV Cache와 Expert Cache의 용량을 새 VRAM 예산에 맞춰 재구성하며, 엔진 재시작이나 CPU Expert 풀 재로딩을 요구하지 않습니다. FTW 형식은 최종 Host Layout으로 Expert를 미리 병합해 직접 읽고, 20개가 넘는 MoE 모델과 8GB 노트북 GPU부터 RTX PRO 6000까지의 장치 구성을 지원합니다.

핵심 아이디어 이해하기

MoE는 한 층에 많은 Expert를 저장하지만 Router가 각 토큰을 소수의 Expert로만 보내므로 토큰당 계산량을 줄입니다. DeepSeek-V4-Flash는 256개의 Routed Expert 중 토큰마다 6개를 선택하고 43개 층에서 13B개의 활성 파라미터만 사용하지만, 284B 전체 Expert 가중치는 여전히 메모리에 있어야 합니다. 따라서 GPU에는 실제 계산에 필요한 일부 Expert만 두고 나머지는 CPU 메모리에 저장하는 구조가 필요합니다.

기존 방식의 병목은 Prefill과 Decode에서 다르게 나타납니다. 긴 입력을 처리하는 Prefill에서는 수천 개 토큰의 Router 선택이 거의 전체 Expert를 덮으므로 희소성이 사라지고, DeepSeek-V4-Flash의 약 140GB Expert 가중치를 PCIe로 반복 이동해야 합니다. Decode에서는 한 토큰에 선택되는 Expert가 적지만 GPU 캐시에 없는 Expert마다 전송이나 CPU 실행이 필요하며, Agent 문맥이 바뀔 때마다 이미 계산한 Prefix를 다시 처리하는 비용도 발생합니다.

FreeToken은 Prefill에서 현재 층을 GPU가 계산하는 동안 다음 층의 전체 Expert를 PCIe로 옮기는 이중 버퍼를 사용합니다. Agent 문맥이 Tool call이나 Thinking block 단위로 편집되면 해당 경계에 저장한 Recurrent state와 Prefix KV를 복원하고 변경된 Suffix만 다시 계산합니다. Decode에서는 최근 Router 선택을 공유 LRU Cache에 반영해 연속 토큰에서 재사용되는 Expert를 GPU에 남깁니다.

캐시에 없는 Expert는 장치별 대역폭에 따라 두 경로로 나뉩니다. PCIe 전송 대역폭을 BP, CPU Expert 처리 대역폭을 BH, 현재 누락된 Expert 수를 m이라고 할 때 GPU Cache에 채울 수는 대략 qmBPBHq^{\star}\approx m\,\frac{B_{P}}{B_{H}}개이며 나머지는 CPU에서 동시에 계산합니다. 예를 들어 Figure 2의 12개 Routed Expert 중 8개가 캐시에 있고 4개가 누락된 경우, 정책은 1개를 GPU로 채우고 3개를 CPU에서 실행하는 식으로 두 경로의 완료 시간을 맞춥니다.

방법론

FreeToken은 전체 Routed Expert 가중치를 CPU 상주 Expert 풀에 두고, 비-Expert 가중치는 GPU에 상주시킵니다. 남은 GPU 메모리는 MoE 층 전체가 공유하는 Elastic Expert Cache가 되며 각 슬롯은 하나의 층·Expert 조합에 필요한 모든 Tensor를 보유합니다. Prefill과 Decode가 같은 슬롯 풀을 공유하므로 Prefill에서 남은 Expert가 별도 복사 없이 Decode Cache의 초기 상태가 됩니다.

Prefill에서는 두 개의 전체 층 버퍼를 번갈아 사용합니다. GPU가 층 l의 활성 Expert를 계산하는 동안 전송 스트림은 라우팅 결과를 기다리지 않고 층 l+1의 전체 Expert를 PCIe로 읽으며, 두 버퍼의 역할을 교대해 이동과 계산을 겹칩니다. 두 층 버퍼를 확보할 수 없으면 GPU 메모리를 초과하지 않도록 On-Demand 로딩으로 전환합니다.

Decode에서는 GPU Router가 활성 Expert를 중복 제거하고 Shared LRU Cache의 적중 여부를 판정합니다. 누락된 Expert는 PCIe Cache Fill 집합과 CPU 실행 집합으로 나누며, CPU와 GPU가 각각 부분 합을 계산한 뒤 결합해 정확한 MoE 출력을 만듭니다. 이 제어 흐름은 CUDA Graph 안의 고정 형태 Work Buffer와 Device-resident valid count로 표현되고, Persistent C++ CPU Worker Pool이 CPU 경로를 처리합니다.

메모리 예산은 실행 중 Scheduler Safe Point에서 다시 나눕니다. FreeToken은 CPU Expert 풀이 정확성의 원본 상태이므로 GPU Cache 크기가 줄어도 모델 결과가 바뀌지 않으며, KV Cache와 Expert Cache의 비율만 새 VRAM 상황에 맞춰 조정합니다. FTW 형식은 Expert를 최종 Host Layout으로 병합해 디스크에서 정확한 크기의 고정 메모리 영역으로 직접 읽으며, 빈 버퍼를 먼저 고정해 페이지를 초기화하는 비용을 피합니다.

주요 결과

RTX 5090에서 FreeToken은 Qwen3.6-35B-A3B를 77–83 tok/s, DeepSeek-V4-Flash를 22–25 tok/s로 Decode했습니다. 이는 각 작업에서 가장 강한 기준 시스템보다 각각 1.8–2.3배와 1.5–1.9배 높은 수치이며, 세 가지 Agent 작업에서도 단일 턴 AIME 속도의 12% 이내를 유지했습니다. 반면 KTransformers의 DeepSeek-V4-Flash 속도는 두 번째 작업부터 단일 턴 대비 31% 감소했습니다.

첫 토큰 지연의 최악의 턴은 모든 workload에서 44초 아래였지만, 기준 시스템은 적어도 한 설정에서 150초를 넘겼습니다. 측정된 최대값은 llama.cpp 232초, Ollama 179초, KTransformers 946초였습니다. FreeToken의 8,192토큰 Prefill chunk는 PCIe 5.0 x16에서 1.19–1.22초에 처리됐고, 이중 버퍼를 끄면 4k·8k·16k 토큰에서 처리량이 각각 19%, 25%, 26% 감소했습니다.

RTX 5090에서 Qwen3.6-35B-A3B Expert 풀의 37%만 캐시할 수 있을 때 FreeToken의 LRU 누락률은 16%였고, DeepSeek-V4-Flash 풀의 11% 캐시 조건에서는 39%였습니다. 이는 KTransformers의 41%, 59%와 llama.cpp의 62%, 89%보다 낮았습니다. 다섯 소비자 시스템에서 기준 시스템 대비 Decode 처리량 개선 폭은 RTX 3090과 4090에서 1.3배, RTX 5090 서버에서 1.9배, RTX 5090 데스크톱에서 2.1배, RTX 4060 노트북에서 1.8배였습니다.

8GB RTX 4060 Laptop에서는 NVFP4 Qwen3.6-35B-A3B를 39.3 tok/s로 실행해 Codex 실서비스 중앙값 33 tok/s를 넘겼습니다. 32GB Gaming Desktop에서는 284B DeepSeek-V4-Flash를 Interactive하게 서빙했고, 단일 RTX PRO 6000에서는 753B GLM-5.2를 14.9 tok/s로 실행해 llama.cpp의 7.3 tok/s보다 2.0배 높았습니다. GLM-5.2의 평균 TTFT도 FreeToken 7.5초와 llama.cpp 7.8초로 비슷했습니다.

기술 상세

FreeToken의 핵심 메모리 구조는 CPU-resident Expert Pool과 GPU Shared Expert Cache의 2단계 계층입니다. CPU 풀은 모든 Routed Expert의 원본 상태를 보유하고 GPU Cache는 각 층·Expert 조합을 슬롯 단위로 저장합니다. Expert 식별자는 층과 Expert를 합친 논리 ID로 통일되므로 GPU Kernel과 CPU Executor가 모델별 Checkpoint 저장 형식과 무관하게 같은 Expert를 참조합니다.

Decode의 누락 분할은 PCIe와 CPU가 공유하는 Host Memory 대역폭을 기준으로 계산합니다. 한 Expert 크기를 S, 누락 수를 m, PCIe 전송 대역폭을 BP, CPU 처리 대역폭을 BH라고 하면, PCIe가 사용하는 뒤의 잔여 Host 대역폭은 BR=max(BHBP,0)B_{R}=\max(B_{H}-B_{P},0)입니다. GPU Cache Fill q개의 시간은 대략 qS/BP이고 CPU에서 실행하는 m-q개의 시간은 대략 (m-q)S/(BH-BP)이므로 두 시간을 맞추면 qmBPBHq^{\star}\approx m\,\frac{B_{P}}{B_{H}}가 됩니다. 예를 들어 BP가 BH에 가까우면 q star가 m에 가까워져 대부분을 GPU로 옮기고, BP가 BH보다 작으면 CPU가 더 많은 누락 Expert를 직접 처리합니다.

FreeToken은 각 층에서 CPU 경로를 먼저 시작한 뒤 GPU가 Cache Update, Cache Fill 복사, 기존 적중 Expert와 새 Expert의 Grouped Evaluation을 수행합니다. CPU Worker는 CPU-resident Expert 풀에서 Gate-weighted 부분 출력을 계산하고, GPU와 CPU의 부분 합을 결합합니다. 두 경로가 병렬 실행되므로 층의 노출 지연은 두 경로 중 더 긴 시간이며, q star가 이 시간을 대역폭 균형에 맞춥니다.

Dynamic LRU Cache는 GPU에서 Routed Expert를 중복 제거하고 현재 Residency Table과 비교한 뒤, 누락 수 q와 교체 Victim을 결정합니다. 전체 Cache를 교체 슬롯마다 반복 탐색하지 않고 한 번의 Kernel Pass에서 K개의 Least Recently Used 후보를 찾으며, 그중 앞의 q개를 사용합니다. 고정 형태 Work List와 Device-resident valid count가 사용되지 않는 항목을 마스킹하므로 Routing에 따라 달라지는 제어도 CUDA Graph 재생 안에서 처리됩니다.

Prefill의 이중 버퍼는 DeepSeek-V4-Flash FP4 배포에서 약 140GB Expert 가중치 이동을 계산과 겹칩니다. RTX 5090의 PCIe 5.0 x16에서 약 60GB/s, RTX 4090·3090급 PCIe 4.0 x16에서 약 25GB/s, 노트북의 x8 링크에서 약 10초 이상의 전송 시간이 발생하므로, Full-layer 선행 로딩이 GPU 유휴 시간을 줄이는 직접적인 경로가 됩니다. Recurrent Layer에는 Prefix Tree의 Semantic Anchor Checkpoint를 적용해 Tool call이나 Thinking block 편집 뒤에도 마지막으로 살아남은 상태에서 재개합니다.

실무 활용

FreeToken은 GPU 메모리보다 큰 MoE 모델을 개인용 GPU와 CPU 메모리의 조합으로 실행하는 Edge-native Inference Engine입니다. GitHub 저장소가 공개돼 있어 지원되는 모델과 하드웨어에서 Agent, Coding, Math 작업용 로컬 서빙 시스템으로 활용할 근거가 있습니다.

  • 8GB 노트북 GPU에서 35B급 MoE 모델을 로컬 Coding Agent에 연결할 수 있습니다. FreeToken은 CPU Expert 풀과 GPU Expert Cache를 함께 사용하고, 캐시 누락을 PCIe 전송과 CPU 실행으로 나눕니다. 논문 측정에서는 RTX 4060 Laptop에서 Qwen3.6-35B-A3B가 39.3 tok/s로 실행됐습니다.
  • 개인용 Gaming Desktop이나 Workstation에서 데이터센터급 MoE 모델을 대화형 Agent에 연결할 수 있습니다. 여러 턴의 Tool call과 문맥 편집이 발생하면 Semantic Anchor Checkpoint가 보존된 Prefix를 재사용하고 새 Suffix만 Prefill합니다. 측정에서는 32GB 데스크톱에서 284B 모델을, 단일 RTX PRO 6000에서 753B GLM-5.2를 실행했습니다.

코드 공개 여부: 공개

코드 저장소 보기

키워드

MoE(전문가 혼합 모델)Edge-native Inference(엣지 네이티브 추론)Expert Offloading(Expert 오프로딩)Bandwidth-adaptive Execution(대역폭 적응형 실행)Agentic State Reuse(Agent 상태 재사용)Runtime Memory Management(실행 중 메모리 관리)

용어 해설

Mixture-of-Experts(Mixture-of-Experts (MoE))
Mixture-of-Experts는 여러 Expert를 포함한 층에서 Router가 각 토큰마다 일부 Expert만 선택하는 구조입니다. 토큰당 연산량은 줄지만 전체 Expert 가중치는 메모리에 남아야 하므로, GPU에 일부를 캐시하고 나머지를 CPU 메모리에서 가져오는 서빙 전략이 필요합니다.
Expert 오프로딩(Expert Offloading)
Expert Offloading은 GPU 메모리에 전체 Expert를 담을 수 없을 때 일부 가중치를 CPU 메모리나 저장장치에 두고 실행 시 GPU로 이동시키는 방식입니다. 계산량보다 가중치 이동 시간이 병목이 될 수 있어 PCIe 전송과 CPU 실행을 함께 조정해야 합니다.
Prefill
Prefill은 입력 문맥의 여러 토큰을 한 번에 처리해 첫 토큰 생성에 필요한 상태를 만드는 단계입니다. 긴 프롬프트에서는 여러 토큰이 거의 모든 Expert를 활성화하므로 전체 Expert 풀의 이동과 문맥 재계산이 TTFT를 크게 늘릴 수 있습니다.
Decode
Decode는 이미 처리한 문맥 상태를 바탕으로 토큰을 하나씩 생성하는 단계입니다. 한 단계에서 선택되는 Expert 수는 적지만 GPU 캐시에 없는 Expert가 반복해서 발생하므로, 캐시 적중과 PCIe 전송 및 CPU 실행의 분할이 토큰 생성 속도를 좌우합니다.
CUDA Graph
CUDA Graph는 여러 GPU 연산과 메모리 작업의 실행 흐름을 미리 캡처한 뒤 반복 재생하는 방식입니다. FreeToken은 Expert 선택과 캐시 교체에 필요한 변하는 값을 고정 형태의 GPU 버퍼에 담아 토큰마다 Python이나 호스트 동기화를 실행하지 않도록 구성합니다.
AI 분석 전체 내용 보기

AI 요약 · 북마크 · 개인 피드 설정 — 무료

출처 · 인용 안내

원문 발행 2026. 08. 17.수집 2026. 08. 20.출처 타입 PAPER

인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.