듀얼 GPU 환경에서의 llama.cpp 속도 향상
Dual GPU llama.cpp speedup
핵심 요약
llama.cpp의 텐서 병렬 처리 문제를 해결하여 듀얼 GPU 환경에서 40% 이상의 성능 향상을 이끌어낸 포크 버전을 소개함.
- 텐서 병렬 처리 — 기존 llama.cpp의 고질적인 텐서 분할 문제를 해결하여 듀얼 GPU 성능을 극대화함.
- 성능 벤치마크 — Qwen3.5 27B 모델 테스트 결과, 텐서 분할 적용 시 토큰 생성 속도가 40% 이상 향상됨.
- 사용자 피드백 — 듀얼 GPU 사용자들이 해당 포크 버전을 테스트하며 안정성과 성능 개선에 대해 활발히 논의함.
- 기술적 한계 — MoE 모델과의 호환성 문제 및 메모리 할당 관련 불안정성이 존재하여 추가적인 수정이 필요함.
llama.cpp는 오랫동안 "--split-mode tensor"와 관련된 고질적인 문제를 겪어왔습니다. 결과는 훌륭하지만 비양자화 KV 캐시만 지원하기 때문에, 많은 사람들이 텐서 병렬 처리를 무시하고 적절한 크기의 KV 캐시를 사용하는 방식을 택해왔습니다.
저는 이 문제를 해결하기 위해 시도해 보았습니다 - https://github.com/RedToasty/llama.cpp_qts - 오늘 기준으로 메인라인에서 분기되었으며, 변경 사항은 최소화했습니다.
저는 개인적으로 3060 12gb + 4070 Super 12gb를 사용하여 총 24gb로 구동 중입니다.
Q8_0/Q8_0 및 "-sm tensor"를 사용한 결과는 다음과 같습니다:
llama-bench.exe -m Qwen3.6-27B-Q4_K_M.gguf -sm tensor -fa 1 -ctk q8_0 -ctv q8_0 -p 128 -n 32 -b 128 -ub 128
| Model | Size | Params | Backend | NGL | Batch | UBatch | Type K | Type V | SM | FA | Test | Tokens/s |
|--------------------------|-----------:|---------:|---------|----:|------:|--------:|-------:|-------:|--------|---:|------|-----------------:|
| Qwen3.5 27B Q4_K Medium | 15.65 GiB | 26.90 B | CUDA | 99 | 128 | 128 | q8_0 | q8_0 | tensor | 1 | pp128 | 544.82 ± 6.01 |
| Qwen3.5 27B Q4_K Medium | 15.65 GiB | 26.90 B | CUDA | 99 | 128 | 128 | q8_0 | q8_0 | tensor | 1 | tg32 | 30.05 ± 0.38 |
텐서 분할을 사용하지 않았을 때의 결과입니다:
llama-bench.exe -m Qwen3.6-27B-Q4_K_M.gguf -fa 1 -ctk q8_0 -ctv q8_0 -p 128 -n 32 -b 128 -ub 128
| Model | Size | Params | Backend | NGL | Batch | UBatch | Type K | Type V | FA | Test | Tokens/s |
|--------------------------|-----------:|---------:|---------|----:|------:|--------:|-------:|-------:|---:|------|------------------:|
| Qwen3.5 27B Q4_K Medium | 15.65 GiB | 26.90 B | CUDA | 99 | 128 | 128 | q8_0 | q8_0 | 1 | pp128 | 582.60 ± 28.57 |
| Qwen3.5 27B Q4_K Medium | 15.65 GiB | 26.90 B | CUDA | 99 | 128 | 128 | q8_0 | q8_0 | 1 | tg32 | 21.22 ± 0.52 |
품질 저하 없이 40% 이상의 속도 향상을 보였습니다. 이 브랜치는 또한 최신 mtp 변경 사항을 지원하며, 저는 개인적으로 다음 설정을 사용하고 있습니다:
--spec-type draft-mtp --spec-draft-p-min 0.75 --spec-draft-n-max 2
개인적으로 사용할 때 "이야기 쓰기" 스타일의 짧은 컨텍스트에서 초당 토큰 수가 약 25tps에서 약 40tps로 증가했습니다. VRAM 제한 때문이라고 생각하지만, 에이전트 코딩이나 더 긴 컨텍스트를 사용할 때는 개인적으로 ngram-mod가 더 만족스러웠습니다.


