TT Lab
블로그 시작하기
배우기 러닝패스 코스

쿠버네티스 GPU 스케줄링과 AI 배치

복제의 단위는 그룹이다

TT Lab 에서 이어서 보기

한 줄 요약

모델 하나가 GPU 한 노드에 다 들어가지 않으면 여러 노드가 「한 엔진」이 되어야 합니다(텐서·파이프라인 병렬). 그 엔진 하나가 서비스의 복제 단위입니다. LeaderWorkerSet(LWS)은 리더 파드 하나와 워커 파드 몇 개를 「그룹」으로 묶고, 그 그룹을 Deployment 처럼 늘리고 줄이고 굴려 바꿉니다.

왜 이게 필요했나

추론 서비스는 보통 Deployment 로 띄웁니다. 파드 하나가 모델 하나를 들고, 파드를 늘리면 처리량이 늡니다. 그런데 70B 를 넘는 모델을 노드 두 대에 나눠 올리면 「파드 하나 = 모델 하나」 가 깨집니다. 두 파드가 짝을 이뤄야 모델 하나가 되고, 짝 중 하나가 죽으면 다른 하나도 쓸모가 없습니다.

StatefulSet 으로 흉내 내 보면 문제가 드러납니다. 파드에 번호는 붙지만 「0번과 1번이 한 짝, 2번과 3번이 한 짝」 이라는 개념이 없습니다. 짝 하나가 죽어도 그 파드만 다시 뜨고, 남은 짝은 끊긴 통신을 붙잡고 멈춰 있습니다. 판을 올릴 때도 파드 단위로 굴러가서, 옛 판 리더와 새 판 워커가 한 짝이 되는 순간이 생깁니다. vLLM·SGLang 의 멀티 노드 배포와 llm-d, Dynamo 의 대안 경로가 모두 LWS 를 쓰는 이유가 이것입니다.

어떻게 동작하나

replicas                       그룹 수(서비스의 복제 수)
leaderWorkerTemplate.size      그룹 하나의 파드 수(리더 1 + 워커 size-1)
leaderTemplate / workerTemplate 리더와 워커의 파드 틀(다를 수 있다)
restartPolicy                  RecreateGroupOnPodRestart 면 그룹 안 파드 하나가 재시작할 때 그룹 전체를 다시 만든다
rolloutStrategy                그룹 단위로 굴려 바꾼다(maxUnavailable·maxSurge 도 그룹 수)
exclusive-topology 주석         그룹 하나가 토폴로지(노드 등) 하나를 독차지하게 한다

실험 VM(LWS v1.0.0)에서 본 이름과 환경 변수입니다. 그룹 번호가 파드 이름에, 워커 번호가 뒤에 붙습니다.

llm-0   llm-0-1    ← 그룹 0 의 리더와 워커
llm-1   llm-1-1    ← 그룹 1
LWS_LEADER_ADDRESS=llm-0.llm.infer   LWS_GROUP_SIZE=2   LWS_WORKER_INDEX=1

안쪽은 StatefulSet 입니다. 리더들을 담는 StatefulSet 하나(llm)와 그룹마다 워커 StatefulSet 하나(llm-0, llm-1)가 생기고, 헤드리스 서비스 llm 이 이름을 풀어 줍니다.

현장에서 만나는 모습

English corner

The unit of replication is the group, not the pod.

leader, worker, group, exclusive placement 네 단어로 LWS 문서를 읽을 수 있습니다.

다음 실습에서 할 것

그룹 둘짜리 LWS 를 띄워 이름과 환경 변수를 읽고, 워커 하나를 실패시켜 그 그룹만 다시 만들어지는 것을 봅니다. 그룹 단위 롤링 업데이트를 하고, KWOK 노드 두 대에 그룹마다 노드 하나씩 독차지하게 배치한 뒤, 마지막으로 반쪽 그룹을 일부러 만들어 봅니다.