lorax
무엇인가
LoRAX는 하나의 베이스 모델 가중치를 공유한 채 다수의 LoRA 어댑터를 동시에 서빙하는 LLM 추론 서버다. 모델 서빙 계층에 속하며, 파인튜닝된 모델마다 별도 프로세스와 GPU 메모리를 할당하는 구성을 대체한다. HuggingFace의 text-generation-inference v0.9.4에서 포크해 다중 어댑터 서빙을 얹은 구조다.
어떻게 동작하나
서빙 단위는 베이스 모델과 어댑터 두 계층으로 나뉜다. 베이스 모델은 모든 요청이 공유하고, 어댑터는 요청에 지정된 이름을 보고 HuggingFace, Predibase, 로컬 파일시스템에서 그때그때 로드된다. 서버는 서로 다른 어댑터를 쓰는 요청을 하나의 배치로 묶는 이기종 연속 배칭(heterogeneous continuous batching)을 수행하고, 어댑터 교환 스케줄러가 GPU와 CPU 메모리 사이에서 어댑터를 비동기로 프리페치·오프로드한다. 커널 수준에서는 SGMV, paged attention, flash attention을 쓰며 텐서 병렬화와 토큰 스트리밍도 함께 적용된다.
무엇과 다른가
일반적인 다중 모델 서빙은 모델마다 GPU 메모리와 프로세스를 따로 잡으므로 어댑터 수에 비례해 비용이 늘어난다. LoRAX는 베이스 모델을 한 번만 올리고 어댑터 가중치만 교체하므로 동시 어댑터 수가 늘어도 처리량과 지연이 거의 일정하게 유지된다. 요청 단위로 여러 어댑터를 병합해 앙상블로 쓰는 것도 가능하다.
어떻게 쓰나
사전 빌드된 Docker 이미지로 서버를 띄우는 방식이 권장된다. nvidia-container-toolkit을 설치하고 docker 데몬을 재시작한 뒤 컨테이너를 실행한다. 클라이언트 경로는 세 가지다. REST API, Python 클라이언트, 그리고 OpenAI 호환 API이며, OpenAI 경로에서는 model 파라미터에 어댑터 이름을 넣어 다중 턴 채팅과 동적 어댑터 로딩을 함께 쓴다.
전제와 한계
Ampere 세대 이상 Nvidia GPU, CUDA 11.8 호환 드라이버, Linux, Docker가 전제다. 베이스 모델로는 Llama(CodeLlama 포함), Mistral(Zephyr 포함), Qwen 계열을 쓸 수 있고 fp16 또는 bitsandbytes, GPT-Q, AWQ 양자화로 로드한다. 어댑터는 PEFT와 Ludwig로 학습한 LoRA를 대상으로 하며, 모델의 선형 계층을 LoRA로 적응시킨 형태여야 한다.
관련 논문 2
유사 도구
- HyperQwenvLLM을 패치해 24GB 소비자 GPU 한 장에서 대형 Qwen을 서빙하는 스택이다. 150k 컨텍스트와 OpenAI 호환 API를 단일 사용자·배치 두 모드로 내놓는다.
- lmdeployLLM을 4bit로 압축해 GPU에서 서빙하는 파이썬 툴킷이다. TurboMind와 PyTorchEngine 두 추론 엔진, OpenAI 호환 API 서버를 포함한다.
- qwen38-27b-rtx3090단일 RTX 3090 24GB에서 vLLM으로 Qwen3.8-27B를 서빙하는 패치·재양자화 스크립트·벤치 모음이다. 150k 컨텍스트 OpenAI 호환 API를 띄운다.
- PowerInfer활성화 지역성을 이용해 hot 뉴런은 GPU에, cold 뉴런은 CPU에 배치하는 CPU/GPU 하이브리드 LLM 추론 엔진이다. 단일 소비자용 GPU에서 대형 모델을 서빙한다.
- flashinferLLM 서빙용 고성능 GPU 커널 라이브러리이자 커널 생성기다. attention·GEMM·MoE를 하나의 API로 묶고 하드웨어와 워크로드에 맞는 백엔드를 자동 선택한다.