콘텐츠로 이동

Rebel100™ 기반 Coding Assistant

개요

이 레퍼런스 디자인은 Rebel100™에서 코딩 에이전트용 서빙 스택을 구성하는 방법을 설명합니다. 이 스택은 RBLN vLLM으로 MiniMax-M2.7을 서빙하고 llm-d를 사용해 Kubernetes에 배포하며, prefill/decode(P/D) 분리, prefix 캐시를 고려한 라우팅, Rebellions Direct Storage(RDS)로의 KV 오프로딩, speculative decoding을 사용합니다. 하드웨어와 소프트웨어 버전부터 Kubernetes 리소스와 서빙 인자까지 하나의 구성을 고정하고 각 값을 선택한 이유를 설명하므로 설계를 재현하고 자체 배포의 출발점으로 활용할 수 있습니다. 또한 이 문서는 검증한 부분과 검증하지 않은 부분을 구분하여 작성하였으며 Target Configuration을 검증한 방법을 설명합니다(검증 방법 참고).

대상 독자

  • modelserver를 최적화하는 AI 엔지니어: 서빙 설정에서 병렬화, KV 캐시, speculative decoding 인자와 값을 변경했을 때의 영향을 먼저 확인하는 것을 권합니다.
  • 클러스터를 구축하고 운영하는 시스템 관리자: 하드웨어, Kubernetes 배포, 운영부터 확인하세요.
  • 엔드포인트에 코딩 에이전트를 연결하는 개발자: 클라이언트 연동부터 읽어 보는 것을 권합니다.

해결하려는 문제

코딩 에이전트는 채팅 클라이언트와 다른 방식으로 모델을 사용합니다. 같은 코드 저장소 컨텍스트로 만든 수만 토큰의 프롬프트를 보내 짧은 답변을 받고, 도구를 호출할 때마다 모델을 다시 호출합니다. 따라서 작업 하나가 여러 요청으로 이어지고 각 요청의 지연 시간이 누적됩니다. 일반 로드 밸런서 뒤에 있는 모델 서버는 이런 사용 패턴을 잘 처리하지 못합니다. 긴 prefill이 같은 서버에 있는 다른 요청의 토큰 생성을 늦추고, 로드 밸런서는 프롬프트의 prefix가 이미 어느 서버에 있는지 알지 못하며, 재사용할 수 있는 KV 캐시가 디바이스 메모리에서 축출됩니다.

다음 워크로드 특성이 이 설계의 구성 선택을 결정합니다.

특성 값 서빙 설계에 미치는 영향
입력 길이 매우 김(수만 토큰) prefill이 큰 비중을 차지하며 TTFT가 사용자가 체감하는 속도를 결정합니다.
출력 길이 짧음(약 1K 토큰) decode 배치 크기보다 토큰당 지연 시간이 더 중요합니다.
출력 형태 코드 등 이전 텍스트를 반복하는 출력 비교적 예측하기 쉬워 speculative decoding에 적합하며 특히 n-gram과 suffix decoding이 잘 맞습니다.
프롬프트 재사용 높음(같은 저장소와 시스템 프롬프트 반복) Automatic Prefix Caching과 prefix 친화도 기반 라우팅에 적합합니다.
호출 패턴 도구 호출 왕복이 반복되는 에이전트 루프 하나의 작업이 여러 요청으로 나뉘므로 요청별 지연 시간이 누적됩니다.

설계 목표

  • 지연 시간 우선. 전체 처리량을 높이려고 배치 크기를 늘리기보다 요청별 지연 시간을 낮게 유지하도록 설계했습니다.
  • prefill과 decode 분리. 두 단계를 별도 인스턴스에서 실행해 긴 프롬프트가 토큰 생성을 방해하지 않도록 하고 RDMA로 두 인스턴스 사이에서 KV를 전송하도록 설계했습니다.
  • 프롬프트 prefix 재사용. 각 요청을 해당 prefix가 이미 있는 인스턴스로 보내고 디바이스 메모리를 넘어 tier 2(RDS)에도 KV를 유지하도록 설계했습니다.
  • 생성 속도 향상. 이 모델용으로 공개된 draft head를 사용하는 EAGLE-3 speculative decoding을 기본으로 적용했습니다. Draft 모델이 필요 없는 대안으로는 검증된 suffix decoding과 n-gram을 적용할 수 있습니다.
  • 표준 Kubernetes API와 단일 차트로 배포. 하나의 Helm 차트로 게이트웨이, 라우터, modelserver를 시작하고 디바이스에는 DRA를, 라우팅에는 Gateway API를 사용하도록 했습니다.
  • 검증 범위 명시. 4노드 Target Configuration을 구성하여 실제 동작을 검증하였고 각 구성 요소를 해당 구성에서 사용했는지 상태로 표시했습니다.

