PSA: llama.cpp에서 "threads" 인자 테스트해 보세요 (+제 경우 80% 성능 향상)
요약
llama.cpp 사용 시 '--threads' 인자 조절을 통해 Gemma 4 모델의 추론 성능을 최대 80% 향상시킨 실험 결과입니다. 하이브리드 CPU 환경에서 P-core만 사용하는 대신, 적절한 스레드 수를 설정하는 것이 성능 최적화에 핵심임을 보여줍니다.
핵심 포인트
- llama.cpp에서 스레드 수 조절로 성능 80% 향상 확인
- 하이브리드 CPU(P-core/E-core) 환경에서의 최적 스레드 설정 중요
- Gemma 4 26B 모델 테스트 결과 16개 스레드에서 최고 성능 기록
- 모든 코어(18개) 사용 시 오히려 성능이 저하되는 병목 현상 관찰
작년에 GPT-OSS 120B가 출시되었을 때, 저는 이것을 가지고 이것저것 시도하며 성능을 극대화하려고 노력했습니다. 많은 사람들이 지적했던 것 중 하나는 하이브리드 CPU (Performance + Efficiency cores)의 경우, "--threads" 인자와 taskset/affinity를 사용하여 P-cores(성능 코어)만 사용해야 한다는 것이었습니다. 당시 저는 친구의 14700K에서 해당 모델을 설정했고, 실제로 스레드를 8개(8개의 P-cores 때문)로 제한하니 성능이 향상되었습니다. 그래서 저는 그 이후로도 그 방식을 계속 사용해 왔고 그렇게 할 것을 권장해 왔습니다.
오늘 저는 Gemma 4 26B A4B QAT의 MTP draft 설정으로 이것저것 테스트를 하다가 문득 "스레드 수를 늘려보자"라는 생각이 들었습니다. 제 CPU (250K Plus)는 18개 코어 (6개의 performance core + 12개의 efficiency core)를 가지고 있습니다.
성능 향상이 매우 커서 확실히 하기 위해 간단한 기본 스크립트를 만들었습니다 (Wordpress용 PHP 코드를 생성하는 간단한 프롬프트, threads 인자를 제외한 동일한 설정, 동일한 seed, 오차를 줄이기 위해 1번의 warmup run 후 5번의 run 실행) 결과는 다음과 같습니다:
| threads | runs | min_tok/s | mean_tok/s | max_tok/s |
|---|---|---|---|---|
| 6 | 5 | 48,938 | 49,144 | 49,451 |
| 12 | 5 | 61,329 | 62,938 | 67,614 |
| 16 | 5 | 87,877 | 88,765 | 89,126 |
| 18 | 5 | 64,154 | 66,478 | 67,373 |
네. 6개 스레드 대신 16개 스레드를 사용함으로써 무려 80% 이상의 성능 향상을 얻었습니다. 저 또한 이렇게 빨라질 줄 믿기지 않아서 확인을 위해 벤치마크 스크립트를 만들었습니다.
6개 스레드 테스트에서는 /affinity 인자를 사용하여 P-cores에 고정했지만, 인자가 없을 때와 동일했습니다. 따라서 Arrow Lake의 Thread Director가 (이전에 테스트했던 Raptor Lake 기반의 14700K보다) 더 나은 것일 수도 있습니다.
흥미롭게도 18개 코어에서는 성능이 떨어지지만, 스로틀링(throttling)은 보이지 않습니다. 여전히 모든 코어가 풀 부스트(full boost) 상태이므로 병목 현상이 다른 곳에서 시작되는 것 같습니다. 혹시 아시는 분이 있다면 댓글로 알려주세요.
설정:
Intel 250K Plus + 64GB 6400MT/s + RTX 4070 SUPER 12GB (메모리 오버클럭 571GB/s 적용) + llama.cpp b9601
지금까지 테스트한 모든 것 중 저에게 가장 최고의 성능을 보여준 명령어입니다 (예를 들어, 많은 사람들이 spec draft를 3으로 설정하는 것을 보았는데, 저의 경우 QAT 모델에서는 '2'로 설정했을 때 성능이 향상되었습니다. 비(non)-QAT 모델에서는 3이 적당했습니다):
llama-server -m models/gemma-4-26B-A4B-it-qat-UD-Q4_K_XL.gguf --model-draft models/mtp-gemma-4-26B-A4B-it-qat.gguf --alias gemma4-26b-a4b-qat-q4xl-mtp -c 131072 -np 1 -b 2048 -ub 512 --threads 16 -ngl 99 -ncmoe 18 -fa on --spec-type draft-mtp --spec-draft-ngl 99 --spec-draft-n-max 2 --cache-type-k-draft q8_0 --cache-type-v-draft q8_0 --temp 1.0 --top-p 0.95 --top-k 64 --min-p 0.0 --repeat-penalty 1.0
따라서 저처럼 12GB VRAM을 사용 중이라면 위의 명령어를 시도해 보세요. 양자화(quant) 및 MTP 모델은 Unsloth 제품입니다. 물론 컨텍스트(context)가 늘어날수록 tok/s는 떨어지겠지만, 성능 차이의 비율은 여전히 동일합니다. 이 명령어가 아직 완벽하지 않을 수도 있습니다. 자고 일어나서 제가 세운 모든 가설을 다시 테스트해 볼 예정입니다. 왜냐하면 아마 다른 인자(argument)들도 잘못 설정했을 수도 있으니까요 ㅎㅎ
여러분의 CPU에서 성능이 어떻게 확장(scale)되는지 확인해 보세요. 저처럼 성능의 거의 절반을 놓치고 있을 수도 있습니다... 이제 Gemma 4 124B가 출시되지 않았다는 사실이 더 슬프게 느껴지네요. 왜냐하면 그 16 스레드(thread) 설정이라면 100% 충분히 빠를 것이기 때문입니다. 그 PC에 RAM 32GB만 더 추가했다면 완벽한 조합이었을 텐데 :( :( :( :(
게시물 플레어(flair)를 잘못 설정했다면 모더레이터(mods)분들께 사과드립니다. 이 게시물에 어떤 것을 사용해야 할지 전혀 모르겠습니다.
수정: 이 게시물은 저처럼 하이브리드(CPU+GPU) 방식을 사용하거나 순수 CPU 추론(inference)을 사용하는 경우를 가정합니다.
submitted by /u/AXYZE8
[link] [comments]
AI 자동 생성 콘텐츠
본 콘텐츠는 r/LocalLLaMA의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기