CRIU 기반 GPU 무중단 마이그레이션 (Preview)
2026.04 기준, GPU CRIU는 NVIDIA cuda-checkpoint + CRIU + runc 통합이 alpha/beta 상태이며 프로덕션 투입 불가합니다. 본 문서는 기술 동향과 검증 체크리스트 제공 목적입니다.
실전 대안(graceful drain + warm start) 순서와 EKS Auto Mode 제약은 GLM-5 운영자 실전 검증 이전 상태입니다. 검증 완료 시 timing·순서 실측값과 배너가 갱신됩니다.
실배포 검증 추적: Issue #7
배경: Spot reclaim과 KV cache 손실 문제
문제 상황
대형 LLM 서빙 환경에서 Spot 인스턴스 사용은 비용 절감의 핵심 전략입니다(85-94% 절감). 그러나 Spot reclaim 발생 시 다음과 같은 문제가 발생합니다:
p5en.48xlarge H200×8 환경의 GLM-5 (744B MoE) 사례:
| 항목 | 시간 | 비고 |
|---|---|---|
| Spot reclaim 경고 | 2분 | AWS가 제공하는 유일한 시간 |
| 모델 재로딩 시간 | 15-20분 | 744B 파라미터 가중치 로드 |
| KV Cache 워밍업 | 5-10분 | 주요 prefix 재생성 |
| 총 복구 시간 | 22-32분 | 긴급 요청 처리 불가 |
| 비용 | $40-65/reclaim | p5en 시간당 ~$120 기준 |
Spot reclaim의 근본적 한계:
Spot reclaim 경고 (2분)
↓
├─ gracefulShutdown (1-2분) — 진행 중 요청 완료
├─ 모델 언로드 (30초-1분) — 메모리 해제
└─ Pod 종료
↓
새 노드 프로비저닝 (3-5분)
↓
모델 재로딩 (15-20분) ← 병목
↓
KV Cache 워밍업 (5-10분) ← 병목
↓
서빙 재개 (총 25-37분)
기존 대안의 한계
| 대안 | 장점 | 한계 |
|---|---|---|
| Warm Replica | 즉시 전 환 가능 | GPU 2배 비용 ($240/hr → $480/hr) |
| llm-d KV Offload | KV Cache만 네트워크 전송 | 모델 재로딩은 여전히 필요 |
| On-Demand fallback | 안정적 | Spot 대비 10배 비용 |
| Multi-AZ 분산 | AZ 장애 대응 | Spot reclaim 자체는 해결 불가 |
CRIU가 해결하려는 핵심 문제
CRIU(Checkpoint/Restore In Userspace)는 실행 중인 프로세스의 전체 상태를 디스크로 저장(checkpoint)하고, 다른 노드에서 그 시점부터 재개(restore)할 수 있게 합니다.
GPU 워크로드에 적용 시 기대 효과:
Spot reclaim 경고 (2분)
↓
CRIU checkpoint (1-2분) — GPU 메모리 + 프로세스 상태 dump
↓
새 노드 프로비저닝 (3-5분)
↓
CRIU restore (1-3분) ← 모델 재로딩 생략
↓
서빙 재개 (총 5-10분, 70-80% 단축)
절감 효과:
- 복구 시간: 25-37분 → 5-10분 (70-80% 단축)
- 비용: reclaim당 $40-65 → $10-20 (50-70% 절감)
- SLA: 긴급 요청을 22분 대신 5분 안에 처리 가능
기술 스택 현황 (2026.04)
전체 아키텍처
핵심 컴포넌트 성숙도
| 컴포넌트 | 버전 | 상태 | 비고 |
|---|---|---|---|
| CRIU | v4.0+ | Stable | CPU 워크로드는 프로덕션 검증 |
| cuda-checkpoint | driver 570+ | Active Development | NVIDIA Labs, 공식 릴리스 태그 없음, UVM/IPC 메모리 미지원 (repo) |
| nvidia-container-toolkit | v1.17+ | Experimental | CR(checkpoint/restore) 플러그인 포함 |
| runc | v1.2+ | Alpha | CRIU 통합, GPU CR 지원 |
| K8s ContainerCheckpoint API | 1.30 Beta (default enabled) | Beta | KEP-2008, 1.25 Alpha → 1.30 Beta (default true). GA 일정 미확정 |
| K8s GPU checkpoint 공식 지원 | - | 미지원 | KEP-2008 문서: "external hardware device (GPU, InfiniBand) 접근 시 실패 가능". AMD만 일부 동작 |
| EKS 지원 | - | 미지원 | Auto Mode는 feature gate 제어 불가, Standard Mode도 GPU CR 공식 미검증 |
- cuda-checkpoint: NVIDIA Labs 프로젝트, GitHub에 tagged release 없음. driver 570+에서 "actively developed" 상태 명시. UVM·IPC 메모리 미지원, x64 전용
- K8s ContainerCheckpoint API: 1.25 Alpha → 1.30 Beta (default enabled). GA 일정은 Kubernetes enhancements 트래커에 확정 공지 없음 (2026-04 기준)
- K8s KEP-2008 자체 주석: "Checkpointing anything with access to an external hardware device like a GPU or InfiniBand can fail" — NVIDIA GPU는 공식 지원 안 됨, AMD만 일부 동작
- EKS: Auto Mode는 feature gate 제어 불가. Standard Mode에서도 GPU CR은 AWS 공식 문서화 없음
- 프로덕션 사례: 공개된 대규모 LLM GPU CRIU 프로덕션 사례 없음 (2026-04 기준)
기술 스택 상세
CRIU (Checkpoint/Restore In Userspace)
- 역할: 리눅스 프로세스의 메모리, 파일 디스크립터, 네트워크 소켓, 스레드 상태를 checkpoint
- GPU 제약: 기본적으로 GPU 메모리를 인식하지 못함 → cuda-checkpoint 필요
- 성숙도: CPU 워크로드는 10년+ 역사로 안정적. Docker/Podman도 사용
cuda-checkpoint (NVIDIA)
- GitHub: NVIDIA/cuda-checkpoint
- 역할: CUDA context, GPU 메모리(device memory), unified memory를 dump/restore
- 제약사항:
- H100/H200: device memory 최대 80GB/141GB → checkpoint 파일 크기 동일
- PCIe BAR 재매핑: 동일 GPU UUID 노드로만 restore 가능
- NVLink topology 고정: 멀티 GPU 워크로드는 동일 토폴로지 필요
- CUDA 버전 일치: checkpoint/restore 시 동일 CUDA 버전 필수
nvidia-container-toolkit CR 플러그인
- 역할: containerd/runc가 GPU 컨테이너를 checkpoint/restore할 때 cuda-checkpoint를 자동 호출
- 설정:
/etc/nvidia-container-runtime/config.toml에서checkpoint-restore = true - 현황: v1.17+에서 experimental 지원
K8s ContainerCheckpoint API (KEP-2008)
# K8s 1.30+ (Beta, feature gate default enabled)
apiVersion: v1
kind: Pod
metadata:
name: vllm-pod
spec:
enableServiceLinks: false
containers:
- name: vllm
image: vllm/vllm-openai:latest
# checkpoint 대상 컨테이너
checkpoint 생성:
kubectl checkpoint create <pod-name> \
--container=vllm \
--output=/var/lib/kubelet/checkpoints/vllm-ckpt.tar
restore (새 노드에서):
kubectl apply -f pod-restore.yaml # checkpoint 경로 참조
- 1.30: Beta, default enabled — 별도 feature gate 활성화 불필요 (단, CRI-O 기본, containerd는 부분 지원)
- GPU 체크포인트: KEP-2008 공식 미지원 (AMD 제한적, NVIDIA는 cuda-checkpoint + nvidia-container-toolkit CR 플러그인 별도 구성 필요)
- EKS Auto Mode: containerd 기반이며 kubelet/container runtime 튜닝 제한 → 사실상 사용 불가
- EKS Standard Mode: CRI-O 교체 + Custom AMI + 드라이버 고정이 현실적 경로, AWS 공식 지원 없음
GPU 상태 checkpoint의 근본 제약
Device Memory Dump 크기
| GPU | VRAM | checkpoint 파일 크기 | 전송 시간 (10GbE) | 전송 시간 (100GbE) |
|---|---|---|---|---|
| A100 40GB | 40GB | ~40GB | 32초 | 3.2초 |
| H100 80GB | 80GB | ~80GB | 64초 | 6.4초 |
| H200 141GB | 141GB | ~141GB | 113초 | 11.3초 |
| H200 x8 | 1,128GB | ~1,128GB | 15분 | 1.5분 |
p5en.48xlarge (H200×8)의 checkpoint는 1.1TB입니다. 노드 간 전송이 필요한 경우:
- 10GbE: 15분 (Spot reclaim 2분 내 불가능)
- 100GbE: 1.5분 (Spot reclaim 2분 내 가능, but ENA 제약)
- 실질적으로 노드 간 migrate는 불가능, 동일 노드 재시작만 현실적
PCIe BAR 재매핑 제약
GPU는 PCIe Base Address Register(BAR)를 통해 CPU와 통신합니다. checkpoint 시 저장된 BAR 주소는 하드웨어 종속적이므로 다음 제약이 있습니다:
| 시나리오 | 가능 여부 | 이유 |
|---|---|---|
| 동일 노드 재시작 | ✅ | 동일 PCIe 슬롯, 동일 BAR 주소 |
| 동일 인스턴스 타입 (동일 AZ) | ⚠️ Experimental | GPU UUID 일치 보장 어려움 |
| 동일 인스턴스 타입 (Cross-AZ) | ❌ | PCIe 토폴로지 상이 |
| 이기종 (H200→H100) | ❌ | 아키텍처·메모리 크기 상이 |
NVLink Topology 고정
멀티 GPU 워크로드(TP=4, TP=8)는 GPU 간 NVLink 연결 구조에 의존합니다. checkpoint는 GPU 인덱스와 NVLink 토폴로지를 절대 경로로 저장하므로:
Original:
GPU 0 <--NVLink--> GPU 1
GPU 2 <--NVLink--> GPU 3
Restore on different topology:
GPU 0 <--PCIe--> GPU 1 ← NVLink 끊김
GPU 2 <--NVLink--> GPU 3
→ Tensor Parallelism 통신 실패
결론: TP>1 워크로드는 동일 NVLink 구성 노드로만 restore 가능
CUDA Context 버전 일치
- CUDA Runtime 버전: checkpoint/restore 시 동일 CUDA 버전 필수 (12.2 ↔ 12.3 불가)
- Driver ABI 호환성: GPU 드라이버 메이저 버전 일치 필요 (R580 ↔ R570 불가)
- AMI 고정: EKS Auto Mode는 드라이버 버전 제어 불가 → Karpenter + Custom AMI 필요
EKS 적용 시나리오 매트릭스
시나리오별 실현 가능성
| 시나리오 | 실현 가능성 | 복잡도 | 비고 |
|---|---|---|---|
| (a) 동일 노드 재시작 | ✅ Ready | 중간 | OS 업데이트, kubelet 재시작 |
| (b) 동일 인스턴스 타입 migrate | ⚠️ Experimental | 높음 | GPU UUID 일치 보장 어려움 |
| (c) 이기종 migrate (H200↔H100) | ❌ Blocked | - | 아키텍처 상이 |
| (d) Cross-AZ migrate | ❌ Blocked | - | NIXL 권장 |