모든 모델이 안 된다
LiteLLM 자체와 GPUStack gateway부터 나눈다.
GPUStack Server·database·TLS·DNS를 확인한다.
route 전체 target이 사라졌는지 본다.
기본은 한 Spark에 한 instance, 확장은 replica, pair는 필요할 때만이다
전체 지도선택표도입 체크리스트장애 대응 카드LiteLLM은 사용자를 알고, GPUStack은 route와 실행 상태를 알며, backend는 inference를 안다. pair topology는 GPUStack 아래에 숨고 이용자에게는 모델 이름 하나만 보인다.
| 요구 | 배포 패턴 | 외부 경로 |
|---|---|---|
| 한 Spark에 들어가는 LLM | vLLM single replica, 필요 시 여러 worker에 replica | LiteLLM → GPUStack OpenAI API |
| 한 Spark에 안 들어가는 LLM | 고정 2대 pair의 distributed vLLM | LiteLLM → GPUStack route |
| 표준 text embedding | vLLM embedding replica | LiteLLM /v1/embeddings |
| 특수 전처리 embedding | FastAPI custom backend | Generic Proxy 또는 사내 Gateway |
| classification | FastAPI custom backend, single-node replica | Generic Proxy 또는 사내 Gateway |
| 동일 모델 두 pair | pair별 deployment + route weight | LiteLLM에는 alias 하나 |
| pair 하나만 있는 중요 모델 | pair + 작은 single model 또는 외부 fallback | route·LiteLLM fallback 정책 |
| 장 | 한 문장 |
|---|---|
| 0 | GPUStack의 가치는 명령 실행보다 여러 곳의 원하는 상태를 계속 맞추는 것에 있다 |
| 1 | LiteLLM은 이용자 정책, GPUStack은 모델 실행 상태를 맡는다 |
| 2 | 전체 설치보다 먼저 같은 worker 표준과 별도 관리 평면을 만든다 |
| 3 | 한 대에 들어가는 LLM·embedding은 독립 replica로 확장한다 |
| 4 | FastAPI는 실행 명령·ready·port 계약만 맞추면 custom backend가 된다 |
| 5 | pair는 HA가 아니라 용량을 늘리는 하나의 장애 셀이다 |
| 6 | Spark의 128GB는 공유되므로 weight 적재가 아니라 부하 뒤 headroom을 본다 |
| 7 | 배포 단위가 모델 container인 동안 GPUStack, 일반 application이 되면 Kubernetes를 다시 본다 |
모든 모델이 안 된다
LiteLLM 자체와 GPUStack gateway부터 나눈다.
GPUStack Server·database·TLS·DNS를 확인한다.
route 전체 target이 사라졌는지 본다.
모델 하나만 안 된다
route target과 desired/actual replica를 본다.
backend load·OOM·CUDA log를 확인한다.
model revision·image digest·artifact path를 비교한다.
FastAPI만 안 된다
numeric route ID와 Generic Proxy path를 확인한다.
/health/ready, uvicorn bind port, request schema를 본다.
ARM64 image와 CUDA runtime을 검증한다.
pair만 안 된다
두 member의 worker·container 상태를 모두 본다.
ConnectX-7 link와 Ray/NCCL port를 확인한다.
다른 pair 또는 single fallback으로 route를 돌린다.
이 덱이 가정한 환경에서는 GPUStack으로 시작하는 것이 맞다. 이유는 단순하다. 관리할 대상이 Kubernetes의 모든 application이 아니라 GPU에서 오래 실행되는 모델 server이기 때문이다. vLLM은 내장 backend로, FastAPI는 custom backend로 같은 worker pool에 놓고, LiteLLM에서 사용자에게 하나의 모델 catalog를 준다.
성공의 모습도 분명하다. 이용자는 Spark 이름을 모르고, 운영자는 SSH로 장비마다 돌아다니지 않으며, 한 node나 pair가 죽었을 때 route와 fallback이 정해진 동작을 한다. 이 상태를 먼저 만든 뒤에야 더 큰 orchestration platform이 정말 필요한지 판단할 수 있다.