Skip to content

← 글 목록

성능 · 인프라

Laya와 ONNX로 AI 추론 확장하기

프로덕션 환경의 AI 서비스에서 병목 현상이 발생하는 곳은 로직이 아니라 '추론' 단계인 경우가 많습니다. 밀리초 단위의 지연 시간과 높은 처리량을 동시에 확보하기 위한 Laya의 ONNX 스택을 소개합니다.

약 4분 읽기

AI 모델을 노트북 환경에서 테스트하는 것과 실제 수천 명의 사용자가 접속하는 프로덕션 환경에 배포하는 것은 완전히 다른 문제입니다. 특히 실시간 응답이 중요한 서비스에서 지연 시간(Latency)과 처리량(Throughput)의 균형을 맞추는 것은 매우 까다로운 과제입니다. Laya는 이 문제를 해결하기 위해 ONNX (Open Neural Network Exchange)를 추론 엔진의 핵심으로 채택했습니다.

왜 ONNX인가요?

ONNX는 단순한 모델 포맷을 넘어, 추론 효율성을 극대화하는 표준입니다. Laya가 ONNX를 통해 얻은 세 가지 결정적인 이점은 다음과 같습니다.

  1. 하드웨어 경계를 허무는 독립성: NVIDIA GPU부터 Intel CPU, ARM 기반 하드웨어까지 어떤 환경에서도 ONNX Runtime은 해당 실리콘에 최적화된 실행 그래프를 생성하여 최상의 성능을 끌어냅니다.
  2. 런타임 오버헤드의 획기적 감소: 추론 단계에서 PyTorch나 TensorFlow 같은 무거운 학습 프레임워크 의존성을 완전히 제거했습니다. 결과적으로 에이전트의 메모리 점유율이 낮아지고 서비스 시작 시간이 대폭 단축되었습니다.
  3. 엄격한 수치적 일관성 (Parity): Laya는 tests/differential_parity_tests.rs와 같은 정밀 테스트를 통해, ONNX로 변환된 모델이 원래의 Python 구현체와 소수점 단위까지 동일한 결과를 생성하는지 검증하여 신뢰성을 확보했습니다.

Laya의 고성능 추론 파이프라인

Laya의 추론 흐름은 단순히 모델을 실행하는 것이 아니라, 데이터의 흐름을 최적화하는 데 집중합니다.

쿼리→ 토크나이저→ 배처 (Batcher)→ ONNX Runtime→ 디코더→ 결과

처리량의 핵심: 배치 처리 (Batching)

요청을 하나씩 처리하는 방식은 하드웨어 자원을 낭비하게 합니다. Laya의 BatchPredictor는 유사한 쿼리를 지능적으로 그룹화하여 배치로 처리함으로써, GPU/CPU 활용도를 극대화하고 요청당 추론 비용을 획기적으로 낮춥니다.

롱 컨텍스트를 위한 윈도잉 전략

입력 텍스트가 길어지면 지연 시간이 기하급수적으로 증가하며, 때로는 메모리 부족(OOM) 문제를 일으킵니다. Laya는 sequence_builder.rs와 WindowPlan.java를 통해 거대한 입력을 ONNX 런타임이 효율적으로 처리할 수 있는 관리 가능한 청크(Chunk)로 나누는 '윈도잉' 전략을 구현했습니다.

검증된 성능 결과

내부 벤치마크(research/results/latency_cpu_m7a_xlarge.json) 결과, Rust 기반의 코어 로직과 ONNX 런타임의 조합을 통해 Laya는 예측 가능한 p99 지연 시간을 유지하며 수천 개의 동시 요청을 안정적으로 처리할 수 있음을 확인했습니다.

마치며: 상업적 생존을 위한 기술 선택

모델의 표현 방식과 실행 엔진을 분리함으로써, Laya는 개발자가 단순히 '정확한' 모델을 만드는 것을 넘어, 인프라 비용과 속도 측면에서 '상업적으로 생존 가능한' 모델을 배포할 수 있게 합니다.

AI 모델을 단순한 실험실 환경에서 벗어나 실제 고성능 프로덕션 환경으로 옮기고자 한다면, Laya의 ONNX 스택이 가장 강력한 해결책이 될 것입니다.

오픈소스를 한국어로 읽고 배웁니다.