구형 GTX 1080에서 llama.cpp로 Gemma 4 26B 실행

발행: (2026년 5월 25일 AM 04:36 GMT+9)
8 분 소요
원문: Dev.to

출처: Dev.to

로컬에서 Google Gemma 4 26B‑A4B Mixture‑of‑Experts 모델 실행하기

(추측 디코딩 포함) — 전혀 맞지 않는 하드웨어에서도

Google의 Gemma 4 26B‑A4B는 Mixture‑of‑Experts 모델이다: 전체 파라미터는 252억 개이지만, 토큰당 활성화되는 파라미터는 38억 개에 불과하다. 이 차이는 로컬에서 실행할 때 엄청난 의미가 있다. 왜냐하면 차가운 전문가 가중치를 시스템 RAM에 두고 PCIe를 통해 스트리밍할 수 있으며, 실제로 GPU에 올라가는 작업 집합은 훨씬 작기 때문이다.

이 글에서는 2016년식 8 GiB VRAM을 가진 GeForce GTX 1080 카드와 Fedora 42 환경에서 Gemma 4를 실행해 128 k 컨텍스트 기준으로 초당 약 24.5 토큰을 달성하는 과정을 단계별로 설명한다. 여기에는 Gemma 4의 MTP 어시스턴트 헤드를 이용한 완전 GPU‑상주 추측 디코딩도 포함된다.

비교: 같은 과정을 거쳐 Qwen 3.6 35B‑A3B 모델도 실행해 보았다. 동일한 컨텍스트 길이에서 약간 느리게 출력됐으며, 같은 프롬프트에 대해 훨씬 더 장황했다. 따라서 일반적인 어시스턴트 작업에서는 토큰당 속도와 무관하게 Gemma 4가 전체적으로 더 빠르다.

전체 시스템 사양은 MoE 가중치를 PCIe를 통해 스트리밍할 때 CPU와 RAM이 GPU만큼 중요함을 보여준다.

구성 요소사양
CPUIntel i7‑6700 (Skylake, 4코어/8스레드, 2015)
RAM32 GiB 시스템 메모리
GPUNVIDIA GeForce GTX 1080, 8 GiB VRAM (Pascal, 2016)
OSFedora 42

여기서 특별히 새로운 점은 없다. 2025년에 200 USD 이하에 중고 GPU를 구매했을 뿐이다.

사전에 알아두어야 할 핵심 병목

# 모델이 생성 중일 때 PCIe 링크 상태 확인
lspci -vv -s 01:00.0 | grep LnkSta
#   LnkSta: Speed 8GT/s, Width x16
# 즉, PCIe 3.0 최대 속도로 동작 중

동시에 nvidia-smi는 GPU 사용률이 약 40–50 %임을 보여준다. PCIe가 포화 상태이고 GPU는 절반 정도만 사용 중이므로 대역폭 제한이며 연산 제한이 아니다. 이 설정에서 가장 중요한 사실은 토큰당 PCIe 버스를 통과하는 가중치 데이터 양을 줄이는 것이 성능 향상의 핵심이라는 점이다. 더 빠른 GPU를 장착해도 큰 도움이 되지 않는다.

속성
전체 파라미터25.2 B
토큰당 활성 파라미터3.8 B
레이어30
학습 컨텍스트256 K 토큰

트릭: MoE 모델은 토큰당 몇 개의 전문가만 활성화한다

llama.cpp는 이를 직접 제어할 수 있는 옵션을 제공한다.

--n-cpu-moe N          # 처음 N 레이어의 MoE 가중치를 CPU에 보관
--n-gpu-layers 999    # 나머지는 모두 GPU에 올림

GTX 1080에서 128 k 컨텍스트를 사용할 때 최적값은 --n-cpu-moe 21 (MTP 사용 시) 혹은 --n-cpu-moe 20 (MTP 미사용 시)이다.

Pascal (GTX 1080) 드라이버는 이제 레거시 단계에 진입했다. Fedora 42에서는 akmod-nvidia를 580xx 브랜치에 고정해야 한다.

dnf swap akmod-nvidia akmod-nvidia-580xx --allowerasing --releasever=44

--releasever=44 옵션은 현재 시스템이 Fedora 42이지만, 최신 저장소 메타데이터에서 580xx 패키지를 끌어오기 위해 필요하다.

CUDA 12.9 설정

dnf reinstall cuda-nvcc-12-9.x86_64
find / | grep nvcc
# /usr/local/cuda-12.9/bin/nvcc

export CUDACXX=/usr/local/cuda-12.9/bin/nvcc
gcc‑14 설치 (CUDA 빌드용)

CUDA 12.9는 Fedora 42가 기본 제공하는 최신 gcc와 호환되지 않는다.

dnf install gcc14 gcc14-c++

