본문 바로가기

Ray Serve와 FastAPI 결합하여 웹서버 표준기능과 ML서빙 특화기능 동시활용

현대 기업에서 인공지능(AI)은 중요한 역할을 담당하고 있습니다. AI 모델을 실제 비즈니스 환경에 효과적으로 적용하는 것, 즉 MLOps(기계 학습 운영)와 프로덕션 환경에서의 모델 배포는 복잡한 과제로 남아 있습니다. AI의 중요성을 강조하면서, 동시에 MLOps와 프로덕션 배포의 어려움을 탐구합니다.

Ray와 Ray Serve 소개

  • Ray의 역할: 데이터 전처리, 학습, 조정 등을 단일 스크립트를 통해 효율적으로 수행할 수 있는 도구입니다.
  • Ray Serve의 기능: 실시간 데이터 파이프라인을 개발하고 배포하는 과정을 간소화하고, 기술 스택을 단순화합니다. 이는 팀 간의 협업을 원활하게 하여 생산성을 높입니다.

Python 웹 서버 (FastAPI)와 특화된 ML 서빙

  • Python: 데이터 과학에서 중요하게 사용되고 있습니다.
  • FastAPI의 특징: Python 웹 프레임워크 중 하나로 가장 빠르게 성장하며, 높은 성능, 빠른 코딩, 적은 버그, 직관적 사용, 쉬움, 간결, 견고, 표준 기반과 같은 특징을 제공합니다.
  • 특화된 ML 서빙 프레임워크: 대규모 및 실시간 ML 모델을 위해 설계된 프레임워크입니다. 모델 최적화, 마이크로배칭, 리소스 관리 등을 포함한 다양한 기능을 제공합니다.

FastAPI: 현대적인 Python 웹 서버 프레임워크

  • FastAPI는 Python 웹 프레임워크 중 빠르게 성장하고 있으며, 기존 Python 웹 프레임워크에 대한 불만을 해소하기 위해 개발되었습니다.
  • 주요 특징
    • 높은 성능: NodeJS 및 Go와 유사한 수준의 성능을 제공합니다.
    • 빠른 코딩: 개발 속도를 약 200%에서 300%까지 증가시킵니다.
    • 적은 버그: 개발자 오류를 약 40% 줄입니다.
    • 직관적 사용: 편리한 편집기 지원, 자동 완성 및 디버깅 시간 단축.
    • 사용의 용이성: 배우기 쉬운 설계, 간결한 문서화.
    • 간결함: 코드 중복 최소화, 다양한 기능을 지원하는 매개변수 선언.
    • 견고함: 프로덕션 환경에 적합한 코드와 자동 대화형 문서화.
    • 표준 기반: OpenAPI(이전 Swagger) 및 JSON Schema 완벽 호환.

특화된 ML 서빙 프레임워크

  • 대규모 및 실시간 ML 모델 서빙을 위해 Seldon Core, KServe, TorchServe, TensorFlow Serving 등 다양한 프레임워크가 등장했습니다.
  • 기능
    • 모델 최적화: 가지치기(pruning) 및 양자화(quantization) 기술을 사용해 모델 크기 감소.
    • 마이크로배칭: 추론 시간 및 메모리 풋프린트 감소.
    • 빈 패킹: 여러 모델이 동시에 호출되지 않을 때 리소스 공유.
    • 스케일 다운: 트래픽 부재 시 리소스 해제.
    • 자동 크기 조정: CPU/GPU 사용률에 따른 자동 조정.

Ray Serve와 FastAPI의 결합

  • 결합의 장점: Ray Serve와 FastAPI를 결합함으로써, 웹 서버의 표준 기능과 ML 서빙의 특화된 기능을 동시에 활용할 수 있습니다. Ray Serve는 성능 우수한 Python 웹 서버와 특화된 ML 서빙 라이브러리의 기능을 모두 제공하고 aiohttp나 FastAPI와 같은 웹 서버를 손쉽게 통합 가능합니다.
  • 사용 예시: FastAPI의 기능과 Ray Serve의 ML 서빙 기능을 효과적으로 결합하는 방법을 통해 각 모델 추론 단계를 독립적으로 확장 가능하며, 미세한 자원 할당과 자동 스케일링이 가능한 두 기술의 장점을 최대한 활용해 볼 수 있습니다.
    import requests
    from fastapi import FastAPI
    from ray import serve
    
    # 1: Define a FastAPI app and wrap it in a deployment with a route handler.
    app = FastAPI()
    
    @serve.deployment(route_prefix="/")
    @serve.ingress(app)
    class FastAPIDeployment:
        # FastAPI will automatically parse the HTTP request for us.
        @app.get("/hello")
        def say_hello(self, name: str):
            return f"Hello {name}!"
    
    # 2: Deploy the deployment.
    serve.start()
    FastAPIDeployment.deploy()
    
    # 3: Query the deployment and print the result.
    print(requests.get("http://localhost:8000/hello", params={"name": "Theodore"}).json())
    # "Hello Theodore!"
  • 추가 기능
    • 배포 그래프 API: Python에서 다중 모델 추론 파이프라인 구성.
    • 독립적인 스케일 조정: CPU, GPU 등 다양한 하드웨어에서 개별적으로 스케일 조정 가능.
    • 마이크로배칭 요청: @serve.batch 데코레이터를 통한 구현.

미래 전망 및 마무리

  • Ray Serve와 FastAPI의 조합은 웹 서버 프레임워크의 표준을 유지하면서 실시간 ML 모델 서빙을 위한 강력한 솔루션을 제공합니다. 이를 통해 웹 서버의 기능과 ML 모델의 효율적인 서빙을 결합할 수 있습니다.
  • Ray Serve는 Zero copy load, 모델 캐싱 등의 기능을 추가하여 모델 서빙의 효율성을 더욱 개선할 계획입니다.
  • 이 조합을 통해 개발자들은 웹 서버와 ML 서빙의 최고 기능을 동시에 활용할 수 있는 강력한 도구를 가지게 됩니다.
  • 핵심 메시지: Ray Serve + FastAPI의 결합은 두 기술의 이점을 결합하여 검증된 웹 서버 프레임워크의 기능과 실시간 ML 모델 서빙의 최적화를 동시에 제공합니다.

기술적 복잡성을 최소화하고 각 기술의 핵심 기능과 장점에 초점을 맞춰 요약되었습니다.

728x90

댓글