본문으로 건너뛰기
r/LocalLLaMA조회 1

Qwen3.8 27B 추론을 9.47에서 153 tok/s로 높인 실험

Qwen3.8 27B를 159회 실험해 chat template, KV cache, speculative decoding으로 9.474 tok/s를 153.32 tok/s까지 높였습니다.

이 요약은 AI가 원문을 분석해 생성했습니다. 정확한 내용은 원문 기준으로 확인하세요.

TL;DR

작성자는 AMD Ryzen AI MAX+ 395와 RTX 3090 Ti에 Qwen3.8 27B를 분할 배치하고 159회 실험해, AMD 단독 9.474 tok/s 기준을 code-shaped generation에서 32K 문맥 153.32 tok/s까지 높였습니다. 가장 큰 변화는 Qwen-Sharp chat template로 출력 토큰과 wall time을 줄인 조치였고, q4_0 KV cache는 2,176 MiB를 확보해 full-attention layer를 빠른 카드로 옮기게 했습니다. draft-mtp와 ngram-mod는 코드 출력에서 72~140% 개선됐지만 외부 draft 모델과 parallel drafting은 PCIe 통신 및 27B 검증 병목으로 실패했습니다. 15/15 retrieval과 HumanEval 159/164 결과는 유의미하지만, q4_0의 품질 변화와 로컬·원격 모델 구성 차이 때문에 개별 workload에서 재검증해야 합니다.

주요 논점

01찬성다수

작성자의 159회 실험은 layer 배치, KV cache 정밀도, chat template, 추측 생성, vision encoder 장치 선택을 분리해 비교했고 구체적인 속도·메모리·정확도 수치를 제시했습니다.

02중립분열

153.32 tok/s라는 수치는 code-shaped generation과 n-gram 추측 생성에 크게 의존하며, 로컬과 원격의 모델·배포 스택도 달라 순수 하드웨어 비교로 해석하기 어렵습니다.

03반대소수

q4_0 K cache와 비동일한 모델 구성을 사용한 비교는 품질 저하나 성능 우위를 일반화하기 어렵게 만들 수 있습니다. 다만 글 자체가 이 조건을 명시하고 자체 workload 검증을 요구합니다.

합의점 vs 논쟁점

논쟁점

  • Q4_K_M 로컬 모델과 AWQ-MTP 원격 모델을 비교한 결과를 하드웨어 성능 차이로 어느 정도까지 해석할 수 있는지가 쟁점입니다. 두 시스템은 모델 양자화와 fine-tune 상태가 달라 동일 조건의 benchmark가 아닙니다. 따라서 HumanEval과 retrieval 결과는 배포 스택 전체의 사례 비교에 가깝습니다.
  • q4_0 KV cache가 15/15 retrieval gate를 통과했더라도 K cache 정밀도 저하가 다른 작업의 답변 품질에 미치는 영향은 별도로 검증해야 합니다. 작성자는 이 형식이 실제 quality change라고 명시했습니다. 긴 문맥 retrieval 결과만으로 일반적인 생성 품질까지 보장할 수는 없습니다.

실용적 조언

  • 긴 문맥 추론을 튜닝할 때 GPU layer 배치만 먼저 바꾸기보다 chat template의 불필요한 서술을 줄이는 실험을 우선할 필요가 있습니다. 이 글에서는 Qwen-Sharp template이 출력 토큰을 51%, wall time을 44% 줄였습니다. 같은 모델과 workload에서 template 전후의 정확도와 실제 출력 길이를 함께 기록해야 합니다.
  • KV cache를 q8_0에서 q4_0으로 바꾸면 K와 V 모두에서 2,176 MiB를 확보할 수 있지만 품질 변화가 발생할 수 있습니다. 확보한 메모리는 full-attention layer를 더 빠른 GPU로 옮기는 데 사용되며, 이 실험에서는 prefill 28%와 generation 20% 개선으로 이어졌습니다. 적용 전후에 자신의 retrieval·코딩·대화 workload를 따로 실행해 품질과 속도를 함께 비교해야 합니다.
  • 코드 생성에서는 draft 모델을 무조건 추가하기보다 ngram-mod와 draft-mtp를 같은 환경에서 비교하는 편이 타당합니다. 외부 draft 모델은 PCIe 통신과 순차 생성 지연 때문에 target 검증 이득을 상쇄했고 multi-lane 방식은 1.62 tok/s까지 낮아졌습니다. draft 단계의 메모리가 부족할 때는 --spec-draft-ubatch를 64로 낮춰 1,039 MiB를 확보하는 방법도 실험 대상이 됩니다.

섹션별 상세

