8-16 MI50s를 이용한 MiniMax M3 성능: 최대 19 tps TG
요약
AMD MI50 GPU를 사용하여 MiniMax M3 모델의 성능을 측정한 결과, MTP 적용 시 최대 19 tps TG를 기록했습니다. 하드웨어 스택 최적화를 통해 성능 향상 여지가 있으나, 에이전트 기반 코딩용으로는 다소 부족한 성능을 보였습니다.
핵심 포인트
- 8-16개의 MI50 사용 시 최대 19 tps TG 달성
- MTP(Multi-Token Prediction) 적용 시 성능 향상 확인
- PCIe 스위치 및 ROCm 최적화를 통한 추가 개선 가능성
- 에이전트 기반 코딩 작업에는 성능이 다소 미흡함
요약(TL;DR): 이 오래된 2018년 하드웨어 치고는 속도가 아주 나쁘지는 않지만, 제 개인적인 의견으로는 에이전트 기반 코딩(agentic coding)에 사용하기에는 그리 유용하지 않습니다 (8개의 MI50에서 qwen3.6 27B가 50 tps TG / 800 tps PP를 기록하는 것과 비교했을 때). 더 우려되는 점은 추론(reasoning) 출력이 매우 매우 길다는 것이며, 아직 코드 출력 품질에 대해서는 확인하지 못했습니다...
이전에 언급했듯이, 소프트웨어 및 하드웨어 스택을 업데이트함으로써(예: 지연 시간이 더 낮은 PCIe 스위치 사용, ROCm/gfx906을 위한 오버헤드 없는 더 최적화된 MTP, fp16 역양자화(dequant) 등) 더 높은 속도를 낼 수 있는 여지가 여전히 있다고 생각합니다.
사용된 추론 엔진 (vllm fork v0.23.1, rocm7.2.1 포함): https://github.com/ai-infos/vllm-gfx906-mobydick/tree/main
사용된 Huggingface 양자화(Quants) 모델:
cyankiwi/MiniMax-M3-AWQ-INT4
bullerwins/MiniMax-M3-4bit-W4A16-v0
실행을 위한 주요 명령어:
sudo docker run -it --name vllm-gfx906-mobydick -v /home:/home --network host --device=/dev/kfd --device=/dev/dri \ --group-add video --group-add $(getent group render | cut -d: -f3) \ --cap-add=SYS_ADMIN --volume /sys:/sys:ro --pid=host --privileged \ --ipc=host aiinfos/vllm-gfx906-mobydick:v0.23.1rc0.x-rocm7.2.1-pytorch2.11.0
8개의 MI50에서 bullerwins/MiniMax-M3-4bit-W4A16-v0를 실행하기 위한 명령어:
FLASH_ATTENTION_TRITON_AMD_ENABLE="TRUE" OMP_NUM_THREADS=4 VLLM_LOGGING_LEVEL=DEBUG vllm serve \ /home/llm/models/MiniMax-M3-4bit-W4A16-v0 \ --served-model-name MiniMax-M3-4bit-W4A16-v0 \ --enable-auto-tool-choice \ --tool-call-parser minimax_m3 \ --reasoning-parser minimax_m3 \ --max-model-len auto \ --max-num-seqs 8 \ --gpu-memory-utilization 0.975 \ --enable-log-requests \ --enable-log-outputs \ --log-error-stack \ --speculative-config '{"method": "eagle3", "model": "/home/rig9/llm/models/MiniMax-M3-EAGLE3", "num_speculative_tokens": 3, "attention_backend": "TRITON_ATTN"}' \ --dtype float32 \ --kv-cache-dtype float16 \ --attention-config.indexer_kv_dtype float16 \ --block-size 128 \ --skip-mm-profiling \ --limit-mm-per-prompt '{"image":1,"video":{"count":1,"num_frames":32}}' \ --tensor-parallel-size 8 --port 8000 2>&1 | tee log.txt
11.9 tok/s TG 및 326 tok/s PP (MTP 없음) (16k 토큰 프롬프트) (최대 36,597 토큰 컨텍스트)
19.2 tok/s TG 및 1005 tok/s PP (MTP 3) (1k 토큰 프롬프트) (최대 7,680 토큰 컨텍스트)
TP16 : 쓰레기 출력 / 지원 안 함
MI50 16개로 cyankiwi/MiniMax-M3-AWQ-INT4용 명령어:
VLLM_TRITON_ATTN_NUM_PAR_SOFTMAX_SEGMENTS=64 FLASH_ATTENTION_TRITON_AMD_ENABLE="TRUE" OMP_NUM_THREADS=4 VLLM_LOGGING_LEVEL=DEBUG vllm serve \ /home/rig9/llm/models/MiniMax-M3-AWQ-INT4 \ --served-model-name MiniMax-M3-AWQ-INT4 \ --enable-auto-tool-choice \ --tool-call-parser minimax_m3 \ --reasoning-parser minimax_m3 \ --max-model-len auto \ --max-num-seqs 4 \ --max-num-batched-tokens 8192 \ --gpu-memory-utilization 0.92 \ --enable-log-requests \ --enable-log-outputs \ --log-error-stack \ --speculative-config '{"method": "eagle3", "model": "/home/rig9/llm/models/MiniMax-M3-EAGLE3", "num_speculative_tokens": 5, "attention_backend": "TRITON_ATTN", "use_local_argmax_reduction":true}' \ --dtype float32 \ --kv-cache-dtype float16 \ --attention-config.indexer_kv_dtype float16 \ --block-size 128 \ --skip-mm-profiling \ --limit-mm-per-prompt '{"image":1,"video":{"count":1,"num_frames":32}}' \ --tensor-parallel-size 16 --port 8000 2>&1 | tee log.txt
6.6 tok/s TG 및 296 tok/s PP (MTP 없음) (16k 토큰 프롬프트) (최대 220,416 토큰 컨텍스트 with 0.95 --gmu)
18.2 tok/s TG 및 135 tok/s PP (MTP 5) (16k 토큰 프롬프트) (최대 143,488 토큰 컨텍스트)
TP8 : OOM / 지원 안 함
VLLM_LOGGING_LEVEL=DEBUG vllm bench serve \ --dataset-name random \ --random-input-len 10000 \ --random-output-len 1000 \ --num-prompts 2 \ --seed 1 \ --temperature 1 --top-p 0.95 --top-k 40 \ --request-rate inf \ --max-concurrency 1 \ --ignore-eos 2>&1 | tee logb.txt
============ 서빙 벤치마크 결과 (Serving Benchmark Result) ============
성공한 요청 (Successful requests): 2
실패한 요청 (Failed requests): 0
최대 요청 동시성 (Maximum request concurrency): 1
벤치마크 지속 시간 (Benchmark duration (s)): 279.80
총 입력 토큰 (Total input tokens): 20000
총 생성 토큰 (Total generated tokens): 2000
요청 처리량 (Request throughput (req/s)): 0.01
출력 토큰 처리량 (Output token throughput (tok/s)): 7.15
최대 출력 토큰 처리량 (Peak output token throughput (tok/s)): 5.00
최대 동시 요청 수 (Peak concurrent requests): 2.00
총 토큰 처리량 (Total token throughput (tok/s)): 78.63
---------------첫 번째 토큰까지의 시간 (Time to First Token)----------------
평균 TTFT (Mean TTFT (ms)): 73626.88
중앙값 TTFT (Median TTFT (ms)): 73626.88
P99 TTFT (P99 TTFT (ms)): 73681.87
-----출력 토큰당 시간 (첫 번째 토큰 제외) (Time per Output Token (excl. 1st token))------
평균 TPOT (Mean TPOT (ms)): 66.34
중앙값 TPOT (Median TPOT (ms)): 66.34
P99 TPOT (P99 TPOT (ms)): 89.21
---------------토큰 간 지연 시간 (Inter-token Latency)----------------
평균 ITL (Mean ITL (ms)): 232.54
중앙값 ITL (Median ITL (ms)): 231.55
P99 ITL (P99 ITL (ms)): 237.26
---------------추측적 디코딩 (Speculative Decoding)---------------
수락률 (Acceptance rate (%)): 50.28
수락 길이 (Acceptance length): 3.51
초안 (Drafts): 570
초안 토큰 (Draft tokens): 2850
수락된 토큰 (Accepted tokens): 1433
위치별 수락률 (Per-position acceptance (%)):
위치 0 (Position 0): 69.82
위치 1 (Position 1): 53.68
위치 2 (Position 2): 46.32
위치 3 (Position 3): 41.93
위치 4 (Position 4): 39.65
제출자: /u/ai-infos 대상: r/LocalLLaMA
[링크] [댓글]
AI 자동 생성 콘텐츠
본 콘텐츠는 r/OpenAI Codex (search)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기