24GB VRAM 사용자들 주목, RTX 3090에서 Qwen3.8 27B INT4 모델을 144K FP8 KV 캐시로 더 빠르게 돌릴 수 있는 vLLM을 시도해보세요. (세 줄 요약: vLLM AOT 사용)
Dear 24G owners, try VLLM you might be able to run Qwen3.8 27B INT4, 144K FP8 KV on RTX 3090 with better speed. (TLDR VLLM AOT)
핵심 요약
RTX 3090에서 vLLM과 AOT 컴파일을 활용해 Qwen3.8 27B 모델을 144K 컨텍스트로 구동하는 최적화 가이드.
- vLLM 최적화 — AOT 컴파일과 FP8 KV 캐시로 3090에서 144K 컨텍스트 구동.
- 성능 벤치마크 — 75개 시나리오에서 94.7%의 정확도로 준수한 추론 성능 기록.
- WSL2 환경 — 24GB VRAM 한계 내에서 효율적인 메모리 관리 및 설정 공유.
- 설정 주의사항 — vLLM 컴파일 캐시 관리와 GPU 메모리 활용률 조정 필요.

VLLM 벤치마크:
Prefill, 프롬프트 처리
- 평균, 871.93 tok/s (3시간 연속 구동 xhigh)
- 10K 프롬프트, 1000.26 tok/s (16회 실행)
- 90K 프롬프트, 743.59 tok/s (16회 실행)
Decode, 토큰 생성
- 평균, 38.39 tok/s (3시간 연속 구동 xhigh)
- 10K, 42.3 tok/s (16회 실행)
- 90K, 34 tok/s (16회 실행)
서론: 난 지금 WSL2 쓰고 있음. 27B Q5 UD GGUF 모델을 81,920 컨텍스트에 MTP 얹어서 llama.cpp로 돌리면 대충 25-30 tok/s 정도 나오더라. 그러다 이 깃허브 레포를 발견함: https://github.com/noonghunna/club-3090
이거 그냥 모델 돌리기 위한 레시피랑 도커 설정 모음집임.
뭐 30 tok/s면 나쁘지 않은데, RunPod GPU 빌려 쓰는 거 기다리는 게 너무 지루해서 말이지. 미뤄뒀던 vLLM 튜닝이나 다시 해보자 싶어서 시작함.
Inductor/Triton 컴파일이랑 CUDA Graph 캡처할 때 테스트 설정이랑 커널 호출 과정에서 VRAM을 추가로 처먹는다는 걸 자꾸 까먹네. OOM 때문에 JIT 컴파일 터졌을 때 AOT 시도해 볼 생각도 안 했음.
참고로 AOT랑 JIT는 컴파일 전략임. AOT는 Ahead of Time, JIT는 Just in Time을 의미함.
첫 실행 때 OOM 뜨면 한 번 더 돌려봐. Inductor가 OOM 뜨기 전에 설정 일부를 컴파일해서 캐싱해 뒀을 수도 있어서, 설정 안 바뀌었으면 다음번에 재사용할 수도 있거든. 무조건 되는 건 아닌데 난 이걸로 해결함.
그리고 당연히 시행착오 좀 겪었지. 32K부터 시작해서 64K, 80K, 128K, 마지막엔 144K까지 올렸는데 진짜 개빡셌음. 내 설정상 실질적인 한계치는 154K인데 그냥 144K로 타협함. 배치 사이즈도 256에서 시작해서 1024까지 올렸는데, 1280-1536까지도 쥐어짜면 가능할지도 모르겠네.
아, 그리고 vLLM 컴파일 캐시 조심해라. 설정 이것저것 테스트하다 보면 5-6GB까지 불어남. 난 그냥 옛날 캐시 싹 다 지우고 최종 설정으로 두 번 다시 돌려서 지금 쓰는 것만 새로 빌드하게 만듦.
지금 내 세팅은 Qwen3.8-27B에 INT4 AutoRound 가중치 쓰고, vLLM으로 돌리면서 FP8 E4M3 KV 캐시 사용하는 중임. 147,456 토큰 컨텍스트 윈도우 설정해서 GPU 한 장에 딱 들어감.
근데 GDN이나 사실상 모든 linear-attn 모델이 그렇듯, vLLM이 KV랑 state-cache 풀에 VRAM이 얼마나 처먹을지 예측하는 건 좀 엉망인 듯.

