AI 기본 지식

High-level Server Architecture for LLM Inference

study_love 2025. 12. 15. 21:17

 오늘 이 게시물에서는 LLM inference를 위한 Server의 Architecture를 high-level에서 공부하고, 그 Architecture위에서 어떻게 여러 user들의 LLM input request를 inference 하는지 알아보자. 

Server Architecture

A. Node

 Server architecture에서 가장 작은 단위는 node이다. Node는 우리가 흔히 생각하는 컴퓨터 한 대에 해당하며, 하나의 운영체제(OS) 가 하나의 node를 관리한다. 하나의 node 안에는 여러 개의 CPU(소켓)여러 개의 GPU가 함께 존재할 수 있다.

Node
 ├─ OS kernel (1)
 ├─ CPU socket 0
 ├─ CPU socket 1
 ├─ GPU 0
 ├─ GPU 1
 └─ GPU 2

 

B. Cluster

 그 다음 단계로, 여러 개의 node가 모여 cluster를 구성한다. Cluster는 서로 다른 컴퓨터, 즉 여러 대의 node로 이루어진 그룹이다. 각 node는 서로 다른 물리적 장비이기 때문에, node 간의 통신은 반드시 네트워크를 통해 이루어진다. 일반적으로 하나의 cluster 내부에 속한 node들은, 다른 cluster에 속한 node들과 통신할 때에 비해 더 빠른 속도로 데이터를 주고받기 위해 Ethernet과 같은 고속 네트워크 인터페이스로 연결된다.

 

Cluster
 ├─ Node (OS)
 │   ├─ CPU sockets
 │   ├─ GPUs
 │   └─ Local memory
 ├─ Node (OS)
 │   └─ ...
 └─ High-speed interconnect

 

LLM Inference on Server Architecture 

 자 이제 Server Architecture에 대해서 공부했으니, 이 Server Architecture 위에서 어떻게 LLM Inference가 일어나는지 공부해보자. LLM Inference를 담당하는 가장 작은 단위의 프로그램은 LLM Inference Engine이다. 따라서 Inference Engine에 대해 먼저 공부해보자. 

A. LLM Inference Engine

 LLM inference engine은 한 대의 컴퓨터(node)에서 실행되는 하나의 프로그램이다.  

inference engine은:

  1. 네트워크를 통해 사용자 요청(query)을 수신
  2. 여러 요청을 내부 큐에 적재
  3. 요청들을 prefill/decoding 단위로 나누고, 어떤 순서와 방식으로 처리할지 scheduling
  4. GPU 자원을 활용해 추론 수행
  5. 결과를 다시 네트워크를 통해 사용자에게 반환한다. 

즉, inference engine은 다음과 같이 정의할 수 있다. Inference engine은 사용자 요청을 네트워크로 수신하여, 요청들을 스케줄링하고, GPU 자원을 효율적으로 사용해 추론을 수행하며, 결과를 다시 네트워크로 반환하는 소프트웨어 시스템이다.

 

LLM inference engine에 대해서 이해하고 나면, 이런 의문이 자연스럽게 떠오를 수 있다. “그렇다면 서버에 LLM inference engine 하나만 띄우면, 모든 처리를 알아서 해주는 것 아닐까?” 하지만 아쉽게도 그렇지 않다.

Inference engine은 기본적으로 하나의 컴퓨터(node) 안에서 동작하도록 설계된 소프트웨어이기 때문에, 한 번에 활용할 수 있는 자원 역시 단일 컴퓨터의 CPU와 GPU로 제한된다. 여러 대의 컴퓨터에 걸쳐 동시에 동작하는 프로그램을 설계하는 것은 훨씬 복잡한 문제이기 때문에, 대부분의 inference engine은 이러한 분산 환경을 직접 다루지 않는다. 따라서 여러 컴퓨터의 자원을 활용해 LLM inference 서비스를 제공하고자 한다면, 여러 node에서 inference engine을 각각 실행하고, 사용자 요청을 각 engine으로 적절히 분배해주는 별도의 소프트웨어 계층을 추가로 설계해야 한다는 결론에 이르게 된다.

B. Request Routing

이제 node 하나를 넘어, cluster 전체 관점에서 요청 흐름을 살펴보자.

일반적인 LLM 서비스 환경에서는:

  • 하나의 cluster에 여러 node가 존재하고
  • 각 node 위에는 하나 또는 여러 개의 inference engine이 실행된다.

이때 전체 시스템은 보통 2단계 분배 구조를 가진다.

 

가장 앞단에는 cluster 단위로 요청을 분배하는 소프트웨어가 존재한다.

이 계층의 역할은:

  • 사용자 요청을 수신
  • 어떤 cluster가 해당 요청을 처리할지 결정
  • 부하, 가용성, 지역성 등을 고려해 routing

이 단계에서는 cluster가 하나의 처리 단위로 취급된다.

 

그 이후, 요청이 특정 cluster로 전달되면,
그 cluster 내부에서는 다시 Inference Engine 단위로 요청을 분배하게 된다.

즉:

  • cluster 내부 manager 또는 scheduler가
  • 어떤 node의 어떤 inference engine이 특정 요청을 처리할지 결정
  • 해당 node 위의 inference engine으로 요청 전달

그 이후의 세부적인 처리(prefill / decode scheduling, GPU 사용 등)는
node 내부의 inference engine이 담당한다. 

 

Summary

전체 구조를 한 문장으로 요약하면 다음과 같다.

사용자 요청은 먼저 cluster 단위로 분배되고,
cluster 내부에서는 node 단위로 다시 분배되며,
각 node 위의 inference engine이 요청을 prefill/decoding 단위로 scheduling하고 GPU에서 추론을 수행한다.

 

참고로, inference engine의 예시로는 vLLM, SGLang등이 있다. 잘 짜여져 있으니, server를 운용하는 입장에서는 그냥 갖다써도 된다.