RTX 3090 한 장에서 4개의 코딩 에이전트 구동: Qwen3.8-27B용 커스텀 CUDA 엔진으로 총 290 tok/s 달성
4 coding agents on one RTX 3090: ~290 tok/s total from a custom CUDA engine for Qwen3.8-27B (3-4x llama-server --parallel)
핵심 요약
RTX 3090에서 가중치 공유 읽기 방식을 통해 여러 코딩 에이전트를 고속으로 병렬 처리하는 OpenJet 엔진을 소개합니다.
- 병렬 디코딩 — 가중치 읽기를 공유하여 여러 에이전트의 처리 속도를 획기적으로 향상함
- 메모리 효율성 — 132K 토큰의 공유 KV 풀을 사용하여 에이전트 간 유연한 메모리 할당 지원
- 성능 지표 — llama-server 대비 3~4배 빠른 초당 토큰 생성 속도 기록
- 향후 계획 — TurboQuant 지원을 통해 단일 GPU에서 256K 컨텍스트 윈도우 확장 예정
Qwen3.8-27B Q4_K_M 모델을 위한 자체 CUDA 메가커널 엔진을 탑재한 로컬 코딩 에이전트, OpenJet을 만들고 있다. 지금까지는 한 번에 대화 하나만 처리할 수 있었는데, 이번 새 릴리즈에서는 GPU 하나로 에이전트 여러 개를 동시에 돌릴 수 있게 됐다.
.buffering-track-fill { stroke-dasharray: 100; stroke-dashoffset: 50; }
성능 지표 (RTX 3090, Qwen3.8-27B Q4_K_M ):
| per agent | llama-server --parallel 4 | OpenJet --agents 4 |
|---|---|---|
| decode, short prompts | 18-20 tok/s | 64-72 tok/s |
| decode, 23K context each | 15-16 tok/s | 52-55 tok/s |
| first token of the next request on those contexts | 13.4 s | 0.2-0.5 s |
| another agent decoding while a 20K prompt is processed | 0.6 tok/s | 9.5 tok/s |
에이전트 4개를 합쳐서 총 256-288 tok/s가 나온다. llama-server가 72-80 tok/s 정도 나오는 거랑 비교하면 엄청난 차이지. 에이전트 하나만 돌리면 여전히 117 tok/s가 나온다. 툴이랑 테스트 돌리느라 중간중간 멈추는 실제 코딩 에이전트 4개를 동시에 돌리면 총 150-200 tok/s 정도 찍힌다.
병렬 디코딩 작동 방식:
GPU에서 토큰 생성할 때 병목은 메모리 대역폭이다. 디코드 단계마다 VRAM에서 16.7GB 가중치를 전부 읽어와야 하는데, 3090(936 GB/s) 기준으로 이것만 해도 18ms가 걸린다. 가중치 읽는 시간에 비하면 연산량은 껌 수준이지.
그래서 엔진이 에이전트를 순차적으로 돌리지 않는다. 매 단계마다 활성화된 모든 에이전트의 작업을 하나의 배치 행렬로 쌓아버린다. 각 에이전트의 다음 토큰이랑 2개의 MTP/프롬프트 룩업 드래프트 토큰을 합쳐서, 에이전트 4개면 총 12개 행이 되는 식이다. 가중치를 한 번만 스트리밍하면, 로드된 가중치가 텐서 코어를 통해 12개 행 전부랑 동시에 곱해진다. 즉, 에이전트 4개를 돌려도 단계당 가중치 읽기는 4번이 아니라 1번만 하면 된다는 소리다.
에이전트 하나당 속도가 117에서 30이 아니라 64-72 tok/s로만 떨어지는 이유가 바로 이거다. 가중치 읽는 비용이 전체의 대부분을 차지하니까. 에이전트가 늘어날수록 늘어나는 건 어텐션(에이전트마다 KV 캐시를 읽어야 하니까)이랑 추가 행에 대한 연산뿐이다. 전체 단계가 레이어별 런칭 없이 하나의 지속적인 CUDA 커널로 돌아가고, 드래프트 검증도 같은 패스에서 처리되니까 드래프트가 성공할 때마다 가중치 한 번 읽어서 토큰을 더 뽑아내는 셈이지.
