본문으로 건너뛰기
버전: 1.0.0

Serving

AI 모델을 NPU/GPU 기반 추론 서비스로 배포하고 관리하는 방법을 안내합니다.

Serving 목록

좌측 사이드바에서 Development > Serving을 클릭합니다.

Serving 목록

Connect 버튼을 클릭하면 배포한 서비스의 엔드포인트가 새 탭으로 열립니다. 추론 엔드포인트 URL은 https://<deployment-name>-<project>.<base-domain> 형식의 서브도메인 기반이며, 이 URL에 추론 프레임워크의 API 경로(예: /v1/chat/completions)를 붙여 외부에서 모델 추론 요청을 보낼 수 있습니다.

예를 들어 tutorial-npu-serving Serving이 public-space 프로젝트에 있고 인증 없이 접근 가능한 환경이라면 다음 명령으로 바로 테스트할 수 있습니다.

curl -X POST 'https://tutorial-npu-serving-public-space.nufi.com/v1/chat/completions' \
-H 'Content-Type: application/json' \
-d '{"model": "model-name", "messages": [{"role": "user", "content": "안녕하세요"}]}'

상태

상태설명비정상 대응
Ready모든 Pod이 Ready 상태. 서비스 정상 운영 중
StartingPod이 시작 중. 모델 로딩 등으로 아직 Ready가 아닌 상태잠시 대기하세요. 오래 지속되면 로그를 확인하세요.
Degraded일부 Pod만 Ready. 요청은 처리되지만 전체 성능이 저하됨실패 Pod의 로그 및 이벤트를 확인하세요.
Error하나 이상의 Pod이 CrashLoopBackOff 등 오류 상태Status 컬럼 클릭 → popover에서 failureReason 및 로그 확인
PendingPod이 스케줄되지 않음. 리소스 부족 또는 이미지 Pull 실패클러스터 리소스 현황 및 이미지 설정을 확인하세요.
Scaled DownReplica가 0으로 축소된 상태필요 시 Replicas를 1 이상으로 변경하세요.

Status 컬럼 hover 또는 클릭 시 Pod 상태 popover가 표시됩니다. popover에는 주 에러 reason, Ready 카운트, 실패 Pod 목록과 각 Pod의 View logs 링크(새 탭, Logs 탭으로 이동)가 포함됩니다.


Serving 생성

Create 버튼을 눌러 생성 페이지로 이동합니다. 생성은 3단계로 진행됩니다.

Serving 생성 - 기본 정보

필드설명필수
서비스 이름Serving 이름 (소문자, 숫자, 하이픈, 최대 63자)
설명Serving 설명-
템플릿 선택추론 프레임워크 템플릿 선택 (vLLM / 사용자 지정)

서비스 이름 규칙

  • 소문자 영문, 숫자, 하이픈(-) 사용 가능
  • 하이픈으로 시작하거나 끝날 수 없음
  • 최대 63자 (Kubernetes 제한)

예시: my-model-v1, llm-server-prod


Serving 상세 페이지

Serving 목록에서 항목을 클릭하면 상세 페이지로 이동합니다. Overview 탭 우측 상단의 Edit 버튼을 클릭하면 편집 모드로 전환되며, 변경 후 화면 하단의 Floating Save Bar에서 Save Changes 버튼을 클릭하여 적용합니다. Pod 재시작이 필요한 변경(이미지, 포트, 리소스, 볼륨 등)이 포함된 경우 확인 다이얼로그가 표시됩니다.

Serving 상세 - Overview 편집 모드

카드 구성

Overview 탭은 현재 Serving이 정상적으로 요청을 받을 수 있는지 확인하고, 생성 시 입력한 배포 스펙을 다시 보거나 수정하는 화면입니다.

카드설명
StatusServing 전체 상태 요약
PodsPod별 상태 테이블 — 실패 Pod 우선 정렬
Basic InformationServing 이름과 설명
Container추론 서버 컨테이너 이미지와 포트
ResourcesCPU, Memory, Accelerator, Replicas
Command & Arguments컨테이너 시작 명령어와 실행 인자
Environment Variables컨테이너 환경변수
VolumesPVC 마운트와 마운트 경로
Transformer전/후처리 사이드카 설정

Status

Status는 Serving의 현재 운영 상태를 가장 먼저 확인하는 영역입니다. Ready Replicas는 준비된 Pod 수와 목표 Pod 수를 ready / desired 형식으로 보여주며, 두 값이 같으면 모든 복제본이 요청을 받을 준비가 된 상태입니다. Health는 Ready, Starting, Degraded, Error, Pending, Scaled Down 같은 상태를 요약해 표시합니다.

