10년 된 Xeon으로 LLM을 돌리다 — Gemma 4 26B를 GPU 없이 실행한 사례

> 최신 26B MoE 모델을 2016년형 Xeon E5-2620 v4 + DDR3 128GB 단일 서버에서 읽기 속도 수준으로 돌린 실험이 화제입니다. GPU가 없어도 추론 엔진과 메모리 구조를 깊게 이해하면 오래된 서버에서도 최신 오픈 가중치 모델을 실행할 수 있다는 점이 핵심입니다.
테스트 환경과 핵심 병목
테스트 서버는 재활용 장비로, 사양은 다음과 같습니다.
• CPU: Intel Xeon E5-2620 v4 @ 2.10GHz
• 코어: 8코어 16스레드
• 캐시: 20MiB L3, 2MiB L2
• 메모리: DDR3 128GB
• GPU: 없음
• 지원 명령어: AVX2 (AVX-512, AVX-VNNI, BF16 미지원)
• 통합 GPU: 없음
이 CPU는 2016년에 출시된 서버용 칩셋입니다. AVX-512도, BF16도 지원하지 않으며 통합 GPU조차 없습니다. 그럼에도 Gemma 4 26B-A4B 모델이 읽기 속도 수준으로 동작합니다.
LLM 추론에서 토큰을 하나씩 생성하는 디코더 패스는 주로 연산량이 아니라 메모리 대역폭에 묶입니다. 다음 토큰을 계산하려면 모델의 학습 지식이 담긴 가중치를 RAM에서 CPU 캐시와 코어로 계속 옮겨야 하며, 프로세서는 행렬 계산보다 다음 가중치 이동을 기다리는 시간이 더 큽니다. 이런 메모리 벽(memory wall)은 Xeon뿐 아니라 H100 같은 고성능 장비에서도 중요한 성능 장벽으로 작동합니다.
블랙박스 도구 대신 필요한 실행 노브
단순히 DDR3·무GPU 환경에서 llama-cli를 실행하면 매우 느리고, 일반 GPU 사용 사례에 맞춘 최적화 때문에 많은 개선 여지가 남습니다. ollama는 필요한 모델 지원이 없을 수 있고, 실행 성능을 제대로 끌어올릴 만큼 충분한 세부 설정을 노출하지 않습니다.
실제 실행은 ik_llama.cpp가 노출하는 다수의 플래그를 조합해야 가능합니다. 핵심 플래그 묶음은 다음과 같습니다.
--spec-type mtp --draft-max 3 --draft-p-min 0.0 --spec-autotune-sm graph -smgs -sas -mea 256 --split-mode-f32-t 8 --parallel 8--cpu-moe --merge-up-gate-experts--flash-attn on --mla-use 3--mlock --run-time-repack --no-kv-offload
추측 디코딩과 MoE 최적화
--spec-type mtp --draft-max 3 --draft-p-min 0.0 --spec-autotune는 26B 검증기를 이전에 만든 작은 MTP 드래프터와 함께 사용합니다. --draft-max 3은 드래프트당 최대 3토큰, --draft-p-min 0.0은 모든 확률 수용, --spec-autotune은 워크로드에 맞춰 체인 길이를 조정합니다.
긴 추론 체인을 생성할 때 사용자에게 최종 답변만 짧게 보이더라도, 숨겨진 사고 토큰마다 전체 디코더 패스가 필요합니다. CPU에서는 검증기 가중치를 캐시로 스트리밍하는 비용이 크고, 작은 드래프터의 활성 레이어는 L3 캐시에 잘 맞기 때문에 추측 디코딩의 이점이 더 강해집니다.
Gemma 4 26B-A4B는 128개 전문가 중 토큰당 8개가 활성화되는 MoE 구조이며, 전체 약 25.2B 파라미터 중 활성 파라미터는 약 3.8B입니다. --cpu-moe는 CPU 캐시 계층에 맞춰 라우팅을 조정하고, 128개 전문가 사이를 계속 오가며 캐시를 비우고 DDR3에서 다시 가져오는 캐시 스래싱을 줄이도록 동작합니다. --merge-up-gate-experts는 전문가 내부의 up projection과 gate projection을 하나의 행렬 곱으로 융합합니다.
-t 8은 물리 코어 8개에 맞춘 설정이며, 메모리 병목 워크로드에서 16개 SMT 스레드를 모두 쓰는 것은 처리량보다 스케줄링 비용을 늘릴 수 있습니다.
메모리 고정, 재배치, 그래프 분할
--run-time-repack은 추론 직전 가중치 행렬을 CPU 캐시 레이아웃에 맞게 재구성하며, 로그에는 Repacked 265 tensors로 나타납니다. 이 설정은 시작 시 몇 초의 비용을 들여 RAM 안의 숫자 테이블을 CPU가 더 잘 읽을 수 있는 형태로 재배치하고, 실제 텍스트 생성 중 메모리 대역폭을 최대한 활용하게 합니다.

