RTX 4090에 Qwen3.6 27B 세팅하기
서론
한동안 카카오님의 은총으로 두달간 저렴한 가격으로 ChatGPT 프로 모델을 물쓰듯 썼지만 어쨌든 종말을 맞았다. 이렇게 된 김에 한동안 멀리 떨어져 살았던 Claude Pro 구독으로 다시 돌아와 봤는데, 5시간 쿼터가 단 쿼리 3개만에 멸-망하는 모습을 보여줬다.
한달 구독이니 한달뒤에 다시 OpenAI 프로 구독을 한다 쳐도 어쨌든 20달러 클로드 구독으로 한달은 버텨야 하는 상황이다. 킹쩔수없이 무지성 코딩은 로컬 모델로 때워보자 하고 오랜만에 llm-daemon 코드를 다시 열어보게 되었다…
삽질
적당히 업데이트도 해주고 설정도 몇개 추가해주고 여기저기 기름칠 좀 해서 Qwen3.6 27B 모델을 돌렸다. 참고로 이 블로그 글도 초안은 Qwen으로 작성했다.
from bihyung import daemon_from_hf, _server_path
daemon = daemon_from_hf(
# "bartowski/google_gemma-4-E2B-it-GGUF:Q4_K_M", # working
# "bartowski/Qwen_Qwen3.6-27B-GGUF:Q4_K_M", # Gibberish
"unsloth/Qwen3.6-27B-GGUF:UD-Q4_K_XL",
_server_path,
[ "--temp", "0.6", "--top-p", "0.95", "--top-k", "20", "--presence_penalty", "1.5", "--min-p", "0.00",
"-ngl", "99", "-fa", "1", "-c", "131072",
"--cache-type-k", "q4_0", "--cache-type-v", "q4_0" ],
)
daemon.__enter__()
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 595.71.05 Driver Version: 595.71.05 CUDA Version: 13.2 |
+-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA GeForce RTX 4090 Off | 00000000:01:00.0 On | Off |
| 72% 58C P2 250W / 250W | 21974MiB / 24564MiB | 97% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| 0 N/A N/A 924 G Hyprland 150MiB |
| 0 N/A N/A 977 G Xwayland 15MiB |
| 0 N/A N/A 1456 G /usr/lib/firefox/firefox 253MiB |
| 0 N/A N/A 1958 G alacritty 30MiB |
| 0 N/A N/A 6439 G alacritty 59MiB |
| 0 N/A N/A 28530 G alacritty 30MiB |
| 0 N/A N/A 29633 C ...daemon/bihyung/bihyung/server 21216MiB |
+-----------------------------------------------------------------------------------------+
Pi-coding-agent에서 OpenAI 호환 endpoint를 설정하고, bihyung으로 구동시킨 llama.cpp server를 뒤에서 돌리도록 했다. 당장은 귀찮아서 별도 스크립트로 서버를 띄우긴 했는데 사실 pi-coding-agent를 적당히 감싸서 llm-daemon을 띄우도록 하면 daemon의 처음 취지에 맞게 agent 구동시에만 GPU를 사용하도록 할 수도 있다.
왜 Qwen3.6 27B인가?
Qwen3.6 27B는 현재 로컬에서 돌릴 만한 모델 중 성능/크기 비율이 매우 좋은 후보입니다. 4090의 24GB VRAM으로는 FP16(약 54GB)은 불가능하지만, GGUF 양자화(Q4_K 계열)로 압축하면 GPU에 충분히 실립니다.
이런저런 Quant 버전을 써 봤는데 일단 Unsloth 버전에서 동작이 돼서 이걸로 했다.
다만 왜 bartowski 버전은 비정상으로 작동하는지 직접적인 원인을 규명하진 못했다. CUDA 버전도 낮추고 컴파일러도 변경하는 등의 이런저런 시도가 있었고, 그중 하나가 들어맞은 것일수도.
주요 파라미터 해설
| 파라미터 | 값 | 설명 |
|---|---|---|
-ngl | 99 | 모든 레이어를 GPU에 올림 (4090 필수) |
-fa | 1 | Flash Attention 활성화 — 메모리 효율 + 속도 향상 |
-c | 131072 | 컨텍스트 길이 128K 토큰 |
--cache-type-k/v | q4_0 | KV 캐시를 Q4 양자화 |
--temp | 0.6 | 온도 낮게 — 일관된 출력 |
--presence_penalty | 1.5 | 반복 방지 (높은 값으로 설정) |
KV 캐시 양자화(q4_0)가 핵심입니다. 일단 이 설정으로 하면 브라우저 띄워놔도
메모리 사용량 <22GB 정도로, 2500MiB 정도의 여유공간이 남는다.
실행
cd /srv/llm-daemon
python example_server.py
첫 실행 시 모델이 HuggingFace에서 자동으로 다운로드됩니다. UD-Q4_K_XL은 약 16GB 정도의 용량입니다.
결론
하지만 한참 작업하고 나자 X댐을 감지한 앤스로픽이 X.com 오너 일론 머스크랑 짝짜꿍을 해서 사용량 쿼터를 x2배로 늘려줬다. 씨X…