Auto Scaling이 켜져 있으면 최소/최대 Replica 범위도 함께 표시됩니다. 이 값은 현재 실행 중인 Pod 수가 자동으로 늘거나 줄 수 있음을 의미하므로, 실제 확장 정책은 Settings 탭의 스케일링 설정과 함께 확인합니다. Created At은 Serving이 생성된 시각입니다.

Pods

Serving 상세 — Pods 섹션

Serving은 하나 이상의 Kubernetes Pod으로 실행됩니다. Pods 섹션은 각 Pod이 어느 노드에서 실행 중인지, 준비 상태인지, 재시작이 반복되는지 확인하는 영역입니다. Status가 Starting, Degraded, Error, Pending처럼 정상 Ready가 아닐 때는 이 섹션에서 어느 Pod이 문제인지 먼저 확인합니다.

실패 Pod은 테이블 상단에 우선 정렬됩니다. Reason에는 Ready=false 또는 오류 상태의 원인이 표시되고, View logs 링크를 클릭하면 해당 Pod의 Logs 탭으로 이동해 추론 서버 로그를 확인할 수 있습니다.

컬럼설명
StatusPod의 현재 상태 (Running / Pending / CrashLoopBackOff 등)
NodePod이 스케줄된 노드 이름
Restarts컨테이너 재시작 횟수
AgePod 생성 후 경과 시간
ReasonReady=false 또는 오류 시 실패 원인 메시지
View logsReady=false이거나 restartCount > 0인 Pod에 표시되는 로그 링크. 클릭 시 새 탭에서 해당 Pod의 Logs 탭으로 이동

Basic Information

Basic Information은 Serving 이름과 설명을 표시합니다. Name은 생성 후 수정할 수 없고, Description은 Edit 모드에서 수정할 수 있습니다.

Container

Container는 실제 추론 서버를 실행하는 컨테이너 설정입니다. Image에는 vLLM 또는 Custom 서버 이미지가 표시되고, Inference Port에는 컨테이너 내부에서 추론 서버가 listen 하는 포트가 표시됩니다.

Connect 버튼으로 접근하는 외부 엔드포인트는 이 Serving으로 라우팅되며, 컨테이너 내부에서는 Inference Port로 요청이 전달됩니다. 이미지나 포트를 바꾸고 저장하면 Pod를 재시작합니다.

Resources

Resources는 Serving Pod 하나가 요청하는 컴퓨팅 자원과 실행 개수를 표시합니다. CPUMemory는 컨테이너에 할당할 기본 자원이고, AcceleratorAccelerator Count는 GPU/NPU 같은 가속기 종류와 개수입니다. Replicas는 같은 Serving Pod을 몇 개 실행할지 나타냅니다.

리소스 값이 클러스터에 남아 있는 자원보다 크면 Pod이 Pending 상태가 될 수 있습니다. 처리량을 늘리려면 Replicas를 늘릴 수 있지만, 그만큼 CPU, Memory, Accelerator도 추가로 필요합니다.

Command & Arguments

Command & Arguments는 컨테이너가 시작될 때 실행되는 명령어와 인자를 표시합니다. vLLM 템플릿으로 생성한 Serving은 선택한 모델, dtype, tensor parallel size, additional arguments 같은 값이 실행 인자에 반영됩니다. Custom 템플릿은 사용자가 지정한 Command Override와 Arguments가 그대로 사용됩니다.

모델 경로, 포트, 런타임 옵션이 잘못되면 Pod은 실행되더라도 추론 서버가 정상 기동하지 않을 수 있습니다. Status나 Pods에서 오류가 보이면 이 섹션의 실행 인자와 로그를 함께 확인합니다.

Environment Variables

Environment Variables는 컨테이너에 주입되는 KEY=VALUE 설정입니다. 이미지에 고정하지 않는 API 주소, 토큰, 모델 서버 옵션, 프레임워크 설정을 환경변수로 전달할 때 사용합니다.

Edit 모드에서는 환경변수를 추가, 수정, 삭제할 수 있습니다. 값을 바꾸기 전에는 실제 컨테이너 명령어나 애플리케이션이 해당 환경변수를 참조하는지 확인합니다.

Volumes

Volumes는 Serving Pod에 마운트된 PVC와 마운트 경로를 표시합니다. NuFi가 기본으로 붙이는 시스템 볼륨(model-cache, dshm)과 사용자가 추가한 Data Volume을 구분해서 확인할 수 있습니다.