-DCMAKE_C_COMPILER 플래그만으로는 해결되지 않는다. NVIDIA/CUDA CMake 모듈 내부에 gcc가 하드코딩돼 있기 때문이다. 가장 간단한 우회 방법은 PATH 앞에 심볼릭 링크를 만드는 것이다.

mkdir -p ~/.local/bin
pushd ~/.local/bin/
  ln -s /usr/bin/gcc-14 gcc
  ln -s /usr/bin/g++-14 g++
popd

# ~/.local/bin 이 PATH 앞에 있는지 확인
echo $PATH

사용 후에 다른 빌드가 gcc‑14를 쓰지 않도록 심볼릭 링크를 삭제하는 것을 잊지 말자.

glibc 2.41 호환 패치 (math_functions.h)

CUDA 12.9 헤더는 오래된 glibc를 기준으로 작성되었으며, Fedora 42(glibc 2.41)에서는 몇몇 인라인 정의가 충돌한다. Gentoo에서 제공하는 패치를 적용한다.

# 패치를 직접 적용
$EDITOR /usr/local/cuda-12.9/targets/x86_64-linux/include/crt/math_functions.h

핵심 변경 내용: 다음 6개 함수의 시그니처에 noexcept(true) 혹은 throw()를 추가한다.

double rsqrt(double a);      double sinpi(double a);   double cospi(double a);
float  rsqrtf(float a);       float  sinpif(float a);  float  cospif(float a);

llama.cpp 포크

기본 llama.cpp는 대부분의 경우에 잘 동작하지만, 8 GiB 카드에서 Gemma 4를 사용하려면 두 가지 기능이 필요하다.

  1. RotorQuant – 16 k 컨텍스트와 128 k 컨텍스트 사이의 차이를 메우는 Gemma 전용 KV‑캐시 양자화 방식
  2. MTP 추측 디코딩 지원 – Gemma 4의 어시스턴트 헤드용

이 두 기능을 모두 포함한 포크는 AtomicBot-ai/atomic-llama-cpp-turboquant이다.

git clone https://github.com/AtomicBot-ai/atomic-llama-cpp-turboquant.git
cd atomic-llama-cpp-turboquant/
export CUDACXX=/usr/local/cuda-12.9/bin/nvcc

cmake --fresh -B build -DGGML_CUDA=ON -DCMAKE_CUDA_ARCHITECTURES=native
# 'native'는 현재 GPU의 Compute Capability를 자동으로 감지한다.

cmake --build build --config Release
# NB: --parallel 옵션은 문제를 일으킬 수 있어 사용하지 않는다.

정상 동작 확인

cd ./build/bin

./llama-cli --list-devices
# ggml_cuda_init: found 1 CUDA devices (Total VRAM: 8107 MiB):
#   Device 0: NVIDIA GeForce GTX 1080, compute capability 6.1, VMM: yes, VRAM: 8107 MiB

전체 도움말을 확인해 두면 유용하다. 플래그가 많아 자주 grep하게 된다.

./llama-server --help > llama.cpp-man.txt
wc -l llama.cpp-man.txt
# 570 llama.cpp-man.txt

모델 파일 준비

두 개의 GGUF 파일이 필요하다: 메인 모델과 MTP 어시스턴트 헤드.

huggingface‑cli 사용

hf download AtomicChat/gemma-4-26B-A4B-it-assistant-GGUF \
    --include "*Q4_K_M.gguf" --local-dir ./Models

hf download unsloth/gemma-4-26B-A4B-it-GGUF \
    --include "*Q4_K_M*.gguf" --local-dir ./Models

직접 wget 사용

wget https://huggingface.co/AtomicChat/gemma-4-26B-A4B-it-assistant-GGUF/resolve/main/gemma-4-26B-A4B-it-assistant.Q4_K_M.gguf
wget https://huggingface.co/ggml-org/gemma-4-26B-A4B-it-GGUF/resolve/main/gemma-4-26B-A4B-it-Q4_K_M.gguf

파일을 ~/Models/ 로 이동한다.

모델 카드

  • google/gemma-4-26B-A4B-it — 메인 모델
  • google/gemma-4-26B-A4B-it-assistant — MTP 추측 디코딩 헤드
  • AtomicChat GGUFs — 양자화된 어시스턴트 + 메인

서버 실행 (16384 컨텍스트)

cd ./build/bin

./llama-server \
    --model ~/Models/gemma-4-26B-A4B-it-Q4_K_M.gguf \
    --n-gpu-layers 999 \
    --n-cpu-moe 29 \
    --cache-type-k turbo3 --cache-type-v turbo3 \
    --flash-attn on \
    --no-mmap --mlock \
0 조회
Back to Blog

관련 글

더 보기 »

내 스킬

프로젝트를 위한 AI 지시문을 만들고, 설치하고, 관리하세요 — 코딩이 필요 없습니다. CREATE 이름을 정하고, 카테고리를 선택하고, 원하는 것을 설명하세요 — 마법사가 자동으로 구성합니다.