작성자는 AMD Ryzen AI MAX+ 395의 128GB unified memory와 eGPU RTX 3090 Ti를 함께 사용해 하나의 llama.cpp 프로세스에서 AMD는 Vulkan, NVIDIA는 CUDA로 분산 배치했습니다. AMD 단독 target-only 기준 9.474 tok/s였던 27B 모델이 code-shaped generation에서 32K 문맥 153.32 tok/s, 200K 문맥 87.74 tok/s를 기록했습니다. 같은 구성의 prose 생성은 200K 문맥에서 35.8 tok/s로 나타나 workload별 수치를 분리해야 한다는 조건이 붙었습니다.
채팅 template을 Qwen-Sharp로 바꾼 조치가 가장 큰 개선폭을 냈습니다. 더 짧은 template이 모델의 불필요한 서술을 줄여 wall time을 44%, 출력 토큰 수를 51% 줄였고 정확도 변화는 없었습니다. GPU 설정을 여러 주 조정한 것보다 입력 형식과 출력 습관을 제어한 효과가 컸다는 점이 핵심입니다.
KV cache의 q8_0 형식을 K와 V 모두 q4_0으로 낮추자 2,176 MiB가 확보됐고, 262K 문맥에서 full-attention layer 전체를 빠른 카드에 배치할 수 있었습니다. 그 결과 prefill은 28%, generation은 20% 개선됐습니다. Qwen3.8은 64개 layer 중 16개만 KV cache를 사용하는 3:1 Gated DeltaNet 대 full attention 구조이므로, 문맥 길이에 따라 비용이 커지는 layer를 어느 GPU에 둘지가 속도를 크게 좌우했습니다.
text
--spec-type draft-mtp,ngram-mod

MTP와 n-gram 기반 추측 생성을 함께 활성화하는 llama.cpp 실행 옵션입니다.

draft-mtp와 ngram-mod를 함께 지정한 추측 생성은 code-shaped output에서 72~140%의 속도 향상을 냈고 VRAM 비용은 없었습니다. 반면 외부 0.8B·4B draft 모델은 PCIe를 통한 순차 draft 지연 때문에 5.06~5.77 tok/s로 하락했으며, multi-lane parallel drafting은 1.62 tok/s까지 떨어졌습니다. target 모델의 27B verification pass가 병목인 상황에서는 draft 폭을 넓히는 방식이 오히려 손해였습니다.
text
--spec-draft-ubatch

추측 단계의 micro-batch 크기를 target 설정과 분리하는 llama.cpp 옵션입니다.

--spec-draft-ubatch를 64로 설정하자 target의 512 micro-batch가 draft 단계에 그대로 적용되며 잡아먹던 2.2 GiB compute buffer 중 1,039 MiB를 되찾았습니다. prefill 비용은 1.78% 늘었지만 추가 layer 하나를 배치할 공간이 생겼습니다. vision encoder는 기본적으로 이미 가득 찬 RTX 3090 Ti에서 884 MiB를 할당하려다 실패했지만 MTMD_BACKEND_DEVICE=Vulkan1로 idle iGPU에 옮겨 실행됐습니다.
text
MTMD_BACKEND_DEVICE=Vulkan1

vision encoder를 첫 번째 GPU 대신 Vulkan1 장치에서 실행하도록 지정하는 환경 변수입니다.

정확도와 비교 조건에는 제한이 있습니다. 로컬은 base 모델의 Q4_K_M, 원격은 AWQ-MTP fine-tune을 사용했으며, HumanEval은 standalone function 형식 때문에 공식 harness라면 발생하지 않았을 NameError가 5개 중 3개를 차지했습니다. q4_0 K cache는 실제 품질 변화가 있는 선택이므로 작성자의 15/15 long-context retrieval 통과 결과만으로 모든 workload에 안전하다고 볼 수 없습니다.

용어 해설

KV 캐시(KV cache)
Transformer가 이전 토큰의 Key와 Value를 저장해 긴 문맥에서 같은 계산을 반복하지 않게 하는 메모리 구조입니다. 저장 형식과 정밀도에 따라 메모리 사용량과 GPU별 layer 배치가 달라지므로 긴 문맥 추론 속도에 직접 영향을 줍니다.
Gated DeltaNet
Qwen3.8의 일부 layer에 사용된 순환형 상태 갱신 구조입니다. 일반적인 full attention과 달리 모든 이전 토큰 사이의 attention을 유지하지 않으므로 문맥 길이에 따른 KV cache 부담이 적습니다. 이 글에서는 64개 layer 중 48개가 이 구조로 구성됐습니다.
추측 디코딩(Speculative Decoding)
작은 draft 모델이나 별도 예측기를 이용해 여러 토큰을 먼저 생성한 뒤 큰 target 모델이 한 번에 검증하는 추론 방식입니다. 검증 비용과 장치 간 통신 지연이 draft 이득보다 크면 일반 생성보다 느려질 수 있습니다.
마이크로 배치(micro-batch)
한 번의 연산에서 함께 처리하는 토큰 묶음의 크기입니다. 크기를 키우면 prefill 처리량이 높아질 수 있지만 compute buffer를 더 많이 예약합니다. 이 글에서는 draft 단계의 micro-batch를 줄여 GPU 메모리를 확보했습니다.
HumanEval
생성된 코드가 주어진 함수 문제의 공식 테스트를 통과하는지 측정하는 코드 생성 benchmark입니다. 이 실험에서는 164개 문제를 실제 coding agent인 pi-agent로 실행하고 테스트 결과를 집계했습니다.

언급된 도구

llama.cpp중립

AMD Vulkan과 NVIDIA CUDA에 하나의 27B 모델을 분할 배치하고 target 및 speculative generation을 실행하는 추론 엔진입니다.

pi-agent중립

실제 coding agent로 HumanEval 164개 문제의 코드를 생성하고 공식 테스트를 실행하는 데 사용됐습니다.

vLLM중립

원격 2x RTX 3090 환경에서 tensor parallelism 2로 모델을 서비스하고 로컬 결과와 비교하는 배포 스택입니다.

언급된 리소스

AI 분석 전체 내용 보기

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

출처 · 인용 안내

원문 발행 2026. 08. 21.수집 2026. 08. 21.출처 타입 REDDIT

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