요약(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
제출자: /u/ai-infos 대상: r/LocalLLaMA
[링크] [댓글]