--mlock은 모델을 RAM에 고정해 운영체제가 디스크로 스왑하지 못하게 하는 설정입니다. 커널의 memlock 제한이 충분하지 않으면 failed to mlock 경고가 나오며, 이는 LLM 자체 문제가 아니라 기본 ulimit 설정 문제입니다.
--no-kv-offload는 GPU가 없는 환경에서 KV 캐시를 GPU로 옮기려는 탐색을 건너뛰고, 시스템 RAM에 유지하게 합니다.
Attention과 메모리 사용량
ikawrakow는 CPU에서 Flash Attention을 처리하는 커스텀 커널을 작성해, 무거운 컨텍스트 처리에서 GPU 없이 동작하게 합니다. --flash-attn on은 attention softmax와 행렬 곱을 융합해 전체 N×N attention 행렬을 RAM에 물리적으로 쓰지 않고, 작은 청크 단위로 캐시 안에서 계산하고 소비하게 합니다.
--mla-use 3은 Multi-Head Latent Attention을 활성화해 KV 캐시의 Key와 Value를 더 작은 잠재 표현으로 압축합니다. 로그에는 flash_attn = 1, fused_moe = 1, fused_up_gate = 1이 표시되어 해당 최적화가 실제로 적용됩니다.
메모리 로그 기준 전체 레이어 합계는 81,607.46MiB이고, 모델 텐서와 캐시에 필요한 메모리는 82,355MiB입니다. 전체 262K 컨텍스트에서 가중치는 약 25GB, KV 캐시는 약 56GB로, KV 캐시가 모델보다 큽니다.
실전 팁 — 오래된 서버에서 LLM 돌리기
이 사례에서 얻을 수 있는 교훈을 정리하면 다음과 같습니다.
1. ollama 같은 블랙박스 도구보다 ik_llama.cpp 같은 직접 제어 가능한 포크를 사용하세요. 세부 조정 노브가 훨씬 많습니다.
2. SMT 스레드는 무조건 많이 쓰는 게 아닙니다. 메모리 병목 워크로드에서는 물리 코어 수에 맞추는 것이 스케줄링 비용을 줄입니다.
3. --mlock 사용 시 커널의 memlock 제한을 충분히 풀어주어야 합니다.
4. 추측 디코딩은 작은 드래프터 모델을 L3 캐시에 맞출 수 있을 때 효과가 극대화됩니다.
5. MoE 모델은 --cpu-moe로 캐시 친화적 라우팅을 적용하고, 가능하면 up/gate projection을 융합하세요.
6. 시작 시 몇 초를 --run-time-repack에 투자해 가중치를 CPU 캐시 레이아웃에 맞게 재배치하세요.
전망 — 로컬 LLM의 미래
이 설정은 25B 파라미터 MoE를 로드하고 MTP 드래프터로 추측 디코딩을 수행해, 2016년형 Xeon과 DDR3, GPU 없는 서버에서 읽기 속도로 텍스트를 생성합니다. 결론은 최신 오픈 가중치 AI의 로컬 실행 병목이 실리콘만이 아니라 추론 엔진의 동작과 메모리 구조를 이해하는 데 있으며, 올바른 포크, 보정된 양자화, 메모리 아키텍처 이해가 있으면 오래된 서버에서도 실행 가능하다는 것입니다.
2년 전 Amazon에서 리퍼 2× E5-2690v4 서버, 128GB RAM이 500달러 미만에 거래되기도 했습니다. 6년 전에는 고사양 게이밍 PC에서 재미는 있지만 별 쓸모없는 모델을 돌렸는데, 지금은 M5 노트북에서 그보다 100배 나은 걸 돌릴 수 있습니다. 시장이 메모리 부족에 반응하고 Apple silicon 발전이 같은 속도로 계속된다면, 6년 뒤 로컬에서 돌릴 수 있는 것은 매우 흥미롭거나 무서울 것입니다.
요약
• 2016년형 Xeon E5-2620 v4 + DDR3 128GB 단일 서버에서 Gemma 4 26B-A4B를 읽기 속도 수준으로 실행 가능
• 핵심은 ik_llama.cpp의 세부 플래그(추측 디코딩, MoE 라우팅, 메모리 재배치) 조합
• 전체 메모리 요구량 82,355MiB, KV 캐시(56GB)가 모델 가중치(25GB)보다 큼
• 로컬 LLM의 병목은 실리콘이 아니라 추론 엔진과 메모리 구조 이해
• 오래된 서버라도 적절한 최적화면 "충분히 좋은" 로컬 AI 환경이 가능
📚 출처
'AI 뉴스' 카테고리의 다른 글
| Codexplain: Codex의 설명을 Claude Code처럼 구조화해주는 로컬 UX 레이어 (0) | 2026.06.03 |
|---|---|
| Spanlens - LLM 호출과 에이전트 trace를 한 곳에서 보는 오픈소스 관측 플랫폼 (0) | 2026.06.02 |
| ChatGPT for Google Sheets 프롬프트 인젝션 공격 분석 — 워크북 유출과 피싱 오버레이 (0) | 2026.06.02 |
| MiniMax-M3 데뷔, GPT-5.5·Gemini 3.1 Pro 추월하고 비용은 5-10% 수준 (0) | 2026.06.02 |
| NVIDIA RTX Spark 공개 — 개발자가 알아야 할 핵심 정리 (0) | 2026.06.02 |