문제 해결
GPU 워크로드가 배치되지 않거나 모델 서빙 엔드포인트에 연결할 수 없을 때 확인할 항목을 안내합니다.
- Workload가 SchedulingGated 상태에 머무름
- Workload는 승인됐지만 Pod가 Pending 상태임
- Dynamo Worker가 모델을 로드하지 못함
- KServe InferencePoolReady가 WaitingForGateway 상태임
- KServe Worker Pod가 생성되지 않음
- Prefill Deployment 수정 시 field is immutable 오류 발생
- Gateway 요청이 401 Unauthorized로 거부됨
- Gateway 요청이 404 또는 503으로 실패함
- LLM 응답이 중간에 종료됨
- 추가 지원이 필요한 경우
Workload가 SchedulingGated 상태에 머무름
Kueue가 Workload를 아직 승인하지 않은 상태입니다.
-
Workload의 Queue 이름과 우선순위를 확인합니다.
kubectl get workload -n <사용자 namespace> --show-labels -
LocalQueue가 올바른 ClusterQueue를 참조하는지 확인합니다.
kubectl get localqueue -n <사용자 namespace> -o yaml -
Workload의 Admission 상태와 메시지를 확인합니다.
kubectl describe workload <Workload 이름> -n <사용자 namespace>
kueue.x-k8s.io/queue-name과 kueue.x-k8s.io/priority-class는 annotation이 아닌 metadata.labels에 지정해야 합니다.
Workload는 승인됐지만 Pod가 Pending 상태임
Kueue가 자원을 승인했지만 Scheduler가 워크로드의 배치 조건을 충족하지 못한 상태일 수 있습니다.
kubectl describe pod <Pod 이름> -n <사용자 namespace>
kubectl get podgroup -n <사용자 namespace>
다음 항목을 확인합니다.
- 요청한 GPU, CPU, 메모리를 제공할 수 있는 노드가 있는지 확인
- Gang을 구성하는 모든 Pod를 동시에 배치할 수 있는지 확인
- KAI Scheduler 사용 시
kai.scheduler/enabled: "true"와schedulerName: kai-scheduler가 모두 지정되었는지 확인 - Volcano 사용 시
schedulerName: volcano-scheduler가 지정되었는지 확인 - Network Topology의
hard조건이 지나치게 제한적이지 않은지 확인
Dynamo Worker가 모델을 로드하지 못함
kubectl get pod -n <사용자 namespace>
kubectl logs <Worker Pod 이름> -n <사용자 namespace> -c main
kubectl describe pod <Worker Pod 이름> -n <사용자 namespace>
다음 항목을 확인합니다.
modelsPVC가 정상적으로 Bound 상태인지 확인/mnt/models/<모델 경로>가 실제 PVC 디렉터리와 일치하는지 확인--tensor-parallel-size와nvidia.com/gpu요청값이 같은지 확인- Dynamo 런타임 이미지 태그와
runtimeVersionOverride가 일치하는지 확인 - 노드가 요청한 CPU, 메모리, GPU를 제공할 수 있는지 확인
KServe InferencePoolReady가 WaitingForGateway 상태임
LLMInferenceService의 HTTPRoute가 InferencePool을 참조하는지 확인합니다.
kubectl get httproute <서비스명>-kserve-route -n <사용자 namespace> -o yaml
kubectl get inferencepool <서비스명>-inference-pool -n <사용자 namespace>
spec.router.route.http.spec.rules[].backendRefs에 다음 값이 지정되어 있어야 합니다.
backendRefs:
- group: inference.networking.k8s.io
kind: InferencePool
name: <서비스명>-inference-pool
port: 8000
KServe Worker Pod가 생성되지 않음
spec.worker에 initContainers가 추가되었는지 확인합니다. llm-d 라우팅 사이드카는 Decode Leader에만 필요하며 Worker에는 추가하지 않습니다.
Worker Pod가 생성되지 않으면 Volcano Gang이 충족되지 않아 Leader Pod도 Pending 상태에 머물 수 있습니다.
Prefill Deployment 수정 시 field is immutable 오류 발생
배포 후 LLMInferenceService의 metadata.labels 또는 spec.prefill.labels를 변경하면 Prefill Deployment의 selector 변경으로 오류가 발생할 수 있습니다.
현재 Prefill Deployment 이름을 확인한 후 삭제합니다. KServe 컨트롤러가 새 설정으로 Deployment를 다시 생성합니다.
kubectl get deployment -n <사용자 namespace>
kubectl delete deployment <Prefill Deployment 이름> -n <사용자 namespace>
Deployment를 삭제하면 Prefill 요청 처리가 일시적으로 중단됩니다. 트래픽 영향을 확인한 후 수행하세요.
Gateway 요청이 401 Unauthorized로 거부됨
-
요청의
authorization헤더를 확인합니다. -
API 키 앞에
Bearer접두어가 포함되어 있는지 확인합니다. -
Secret의 key가 클라이언트 식별자이고 value가 실제 API 키인지 확인합니다.
kubectl get secret <Secret 이름> -n <사용자 namespace>
kubectl describe securitypolicy <SecurityPolicy 이름> -n <사용자 namespace> -
SecurityPolicy의
targetRefs[].name이 사용자 네임스페이스와 같은 Gateway 이름인지 확인합니다.
Gateway 요청이 404 또는 503으로 실패함
kubectl get gateway,httproute -n <사용자 namespace>
kubectl get backend,aiservicebackend,aigatewayroute -n <사용자 namespace>
kubectl describe httproute <HTTPRoute 이름> -n <사용자 namespace>
다음 항목을 확인합니다.
- HTTPRoute의
Accepted와ResolvedRefs조건이True인지 확인 - 호스트명이 Gateway 리스너의 호스트명 패턴에 포함되는지 확인
- Backend의 FQDN과 포트가 실제 Service와 일치하는지 확인
- 요청 본문의
model값이 AIGatewayRoute의x-ai-eg-model매칭 값과 일치하는지 확인 - 서빙 Pod와 Service Endpoint가 준비되었는지 확인
LLM 응답이 중간에 종료됨
LLM 요청 시간이 Gateway의 기본 타임아웃보다 길 수 있습니다. BackendTrafficPolicy의 타임아웃을 확인합니다.
kubectl get backendtrafficpolicy <BackendTrafficPolicy 이름> -n <사용자 namespace> -o yaml
requestTimeout, streamIdleTimeout, maxStreamDuration이 모델의 최대 응답 시간에 맞게 설정되어 있는지 확인합니다.
추가 지원이 필요한 경우
문제가 해결되지 않으면 다음 정보를 포함하여 담당 CS 채널로 문의해 주세요.
- 사용자 네임스페이스
- 문제가 발생한 리소스 종류와 이름
- 발생 시각
kubectl describe의 Events- 관련 Pod 로그
- Workload, PodGroup, HTTPRoute 또는 LLMInferenceService 상태
문의 내용에 API 키, Secret 원문, 인증 토큰 또는 기타 민감한 정보를 포함하지 마세요.