> 추론 프레임워크 비교 시리즈의 마지막 편이다. > 각 프레임워크 입문편(Triton · BentoML · Ray Serve)을 먼저 읽으면 이 글의 비교가 훨씬 잘 붙는다. 세 프레임워크를 공부하며 얻은 가장 중요한 결론을 먼저 박아둔다. Triton vs BentoML vs Ray 는 사실 틀린 질문이다. 셋은 경쟁 제품이 아니라 서로 다른 층에 있고...
추론 프레임워크 비교 시리즈의 마지막 편이다. 각 프레임워크 입문편(Triton · BentoML · Ray Serve)을 먼저 읽으면 이 글의 비교가 훨씬 잘 붙는다.
세 프레임워크를 공부하며 얻은 가장 중요한 결론을 먼저 박아둔다. Triton vs BentoML vs Ray 는 사실 틀린 질문이다. 셋은 경쟁 제품이 아니라 서로 다른 층에 있고, 실전에서는 오히려 조합된다. 이 글은 그 층위를 표로 정리하고, 조합 패턴을 보고, 마지막으로 사내 OCR 서빙 맥락에서 어떻게 판단할지로 이어간다.
앞선 세 편에서 반복한 그림을 한 자리에 모으면 이렇다.
아래로 갈수록 "성능", 위로 갈수록 "개발·운영 편의와 규모"에 관심이 있다. 그래서 "어느 게 제일 좋냐"가 아니라 지금 내 병목이 어느 층에 있냐가 올바른 질문이다.
층은 다르지만, 실무자가 고를 때 보는 축은 겹친다. 그 축으로 나란히 놓으면 이렇다.
| 축 | Triton | BentoML | Ray Serve |
|---|---|---|---|
| 주 관심사 | GPU 실행 성능 | 개발·배포 편의 | 분산·오케스트레이션 |
| 개발 언어 경험 | config.pbtxt + 백엔드별 규약 | 순수 Python, 제약 적음 | 순수 Python, 분산 개념 필요 |
| 배칭 | dynamic (요청 단위) | adaptive (트래픽 적응) | @serve.batch (요청 단위) |
| GPU 최적화 | 최고 concurrent execution, TensorRT | 아래 엔진에 위임 | fractional GPU 단 메모리 격리는 미보장 |
| 확장 모델 | 단일 서버 인스턴스 | 컨테이너 복제 | 클러스터 분산 오토스케일, scale to zero |
| 전후처리 | Python backend / BLS로 별도 구현 | 평범한 Python 메서드 | 평범한 Python + composition |
| 배포 1차 경로 | 컨테이너 (직접) | BentoCloud 자체 K8s는 답보 | Ray cluster (직접 운영) |
| 러닝커브 | config·백엔드 학습 부담 | 낮음 | 클러스터 운영까지 높음 |
핵심만 다시 말하면 — Triton은 성능을 주고 편의를 뺏고, BentoML은 편의를 주고 성능·규모를 위임하고, Ray Serve는 규모를 주고 운영 부담을 지운다.
이 시리즈에서 제일 강조하고 싶은 부분이다. 세 개는 서로를 감싼다.
정리하면 위 두 층(BentoML·Ray Serve)이 개발·운영을 책임지고, 성능이 급하면 그 안쪽에 Triton을 넣는 구조다. "하나를 고른다"기보다 "어느 층까지 직접 짜고 어디부터 위임하냐"의 문제다.
이 공부를 시작한 실제 이유로 돌아온다. 현재 우리 OCR 추론 서빙은 프레임워크 없이 gRPC 기반 Python 모델 서버를 직접 구현해 컨테이너로 운영하는 형태다. 위 세 프레임워크는 아직 쓰지 않는다. 그 관점에서 각 층이 무엇을 더해줄지 정리하면 이렇다.
판단 프레임 — 다음 순서로 자문하면 층이 갈린다.
가장 중요한 건 4번이다. 프레임워크는 병목을 아는 다음에 고르는 것이지, 좋아 보여서 얹는 게 아니다.
이 시리즈는 공식 문서와 벤치마크를 교차검증해 정리한 개념·구조 비교다. 세 스택을 우리 OCR 모델로 직접 벤치마크한 실측은 아직 없다. 절대 성능 순위를 단정하지 않은 이유다.
후속 과제로 남긴다.
perf_analyzer로 비교한다.세 프레임워크를 공부하고 남은 한 문장은 이것이다. 추론 프레임워크 선택은 성능 경쟁에서 이긴 하나를 고르는 게 아니라, 내 병목이 어느 층에 있는지 진단하고 그 층의 도구를 고르는 일이다. Triton은 실행, BentoML은 패키징, Ray Serve는 오케스트레이션 — 층을 알면 "vs"가 아니라 "어디까지 직접 짜고 어디부터 위임하나"로 질문이 바뀐다.