엔드포인트의 인증과 권한 부여는 이 설계의 범위에 포함되지 않으며 게이트웨이 앞에서 처리해야 합니다(클라이언트 연동 참고).

아키텍처

각 요청은 게이트웨이를 거쳐 llm-d 라우터의 Endpoint Picker(EPP)에 도달합니다. EPP는 prefix 캐시 친화도와 부하를 기준으로 prefill 및 decode 인스턴스를 선택합니다. prefill 인스턴스가 프롬프트의 KV를 계산하면 decode 인스턴스가 이를 가져와 출력 토큰을 생성합니다.

flowchart TB
  C["Client or coding agent"] --> GW["Gateway"]
  GW --> EPP["Router (EPP)<br/>picks prefill and decode"]
  EPP --> SC
  subgraph DPOD["Decode pod"]
    SC["Routing sidecar"]
    D["Decode instance<br/>DP4 + expert parallel, 4 NPUs"]
  end
  SC -->|"1. prefill"| P["Prefill instance<br/>PP4, 4 NPUs"]
  D -->|"2. pulls KV over NIXL (RDMA)"| P
  SC -->|"3. decode"| D
  P <-->|"KV tier 2 (LMCache)"| RDS[("RDS on NVMe")]
  1. decode 인스턴스 앞의 라우팅 사이드카가 먼저 선택된 prefill 인스턴스에 요청을 보냅니다.
  2. decode 인스턴스는 NIXL과 RDMA를 통해 prefill 인스턴스에서 프롬프트의 KV를 가져옵니다. prefill은 LMCache를 통해 KV를 RDS에도 저장하고 이후 요청에서 조회합니다.
  3. decode 인스턴스가 출력 토큰을 생성하면 응답은 라우팅 사이드카와 게이트웨이를 거쳐 반환됩니다.

라우터는 각 Pod에 이미 보낸 요청을 바탕으로 prefix 캐시 hit을 예측합니다. Target Configuration(4P4D)에서는 각 노드에 prefill 인스턴스와 decode 인스턴스가 하나씩 실행됩니다. 모든 prefill 인스턴스는 노드에 관계없이 모든 decode 인스턴스와 짝을 이룰 수 있습니다(하드웨어 › 네트워크 참고). 각 구성 요소에 해당하는 Kubernetes 리소스는 Kubernetes 배포를 참고하세요.

모델

MiniMaxAI/MiniMax-M2.7은 전체 파라미터가 229B이고 활성 파라미터가 약 10B인 MoE 모델입니다.

항목 값
레이어 62
hidden size 3,072
attention heads 48(KV heads 8, GQA 6:1), head_dim 128
MoE 256 experts × top-8, intermediate 1,536, shared expert 없음
hybrid attention 사용하지 않음(attn_type_list 항목이 모두 동일)
최대 시퀀스 길이 204,800
vocab size 200,064
체크포인트 FP8(E4M3, block 128×128), 약 234 GB
MTP 모듈 3(num_mtp_modules: 3); 공개된 체크포인트에는 해당 가중치가 포함되지 않음

권장 샘플링 파라미터는 클라이언트 연동 › 권장 샘플링 파라미터를 참고하세요.

KV 캐시 크기

--kv-cache-dtype fp8에서 토큰당 KV 캐시 크기는 약 124 KiB입니다(2 × 8 KV heads × 128 head_dim × 62 layers × 1 byte). 이 크기를 기준으로 서빙 설정에서 KV 용량과 블록 크기를 결정합니다.

단위 크기
1 token 약 124 KiB
--block-size 4096의 1 block 약 0.48 GiB
ISL 50K의 1 request 약 6 GB

라우터의 KV 용량 계산 방법은 서빙 설정 › 라우터가 참조하는 KV 용량에서 확인할 수 있습니다.

구성 요약

다음 상태 배지는 레퍼런스 디자인 › 상태 배지의 정의를 따릅니다.

