듀얼 Mi50에서 더 성공적인 Qwen3.6-27B MTP
요약
본 기사는 Qwen3.6-27B 모델을 듀얼 Mi50 GPU 환경에서 MTP(Model Tensor Parallelism) 양자화 기술을 적용하여 테스트한 결과를 공유합니다. MTP를 적용했을 때 기존 대비 평균적으로 약 1.5배의 속도 향상을 보였으며, 특히 텐서 병렬화(Tensor Parallelism)까지 결합하자 최대 2배에 가까운 성능 개선 효과를 확인했습니다. 이러한 테스트는 `llama.cpp` 포크와 ROCm 환경을 사용하여 진행되었으며, 다양한 추론 작업(코드 생성, 요약 등)에서 MTP 적용 시 높은 토큰/초(tok/s) 수치를 기록하며 모델의 효율성을 입증했습니다.
핵심 포인트
- MTP 양자화 기술은 Qwen3.6-27B와 같은 대규모 언어 모델의 추론 속도를 크게 향상시킬 수 있습니다.
- MTP 적용만으로도 기존 대비 약 1.5배의 성능 개선이 관찰되었습니다.
- 텐서 병렬화(Tensor Parallelism)를 함께 사용하면 최대 2배에 가까운 극적인 속도 향상을 달성할 수 있습니다.
- 테스트는 ROCm 환경과 커스텀 `llama.cpp` 빌드를 통해 진행되었으며, 다양한 작업 유형에서 성능 우위를 보였습니다.
TLDR: 기대는 현실이었습니다! 1.5배 속도 향상. 텐서 병렬화 (Tensor Parallelism) 사용 시 최대 2배 속도 향상!
Unsloth의 MTP 양자화 (quants) 모델은 여기 있습니다: https://huggingface.co/unsloth/Qwen3.6-27B-GGUF-MTP
PR을 읽은 후 즉시 MTP 호환 Q4_1 양자화 모델을 찾아보았습니다 (연산 능력이 부족한 구형 카드에서는 약간의 속도 향상을 제공합니다) 하지만 찾을 수 없었습니다.
다행히도 이 포스트를 발견했는데, 여기에는 MTP 이식 (grafting)을 본인의 양자화 모델에 어떻게 적용하는지가 강조되어 있었고, 덕분에 이미 가지고 있던 Unsloth 양자화 모델에 이를 부착할 수 있었습니다.
설정 (Setup)
- CachyOS (Arch Linux)
- ROCm 7.2
- 두 카드 모두 PCIe 4.0 x 8로 작동
https://github.com/ggml-org/llama.cpp/pull/22673이 포함된 llama.cpp 포크 https://github.com/skyne98/llama.cpp-gfx906를 빌드하였으며, 포함된 PR 벤치마크 스크립트로 다음 명령어를 실행했습니다:
llama-server -m ~/models/Qwen3.6-27B-MTP-Q4_1.gguf \
--temp 1.0 --min-p 0.0 --top-k 20 --top-p 0.95 \
--jinja --presence-penalty 1.5 \
--chat-template-kwargs '{"preserve_thinking": true}' \
-ub 2048 -b 2048 \
-fa 1 -np 1 \
--no-mmap --no-warmup \
-dev ROCm0,ROCm1 --fit on -fitt 256
스크립트 벤치마크 (Script Benchmark)
순정 (Stock):
code_python pred= 192 draft= 0 acc= 0 rate=n/a tok/s=26.2
code_cpp pred= 192 draft= 0 acc= 0 rate=n/a tok/s=26.2
explain_concept pred= 192 draft= 0 acc= 0 rate=n/a tok/s=26.3
summarize pred= 192 draft= 0 acc= 0 rate=n/a tok/s=26.4
qa_factual pred= 192 draft= 0 acc= 0 rate=n/a tok/s=26.4
translation pred= 192 draft= 0 acc= 0 rate=n/a tok/s=26.4
creative_short pred= 192 draft= 0 acc= 0 rate=n/a tok/s=26.4
stepwise_math pred= 192 draft= 0 acc= 0 rate=n/a tok/s=26.3
long_code_review pred= 192 draft= 0 acc= 0 rate=n/a tok/s=26.0
MTP 적용 시: --spec-type mtp --spec-draft-n-max 2
code_python pred= 192 draft= 144 acc= 119 rate=0.826 tok/s=39.6
code_cpp pred= 192 draft= 156 acc= 113 rate=0.724 tok/s=36.5
explain_concept pred= 192 draft= 154 acc= 113 rate=0.734 tok/s=36.7
summarize pred= 192 draft= 138 acc= 121 rate=0.877 tok/s=40.7
qa_factual pred= 192 draft= 144 acc= 119 rate=0.826 tok/s=39.4
translation pred= 192 draft= 152 acc= 115 rate=0.757 tok/s=37.5
creative_short pred= 192 draft= 156 acc= 113 rate=0.724 tok/s=36.6
stepwise_math pred= 192 draft= 146 acc= 118 rate=0.808 tok/s=39.0
long_code_review pred= 192 draft= 150 acc= 115 rate=0.767 tok/s=37.8
합계 (Aggregate): {
"n_requests": 9,
"total_predicted": 1728,
"total_draft": 1340,
"total_draft_accepted": 1046,
"aggregate_accept_rate": 0.7806,
"wall_s_total": 51.42
}
텐서 병렬화 (Tensor Parallelism) 적용 시: -sm tensor
code_python pred= 192 draft= 0 acc= 0 rate=n/a tok/s=35.0
code_cpp pred= 192 draft= 0 acc= 0 rate=n/a tok/s=34.8
explain_concept pred= 192 draft= 0 acc= 0 rate=n/a tok/s=34.6
summarize pred= 192 draft= 0 acc= 0 rate=n/a tok/s=34.6
qa_factual pred= 192 draft= 0 acc= 0 rate=n/a tok/s=34.7
translation pred= 192 draft= 0 acc= 0 rate=n/a tok/s=34.7
creative_short pred= 192 draft= 0 acc= 0 rate=n/a tok/s=34.7
stepwise_math pred= 192 draft= 0 acc= 0 rate=n/a tok/s=34.6
long_code_review pred= 192 draft= 0 acc= 0 rate=n/a tok/s=34.3
MTP와 텐서 병렬화 (Tensor Parallelism) 결합 시:
code_python pred= 192 draft= 142 acc= 120 rate=0.845 tok/s=59.8
code_cpp pred= 192 draft= 148 acc= 116 rate=0.784 tok/s=56.6
explain_concept pred= 192 draft= 146 acc= 117 rate=0.801 tok/s=56.8
summarize pred= 53 draft= 42 acc= 31 rate=0.738 tok/s=54.5
qa_factual pred= 192 draft= 148 acc= 117 rate=0.790 tok/s=56.8
translation pred= 192 draft= 146 acc= 117 rate=0.801 tok/s=57.3
creative_short pred= 192 draft= 154 acc= 114 rate=0.740 tok/s=54.8
stepwise_math pred= 192 draft= 140 acc= 121 rate=0.864 tok/s=59.6
long_code_review pred= 192 draft= 148 acc= 117 rate=0.790 tok/s=56.2
Aggregate: {
"n_requests": 9,
"total_predicted": 1589,
"total_draft": 1214,
"total_draft_accepted": 970,
"aggregate_accept_rate": 0.799,
"wall_s_total": 32.24
실제 환경 벤치마크 (Real-world benchmark)
위의 수치들은 정말 말도 안 돼 보이지만, 실제 환경(real-world)에서는 속도 향상 폭이 매우 빠르게 줄어듭니다. 게다가 현재 수정 작업이 진행 중인 프리필(prefill) 속도의 퇴보(regression)는 말할 것도 없습니다. 저는 이것 18k 코딩 프롬프트를 실행해 보았는데, 60t/s의 속도는 매우 짧은 프롬프트에서만 관찰 가능하다는 것이 명확합니다. 하지만 MTP와 텐서 병렬성 (tensor parallelism)을 결합하면 실제로 상당한 2배의 속도 향상을 얻을 수 있습니다.
기본 (Stock):
prompt eval time = 53173.24 ms / 19191 tokens ( 2.77 ms per token, 360.91 tokens per second)
eval time = 337695.94 ms / 7791 tokens ( 43.34 ms per token, 23.07 tokens per second)
total time = 390869.18 ms / 26982 tokens
MTP 적용 시:
prompt eval time = 84388.11 ms / 19191 tokens ( 4.40 ms per token, 227.41 tokens per second)
eval time = 260732.83 ms / 8408 tokens ( 31.01 ms per token, 32.25 tokens per second)
total time = 345120.94 ms / 27599 tokens
텐서 병렬성 (tensor parallelism) 적용 시:
prompt eval time = 41925.27 ms / 19191 tokens ( 2.18 ms per token, 457.74 tokens per second)
eval time = 253262.25 ms / 8104 tokens ( 31.25 ms per token, 32.00 tokens per second)
total time = 295187.53 ms / 27295 tokens
MTP와 텐서 병렬성 (tensor parallelism) 결합 시:
prompt eval time = 49696.04 ms / 19191 tokens ( 2.59 ms per token, 386.17 tokens per second)
eval time = 155821.64 ms / 7440 tokens ( 20.94 ms per token, 47.75 tokens per second)
total time = 205517.69 ms / 26631 tokens
AI 자동 생성 콘텐츠
본 콘텐츠는 Reddit AI Engineering의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기