모델 파일, LoRA 어댑터, 설정 파일, 데이터 파일을 PVC에 두고 컨테이너에서 읽어야 한다면 이 섹션의 마운트 경로가 Command & Arguments 또는 환경변수에서 참조하는 경로와 일치해야 합니다. 볼륨 구성을 바꾸면 Pod 재시작이 필요할 수 있습니다.

Transformer

Transformer는 추론 요청 전처리 또는 응답 후처리를 담당하는 사이드카 설정입니다. Preprocessor를 켜면 요청이 추론 서버로 들어가기 전에 별도 컨테이너를 거칠 수 있고, Postprocessor를 켜면 추론 서버 응답이 외부로 나가기 전에 별도 컨테이너를 거칠 수 있습니다.

Transformer가 비활성화되어 있으면 추론 요청은 기본 추론 서버 컨테이너로 바로 전달됩니다. 활성화된 경우에는 사이드카 이미지, 포트, 환경변수도 Serving 동작에 영향을 주므로 Container 설정과 함께 확인합니다.

배포 고급 설정

Serving 상세 페이지의 Settings 탭에서 추론 서버, 트래픽, Transformer를 설정합니다.

Inference Server

Inference Server 탭은 Serving Pod 수와 헬스 체크 엔드포인트를 조정하는 영역입니다.

Auto Scaling은 요청 부하에 따라 Pod 수를 자동으로 늘리거나 줄이는 기능입니다. 트래픽이 불규칙하거나 예측하기 어려운 서비스에 적합합니다. 고정된 수의 Pod를 항상 유지하려면 비활성화하고 Replicas만 조정하세요.

Inference Server 기본 설정

설정설명기본값
Replicas레플리카 수 조정1
Auto Scaling트래픽 부하에 따라 Pod 수 자동 조절Off
Readiness EndpointPod가 트래픽 받을 준비 여부 확인 엔드포인트 (예: /health, /v1/models)-
Liveness EndpointPod 정상 동작 여부 확인. 반복 실패 시 자동 재시작 (예: /health, /healthz)-

Auto Scaling 활성화 시 추가 설정:

Auto Scaling 활성화 설정

설정설명기본값
Min Replicas항상 유지할 최소 Pod 수. 최소값은 1이며 0(scale-to-zero)은 지원하지 않습니다.1
Scale-in Delay (s)트래픽 감소 후 Pod 축소까지 대기 시간 (flapping 방지)60
Max Replicas최대 Pod 수 (클러스터 가속기 여유분 고려 필요)10
Target Response Time (ms)자동 확장 기준 P95 응답 시간 목표값. 초과 시 Pod 증가5000

Traffic Management

Traffic Management는 여러 Pod로의 요청 분산 방식, 온도 기반 트래픽 보호, 비동기 처리를 제어하는 기능 모음입니다. 단일 Pod로 운영 중이면 Load BalancingTemperature Policy는 비활성화 상태로 두어도 무방합니다. Async Queue는 응답 대기 없이 요청을 제출하고 나중에 결과를 조회하는 비동기 워크플로우에 사용합니다.

Traffic Management 기본 설정

기능설명기본값
Load Balancing여러 Pod로 요청 분산. Replicas가 2 이상인 경우 활성화를 권장합니다.Off
Temperature PolicyGPU/NPU 온도 임계값 초과 시 해당 Pod 트래픽 자동 차단, 회복 시 재개. 장시간 고부하 추론 시 하드웨어 보호를 위해 활성화를 권장합니다.Off
Async QueueRedis 기반 비동기 요청 큐 활성화. 클라이언트가 요청 제출 후 즉각 응답을 기다리지 않아도 되는 배치 추론 또는 장시간 소요 작업에 적합합니다.Off

Load Balancing 활성화 시 Policy 드롭다운이 나타납니다:

Load Balancing 활성화

옵션설명
LEAST_REQUEST (Recommended)활성 요청 수가 가장 적은 Pod로 라우팅 (기본값)
ROUND_ROBINPod들을 순서대로 돌아가며 라우팅
RANDOM무작위로 Pod를 선택하여 라우팅

Temperature Policy 활성화 시 임계값 설정이 나타납니다:

Temperature Policy 활성화

설정설명기본값
Critical Threshold (°C)트래픽 차단 온도 기준85
Recovery Threshold (°C)트래픽 재개 온도 기준70