Kinference: vLLM 및 Kubernetes를 위한 오픈 소스 추론 제어 플레인

Buoyant가 Kinference("케이-인퍼런스"로 발음)를 공개했습니다. 이는 Kubernetes에서 vLLM 추론 플랫폼을 실행하기 위한 오픈 소스 제어 플레인입니다. Kinference는 vLLM 워커 앞에 위치하여 일반 Kubernetes에 없는 플랫폼 수준 기능, 즉 KV-캐시 인식 로드 밸런싱, 라우팅 및 비용 제어를 위한 YAML 정책 엔진, 테넌트별 추론 메트릭을 추가합니다. Buoyant의 공개 벤치마크에서 KV-캐시 인식 라우팅은 표준 Kubernetes 로드 밸런싱과 비교하여 한 워크로드 유형에서 중앙값 최초 토큰 시간(TTFT)을 95%, 중앙값 종단 간 지연 시간을 45% 줄였습니다.

Kinference는 Apache v2에 따라 완전히 오픈 소스이며 GitHub의 Kinference-AI/kinference에서 사용할 수 있습니다. 이는 vLLM이 기본 추론을 수행하고, 직접 구축하는 플랫폼의 제어 플레인 계층으로 설계되었습니다.

Kinference가 무엇이며 어디에 적합한가

Kinference는 제어 플레인이지 추론 엔진이 아닙니다. 실제 모델 서빙에는 vLLM을 사용하며, 오픈 가중치 모델을 실제로 운영하는 데 필요한 주변 플랫폼 기능(토큰 속도 제한, 테넌트 사용량 및 비용 추적, 지능형 로드 밸런싱, 추론 정책)을 제공합니다.

도입 시 추론 클라이언트를 Kinference의 HTTP 엔드포인트로 지정하는 것 외에는 변경이 필요 없습니다. Kinference는 OpenAI 또는 Anthropic 호환 추론 트래픽을 수용하므로 기존 클라이언트 라이브러리와 애플리케이션을 수정 없이 리디렉션할 수 있습니다.

이 프로젝트는 고객이 자체 환경에서 오픈 가중치 모델을 실행하는 데 어려움을 겪는 것을 관찰한 후 Buoyant에서 만들어졌습니다. Buoyant는 핵심 문제를 "이질적이고 진화하는 모델 세트를 이질적이고 진화하는 GPU 풀에서 이질적이고 진화하는 클라이언트 세트에 서빙하는 것"으로 정의합니다.

Kinference는 독립적으로 릴리스되는 두 구성 요소, 즉 트래픽 게이트웨이와 추론 핸들러로 제공됩니다. 각 구성 요소는 자체 CRD를 별도의 Helm 차트로 제공하며, 이 차트는 구성 요소 자체보다 먼저 설치되어야 합니다.

KV-캐시 인식 로드 밸런싱

Kinference의 로드 밸런서는 일반적인 연결 수준 신호가 아닌 추론 특화 신호를 기반으로 라우팅합니다. GPU 큐 크기, 과거 성능, 각 GPU의 KV 캐시 내용을 고려합니다.

KV-캐시 인식이 핵심 차별점입니다. 특정 GPU에 이미 캐시된 내용을 모델링함으로써 Kinference는 해당 특정 요청에 대해 가장 적은 추가 작업을 수행할 vLLM 워커로 요청을 보낼 수 있습니다. 이는 공유 접두사와 다중 턴 대화가 있는 워크로드에서 가장 중요하며, 프롬프트의 상당 부분이 이미 워커의 캐시에 상주할 수 있습니다.

벤치마크 결과

Buoyant는 표준 Kubernetes 로드 밸런싱(차트에서 "service"로 표시, "kinference"와 비교)에 대한 두 가지 벤치마크 비교를 발표했습니다.

비부하 지연 시간 벤치마크 — KV-캐시 인식 로드 밸런싱의 효과를 분리하기 위해 설계됨:

  • 중앙값 최초 토큰 시간(TTFT) 95% 감소
  • 중앙값 종단 간 지연 시간 45% 감소

이 수치는 해당 벤치마크의 한 워크로드 유형에 적용됩니다.

