핵심 요약
배치 추론은 단순히 모델을 실행하는 것을 넘어 데이터 전처리(CPU)와 모델 추론(GPU) 간의 균형을 맞추는 것이 핵심이다. Ray Data와 vLLM의 통합을 통해 복잡한 분산 환경에서도 높은 처리량과 비용 효율성을 달성할 수 있다.
배경
대규모 언어 모델(LLM)을 실제 서비스에 적용할 때 발생하는 배치 추론의 비효율성을 해결하기 위한 기술적 대안을 논의하는 밋업 발표이다.
대상 독자
ML 엔지니어, 인프라 아키텍트, LLM 서비스 운영자
의미 / 영향
Ray와 vLLM의 결합은 데이터 전처리와 모델 추론이 혼재된 복잡한 파이프라인을 단일 프레임워크 내에서 관리할 수 있게 한다. 이는 인프라 관리 부담을 줄이고 GPU 자원 활용도를 극대화하여 대규모 LLM 운영 비용을 획기적으로 낮추는 표준 아키텍처로 자리 잡을 전망이다.
챕터별 상세
00:00
배치 추론의 개념과 도전 과제
팝콘 튀기기 비유를 통해 온라인 추론과 배치 추론의 차이를 정의했다. 온라인 추론은 사용자의 요청에 즉각 반응하는 지연 시간(Latency) 중심인 반면, 배치 추론은 대량의 데이터를 한꺼번에 처리하는 처리량(Throughput) 중심이다. GPU가 연산을 기다리며 유휴 상태로 머무는 비용 문제를 해결하는 것이 배치 추론의 핵심 과제이다.
- •온라인 추론은 낱개 커널을 튀기는 것, 배치 추론은 전자레인지 가득 팝콘을 튀기는 것에 비유된다
- •CPU가 데이터를 준비하는 동안 GPU가 노는 유휴 시간(Idle time)은 막대한 비용 낭비를 초래한다
배치 추론은 실시간 응답성보다 단위 시간당 처리할 수 있는 데이터의 총량인 처리량(Throughput)을 극대화하는 것이 목표인 작업 방식이다.
03:40
현대적 배치 추론의 변화와 복잡성
최근 배치 추론은 파이썬 기반 처리, 비정형 데이터의 폭증, CPU와 GPU의 혼합 사용이라는 세 가지 변화를 겪고 있다. 데이터의 90% 이상이 비정형이며 멀티모달 처리가 요구됨에 따라 단순한 추론을 넘어선 복잡한 파이프라인 관리가 필요하다. 특히 스파크(Spark)와 같은 기존 도구는 파이썬 네이티브 환경 최적화에 한계가 있다.
- •비정형 데이터(비디오, PDF 등) 처리를 위한 멀티모달 워크로드 증가
- •CPU 중심의 전처리와 GPU 중심의 추론 간 조율이 시스템 성능의 병목 구간이다
05:45
Ray 프레임워크의 구조와 생태계
Ray는 파이썬 네이티브 분산 컴퓨팅 엔진으로, 어떤 하드웨어(AWS, GCP, Azure 등)에서도 실행 가능하다. Ray Core를 기반으로 데이터 처리(Ray Data), 학습(Ray Train), 서빙(Ray Serve) 등 ML 파이프라인 전반을 지원하는 라이브러리 생태계를 갖췄다. vLLM 및 허깅페이스(Hugging Face)와의 네이티브 통합을 통해 개발자가 분산 시스템 전문가가 아니어도 대규모 연산을 수행할 수 있게 돕는다.
- •Ray Core는 파이썬 함수를 여러 머신에 분산시키는 추상화 계층을 제공한다
- •Ray Data는 대규모 데이터셋을 병렬로 읽고 변환하는 데 최적화되어 있다
07:50
Ray와 vLLM을 활용한 아키텍처 설계
배치 추론 아키텍처는 데이터 읽기, 전처리, 모델 추론, 후처리, 저장의 단계를 거친다. vLLM은 모델 내부의 연산(In-the-box)을 최적화하고, Ray는 전체 파이프라인(Across-the-box)의 오케스트레이션을 담당한다. Ray Data는 vLLM을 래퍼(Wrapper) 형태로 감싸서 CPU와 GPU 자원을 효율적으로 배분하고 조정한다.
- •vLLM은 모델 내부 배칭을 최적화하고 Ray는 머신 간 데이터 병렬화를 관리한다
- •Ray Data LLM API를 사용하면 복잡한 인프라 설정 없이 vLLM을 효율적으로 실행할 수 있다
vLLM은 PagedAttention 기술을 통해 LLM 추론 시 KV 캐시 메모리 낭비를 줄여 성능을 높이는 고성능 추론 엔진이다.
09:38
실전 데모: Llama 3.1 배치 추론 파이프라인
Llama 3.1 8B 모델을 사용하여 S3에 저장된 200만 건의 CSV 데이터를 처리하는 과정을 시연했다. Ray Data를 통해 데이터를 병렬로 읽고, vLLM 엔진 설정을 통해 배치 크기와 병렬성을 제어했다. `materialize()`와 `take()` 함수를 호출하기 전까지는 연산이 실행되지 않는 지연 실행(Lazy Execution) 방식을 채택하여 전체 워크플로를 최적화했다.
- •Ray Data의 read_csv를 사용하여 S3 데이터를 분산 로드했다
- •vLLMConfig를 통해 GPU 자원 할당량과 배치 사이즈를 간단히 정의했다
15:30
Anyscale 플랫폼을 통한 운영 최적화
Anyscale은 오픈소스 Ray를 운영 환경에서 더 쉽게 사용할 수 있도록 돕는 플랫폼이다. 멀티 리소스 클라우드 기능을 통해 여러 리전과 클라우드 공급자(GCP, AWS 등)를 통합하여 GPU 가용성 문제를 해결한다. 또한 글로벌 리소스 스케줄러를 도입하여 추론과 학습 워크로드 간의 우선순위를 동적으로 조정하고 자원 활용도를 극대화한다.
- •동적 메모리 관리와 체크포인팅을 통해 학습 및 추론의 신뢰성을 향상했다
- •글로벌 리소스 스케줄러는 유휴 GPU 자원을 낮은 우선순위 작업에 즉시 할당한다
실무 Takeaway
- GPU 유휴 시간을 줄이기 위해 CPU 기반 데이터 전처리와 GPU 기반 추론 간의 파이프라인 병렬화가 필수적이다
- Ray Data LLM API는 vLLM을 내장하여 복잡한 분산 설정 없이도 고성능 배치 추론을 구현하게 돕는다
- Anyscale의 글로벌 리소스 스케줄러를 활용하면 여러 클라우드 리전을 통합하여 GPU 가용성 문제를 해결할 수 있다
언급된 리소스
AI 분석 전체 내용 보기
AI 요약 · 북마크 · 개인 피드 설정 — 무료