TL;DR
16GB VRAM GPU에서 Qwen3.8-27B를 순차 레이어 offloading만으로 실행하면 일부 어텐션 연산이 CPU로 이동해 생성 속도가 8–12 t/s로 떨어지고 VRAM 활용도도 낮아집니다. 게시물은 `--override-tensor`로 세 블록마다 FFN 가중치만 CPU로 보내 약 2.8GB를 확보하고, Attention 연산과 65,536 컨텍스트의 2.125GB q8_0 KV Cache를 GPU에 유지합니다. 여기에 MTP 추측 디코딩의 초안 토큰 수를 2로 설정하고 생성·프롬프트 스레드를 분리해 약 18–20 t/s와 30–50% 처리량 향상을 목표로 합니다. RTX 50-Series에서는 CUDA 그래프를 비활성화해 동적 offloading 중 드라이버 지연을 줄이는 구성이 함께 제시됩니다.
실용적 조언
- `-ngl`로 레이어 수만 조절하기보다 `--override-tensor`에서 FFN 텐서 패턴을 지정해 VRAM 사용량을 세밀하게 조정합니다. 게시물의 정규식은 0, 3, 6부터 63까지 세 블록 간격의 FFN 텐서를 CPU로 보냅니다. 이 배치로 확보한 공간은 65,536 컨텍스트의 q8_0 KV Cache에 사용되며, 게시물은 2.125GB VRAM과 tail-token divergence 및 코딩 문법 문제 없음이라는 결과를 제시합니다.
- `--spec-type draft-mtp`와 `--spec-draft-n-max 2`를 함께 지정해 MTP 추측 디코딩을 활성화합니다. 게시물은 27B dense 아키텍처에서 이 설정이 처리량을 약 30–50% 높인다고 기록합니다. 초안 KV Cache에도 `q8_0`을 지정해 주 모델의 65,536 컨텍스트 설정과 형식을 맞춥니다.
- 생성 스레드는 `-t 8`로 물리적 CPU 성능 코어에 제한하고, 프롬프트 입력 배치 스레드는 `-tb 16`으로 하이퍼스레딩을 활용하게 분리합니다. RTX 50-Series에서는 `GGML_CUDA_DISABLE_GRAPHS=1`을 설정해 동적 offloading 중 CUDA 그래프 캡처로 인한 드라이버 정지를 피합니다. `GGML_CUDA_ENABLE_UNIFIED_MEMORY=1`도 함께 지정해 CPU와 GPU 메모리 운용을 허용합니다.
섹션별 상세
용어 해설
- KV 캐시(KV Cache)
- — KV Cache는 Transformer의 어텐션이 이전 토큰의 Key와 Value를 저장해 긴 문맥에서 같은 계산을 반복하지 않게 하는 메모리 구조입니다. 이 글에서는 65,536 토큰 문맥을 유지하기 위해 K와 V를 각각 q8_0 형식으로 저장합니다.
- 피드포워드 네트워크(FFN)
- — FFN은 Transformer 블록 안에서 각 토큰의 표현을 독립적으로 변환하는 가중치 층입니다. 이 글의 설정은 FFN 가중치 일부만 CPU 메모리로 보내 GPU VRAM을 확보하고, 어텐션 연산은 GPU에 남기는 방식입니다.
- MTP 추측 디코딩(MTP Speculative Decoding)
- — MTP Speculative Decoding은 별도의 초안 생성 경로가 여러 후속 토큰을 먼저 예측하게 한 뒤 주 모델이 이를 검증하는 추론 방식입니다. 게시물은 27B dense 모델에서 `draft-mtp`와 최대 초안 토큰 2개를 사용합니다.
- CUDA 그래프(CUDA Graphs)
- — CUDA Graphs는 반복되는 GPU 작업을 그래프로 캡처해 실행 오버헤드를 줄이는 기능입니다. 게시물은 RTX 50-Series에서 동적 offloading 중 발생하는 드라이버 지연을 피하려고 `GGML_CUDA_DISABLE_GRAPHS=1`을 지정합니다.
- 텐서별 배치 재정의(--override-tensor)
- — `--override-tensor`는 모델 전체 블록이 아니라 이름 패턴에 맞는 특정 텐서의 실행 장치를 재지정하는 llama.cpp 계열 옵션입니다. 게시물은 세 블록마다 FFN 텐서를 CPU로 보내 약 2.8GB의 VRAM을 회수합니다.
코드 예제
#!/usr/bin/env bash
# Blackwell / RTX 50-series runtime stability environment variables
export GGML_CUDA_DISABLE_GRAPHS=1
export GGML_CUDA_ENABLE_UNIFIED_MEMORY=1
llama-server \
-m models/Qwen3.8-27B-IQ4_XS.gguf \
--host 0.0.0.0 \
--port 8085 \
--jinja \
--chat-template-kwargs '{"reasoning_effort": "medium"}' \
--reasoning-preserve \
-fa on \
--fit off \
-ngl 99 \
--override-tensor "blk\.(0|3|6|9|12|15|18|21|24|27|30|33|36|39|42|45|48|51|54|57|60|63)\.ffn_.*=CPU" \
-c 65536 \
--cache-type-k q8_0 \
--cache-type-v q8_0 \
--spec-type draft-mtp \
--spec-draft-n-max 2 \
--cache-type-k-draft q8_0 \
--cache-type-v-draft q8_0 \
--parallel 1 \
-b 512 \
-ub 256 \
-t 8 \
-tb 16 \
--mlock \
--temp 1.0 \
--top-p 0.95 \
--top-k 20 \
--min-p 0.0 \
--presence-penalty 0.0 \
--repeat-penalty 1.016GB VRAM과 64GB 시스템 RAM 환경에서 Qwen3.8-27B를 실행하도록 FFN 일부를 CPU로 이동하고 q8_0 KV Cache, MTP 추측 디코딩, CPU 스레드 배치를 함께 설정한 llama-server 실행 명령입니다.
언급된 도구
Qwen3.8-27B GGUF 모델을 65,536 컨텍스트와 q8_0 KV Cache 설정으로 서빙하는 추론 서버입니다.
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.