용량 벤치마크 — 각 엔드포인트가 지연 시간 SLO 내에서 처리할 수 있는 분당 요청 수를 측정:

  • 공유 접두사 워크로드에서 7.4배 굿풋
  • 다중 턴 워크로드에서 약 3.5배 굿풋
  • Kinference는 공유 접두사에서 동시성 32(측정된 최고), 다중 턴에서 동시성 8에서 선택한 SLO를 달성
  • kube-proxy 방식은 모든 동시성 수준에서 SLO를 달성하지 못함

벤치마킹 설정, 프로세스 및 결과에 대한 전체 세부 정보는 Buoyant의 별도 벤치마크 문서에 게시되어 있습니다.

추론 정책: 정책 기반 라우팅 계층

Kinference의 핵심 추상화는 추론 정책입니다. Buoyant는 일회성 기능 세트를 제공하는 대신 다양한 라우팅, 비용 및 우선순위 요구 사항을 단일 메커니즘으로 표현할 수 있는 정책 계층을 구축했습니다.

정책을 통해 플랫폼 소유자는 사용량, 성능 및 우선순위 간의 트레이드오프를 균형 있게 조정할 수 있습니다. Buoyant는 설계 동기가 된 두 가지 반복적인 고객 질문을 인용합니다:

  • 사용자가 특정 체크포인트(예: "FP8 양자화된 27B 파라미터의 Qwen 3.8") 대신 "모든 Qwen 3.8 모델" 또는 "코딩에 좋은 모델"과 같은 더 넓은 모델 클래스를 요청할 수 있는 방법은?
  • 사용자가 비싼 모델을 요청했더라도 "쉬운" 요청을 더 저렴한 모델로 리디렉션하면서, 전체 프롬프트 기록을 콜드 GPU로 보내 큰 지연 시간을 초래하지 않는 방법은?

정책은 Kubernetes 사용자 정의 리소스(kind: InferencePolicy, apiVersion: kinference.buoyant.io/v1alpha1)로 선언되며 테넌트, 요청된 모델, 기본 GPU 풀 상태, 프롬프트의 의미론적 분류 및 기타 요인에 따라 요청을 라우팅하거나 거부할 수 있습니다. 선언적 YAML이므로 정책은 인간 또는 에이전트 검토를 거치고, git에 커밋되고, 린트 및 검증되며, 독립적으로 적용되거나 롤백될 수 있습니다.

예: 더 저렴한 모델로의 의미론적 라우팅

다음 정책은 프롬프트를 복잡성별로 의미론적으로 분류하고 더 간단한 프롬프트를 더 저렴한 모델로 라우팅합니다. 단, 캐시 사용을 고려할 때 비싼 모델로 보내는 것이 더 빠른 경우는 예외입니다:

apiVersion: kinference.buoyant.io/v1alpha1
kind: InferencePolicy
metadata:
  name: smart-semantic-routing
  namespace: inference
spec:
  rules:
  - name: low-complexity-consider-qwen
    matches:
    - model: glm-5.3
      tag: complexity-low
    route:
      consider:
      - models: { names: [ qwen-3.6-27b, glm-5.3 ] }
      select: [ { minimize: PredictedTTFT } ]

예: 클라우드 공급자로의 버스팅

이 정책은 큐 깊이나 캐시 압력이 GPU가 포화 상태임을 나타낼 때 초과 요청을 타사 공급자 엔드포인트(Buoyant는 OpenAI, Anthropic, Databricks를 예로 듦)로 버스트합니다:

apiVersion: kinference.buoyant.io/v1alpha1
kind: InferencePolicy
metadata:
  name: burst-policy
  namespace: inference
spec:
  rules:
  - name: burst-to-cloud
    route:
      exclude:
      - name: drop-overloaded-workers
        drop:
          backend:       { type: Local }
          queuedPrompts: { greaterThan: 2 }
 
      select:
      - { type: Local,
          minimize: PredictedTTFT }
      - { type: Provider,
          order: [bedrock, databricks] }

예: PII를 클러스터 내부에 유지

이 정책은 프롬프트에 PII가 포함되어 있는지 분류하고 그러한 요청이 클러스터를 벗어나지 못하도록 방지하며, 로컬 백엔드를 사용할 수 없으면 실패-폐쇄합니다:

