HyperQwen

Local AI RunnersCLIPython

★ 1,451주당 +174조회 4

무엇인가

추론 엔진을 새로 구현한 프로젝트가 아니다. 고정된 버전의 vLLM에 얹는 패치 시리즈와 모델 준비 파이프라인의 묶음이며, 소비자용 GPU 한 장에서 대형 Qwen 체크포인트를 돌리는 서빙 구성에 해당한다.

어떻게 동작하나

구성은 세 부분이다. `patches/`의 38개 파일이 vLLM 자체를 고치고(PATCHES.md에 한 줄씩 기록), `prepare/`가 체크포인트를 재양자화해 `./models`에 약 20GB로 한 번만 만들어 둔다. 서빙 쪽에는 int8-QK 프리필 어텐션 커널, KVarN 롱컨텍스트 백엔드, int8 Marlin GEMM 레이어 선택, SSE keep-alive, 엔진 정지 감시기가 들어간다. 추론 가속은 이 모델의 출력 분포로 보정한 40k 토큰 드래프트 어휘와 DFlash2 드래프터로 하고, 프롬프트를 그대로 인용하는 답변에서 381 tok/s가 나온다. 서버는 `:18020`에 OpenAI 호환 API를 열고 `VLLM_API_KEY`로 키 인증을 건다.

무엇과 다른가

일반 vLLM 서빙과의 차이는 동시성 구간에 따라 갈린다. 추론(speculation)은 동시 사용자 약 8명 미만에서 이기고, 그 위에서는 순수 배칭이 이긴다. 추론 요청이 recurrent-state 페이지를 예약해 풀을 잡아먹기 때문이며, 긴 세션에서는 이 분기점이 더 앞당겨진다. `.env`의 A~E 설정 문자는 요청 슬롯과 컨텍스트를 맞바꾸는 선택지다. DFlash2는 64k를 넘기면 재현용으로만 값어치가 있고 `SPEC=mtp CTX=long`에 약 2:1로 진다.

어떻게 쓰나

설치는 컨테이너 기준이다. `.env`를 복사한 뒤 `echo "VLLM_API_KEY=$(openssl rand -hex 24)" > .env`로 키를 넣고 기동하면, 첫 시작에 9.5GB 이미지를 받고 모델을 `./models`로 재양자화한 다음 `:18020`에서 서빙한다. GPU 한 장은 한 번에 한 모드만 돌린다. Docker Desktop on WSL2에서는 `VLLM_WSL2_ENABLE_PIN_MEMORY=1`을 유지해야 V2 러너가 `RuntimeError: UVA is not available`로 죽지 않는다. compose 없이 쓰는 경로는 docs/docker.md와 docs/install.md에 있다.

전제와 한계

제약은 모델 형상과 카드 등급에 걸려 있다. int8-QK 프리필 커널은 `num_heads == 24`, `num_kv_heads == 4`, `head_size == 256`에만 열리고 나머지는 FA2로 떨어진다. 드래프트 어휘는 이 체크포인트의 출력 분포로 보정된 것이고 DFlash2 드래프터는 모델별 체크포인트다. Marlin 튜닝 테이블은 sm86에서 측정됐고 sm120은 재현되지만 sm80은 추론 결함이 열려 있다. 다중 GPU는 TP=2와 TP=4만 유효하며 TP=3과 PP=3은 이 모델의 헤드 수 때문에 성립하지 않는다. 기본 바인딩은 인증 없는 `0.0.0.0`이다.

관련 논문 1

유사 도구