항목 Target Configuration 상태
규모 RebelRack™(서버 4대와 스위치 및 지원 장비), 32 NPUs Validated
P/D 배치 4P4D(기본), 대안은 5P3D와 3P5D Validated(세 배치 모두 Target Configuration의 같은 4노드에서 측정)
인스턴스당 디바이스 수 4 Validated
prefill 병렬화 PP4(DP1, TP1), expert parallel 비활성화 Validated
decode 병렬화 DP4(PP1, TP1), expert parallel 활성화 Validated
소프트웨어 소프트웨어 스택과 버전에 기재된 버전 Validated

검증에서는 서빙 설정의 서빙 인자를 사용했습니다. 예외는 두 가지입니다. KV는 LMCache와 RDS 없이 NIXL을 통해 prefill에서 decode로 전송했습니다. P/D 배치 비교는 라우터 없이 라운드 로빈으로 요청을 분산했고, 라우터는 에이전트 워크로드에서만 서빙 설정 › 라우터와 다른 설정으로 사용했습니다(Target Configuration 검증 참고). 표준 설정 중 검증에서 사용하지 않은 부분은 해당 부분을 정의하는 페이지에 Unverified로 표시하며 검증 범위와 제한 사항에도 기재합니다.

설계 대안

이 설계는 다음 각 항목에서 하나의 방식을 선택합니다. 대안도 지원하지만 준비 사항이나 포기해야 하는 조건이 달라집니다.

선택 항목 이 설계의 구성 대안 대안을 선택하는 경우
서빙 토폴로지 P/D 분리(4P4D 검증) AGG, prefill 복제본 수를 0으로 설정 긴 prefill을 decode와 분리할 필요가 없고 AGG 운영이 더 간단한 경우. 주요 차트 설정 참고
디바이스 할당 각 Pod의 NPU 4개와 NIC 2개를 같은 NUMA 노드에 배치하는 DRA(전송에는 NIC 1개를 사용하며 나머지는 장애 전환용 예비 NIC) 디바이스 플러그인(devices.npu.mode: devicePlugin) DRA를 사용할 수 없는 경우. 디바이스 플러그인은 디바이스 수만 요청하므로 NUMA 정렬이 보장되지 않습니다. 디바이스 할당 참고
GatewayClass provider Istio agentgateway(examples/gateway-agentgateway.yaml) 공유 가능한 Istio가 없으면 agentgateway를 선택합니다. Target Configuration은 Istio로 검증했습니다. GatewayClass provider 참고
speculative decoding MiniMax-M2.7용으로 공개된 draft head를 사용하는 EAGLE-3 draft 모델이 필요 없는 suffix decoding 또는 n-gram draft head가 사용하는 HBM을 KV 캐시에 쓰려는 경우 또는 워크로드 출력이 프롬프트나 이전 응답을 자주 반복하는 경우. speculative decoding 참고
실행 모드 각 노드의 컨테이너 런타임에서 memlock 제한을 무제한으로 설정한 non-root privileged 네임스페이스가 필요한 root(examples/root-privileged.yaml) 관리형 Kubernetes처럼 노드 설정을 변경할 수 없는 경우. 권한 및 실행 모드 참고

검증 방법

배포 규모를 결정하기 전에 자체 워크로드로 설계를 평가하세요.

Target Configuration은 코딩 에이전트 트래픽의 형태를 재현하는 SWE-bench Verified 기반 합성 워크로드로 검증했습니다. 워크로드, P/D 배치, 동시성 범위, 기능 확인과 정확도 결과는 검증 및 제한 사항을 참고하세요.

검증 범위와 제한 사항

다음 표는 Target Configuration 검증에서 사용하지 않은 주요 항목입니다. 전체 목록이 아니며, 각 페이지에도 상태를 표시합니다.

항목 상태
LMCache/RDS를 통한 KV 오프로딩 Default configuration(기능 및 정확도 검증). Target Configuration 검증은 NIXL로만 KV를 전송했으며 오프로딩 효과는 별도로 분석하지 않았음
대체 GatewayClass provider agentgateway Target Configuration에서 Unverified(검증은 기본 provider인 Istio로 수행했음)

다음 단계

문서 내용
하드웨어 서버, NPU, 네트워크, 스토리지 요구 사항과 선정 근거
소프트웨어 스택과 버전 구성 요소와 고정 버전
Kubernetes 배포 llm-d 기반 배포, 리소스, 시작 절차
서빙 설정 서빙 인자의 표준 설정과 각 값의 선정 근거
클라이언트 연동 엔드포인트, 도구 호출 및 reasoning 처리, 에이전트 연동
운영 확인할 메트릭, 장애 유형, 운영 절차
검증 및 제한 사항 측정 방법, 정확도 결과, 알려진 제한 사항