apiVersion: kinference.buoyant.io/v1alpha1
kind: InferencePolicy
metadata:
  name: pii-stays-local
  namespace: inference
spec:
  rules:
  - name: serve
    route:
      exclude:
      - name: pii-never-leaves-cluster
        if:   { tag: pii-detected }
        drop: { backend: { type: Provider } }
      select:
      - { type: Provider,
          order: [ databricks ] }
      - { type: Local,
          minimize: PredictedTTFT }
      onEmpty: Reject   # fail closed

추론 메트릭 및 SLO

Kinference는 모니터링, 알림 및 SLO 구축을 위한 일련의 추론 특화 메트릭을 노출합니다. 보고되는 메트릭은 다음과 같습니다:

  • 토큰 입력/출력 속도 및 입력/출력 토큰 크기 히스토그램
  • TTFT, ITL(토큰 간 지연 시간) 및 종단 간 지연 시간 히스토그램
  • 비용 추정을 위한 캐시되지 않은 프롬프트 토큰 대 캐시된 프롬프트 토큰
  • 모델 사용량 및 GPU 포화도

거의 모든 메트릭은 테넌트별로도 제공되므로 운영자는 테넌트 사용량을 추적하고, 테넌트별 성능 SLO를 구축하며, 플랫폼이 각 소비자에 대한 요구 사항을 충족하는지 확인할 수 있습니다.

Kinference 설치

게시된 퀵스타트는 Kinference를 default 네임스페이스에 설치합니다. 다른 네임스페이스는 Helm 명령에서 네임스페이스를 재정의해야 합니다. 아래 단계는 발표에 제공된 버전과 차트 위치를 반영하며, Buoyant는 단계가 발전함에 따라 kinference.ai/docs의 공식 문서를 현재 소스로 취급해야 한다고 언급합니다.

1. Gateway API CRD 설치

GWAPI_VERSION=1.5.1
kubectl apply --server-side --force-conflicts -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v$GWAPI_VERSION/standard-install.yaml

2. Kinference 게이트웨이 설치

helm upgrade -i gateway-crds \
  oci://ghcr.io/buoyantio/charts/gateway-crds \
  --devel
 
helm upgrade -i gateway \
  oci://ghcr.io/buoyantio/charts/gateway \
  --devel --wait

3. Kinference 설치

helm upgrade -i kinference-crds \
  oci://cr.kinference.ai/kinference-ai/charts/kinference-crds \
  --devel
 
helm upgrade -i kinference \
  oci://cr.kinference.ai/kinference-ai/charts/kinference \
  --set extension.enabled=true \
  --devel --wait

4. 설치 확인

kubectl get pods를 실행하고 두 프로세스가 모두 실행 중인지 확인합니다:

NAME                           READY   STATUS    RESTARTS   AGE
gateway-cp-566cddc46d-jsqlq    1/1     Running   0          8s
kinference-7bb854cfc5-pp4t7    1/1     Running   0          8s

중요한 이유

Kinference는 오픈 가중치 모델이 단일 vLLM 배포에서 공유 다중 테넌트 플랫폼으로 이동할 때 나타나는 격차를 해결합니다. Kubernetes의 기본 로드 밸런싱은 연결 지향적이며 추론 상태를 인식하지 못합니다. 이는 용량 벤치마크에서 직접적으로 입증됩니다. kube-proxy 방식은 테스트된 모든 동시성 수준에서 지연 시간 SLO를 충족하지 못한 반면, Kinference는 공유 접두사 워크로드에서 측정된 최고 동시성에서 이를 충족했습니다.

라우팅 결정을 하드코딩된 기능 대신 선언적 YAML로 만듦으로써 Kinference는 추론 플랫폼 동작을 표준 Git 및 Kubernetes 워크플로를 통해 검토 가능하고 되돌릴 수 있게 만듭니다. 여기에는 PII를 클러스터 내부에 유지하고 실패-폐쇄 기본값을 적용하는 안전 관련 규칙도 포함됩니다.

Buoyant는 프로젝트의 GitHub 저장소를 통해 피드백, 이슈 및 다른 배포의 벤치마크 보고서를 명시적으로 초대합니다.

Sources