mosecorg/mosec

A high-performance ML model serving framework, offers dynamic batching and CPU/GPU pipelines to fully exploit your compute machine

Mosec – 고성능 모델 서빙 프레임워크

소개 – Mosec (Model Serving made Efficient in the Cloud)은 Python 우선 라이브러리로, 학습된 ML 모델을 빠르고 프로덕션 준비가 완료된 HTTP 서비스로 변환할 수 있게 해줍니다. 네트워크 I/O, 요청 배치 처리, 프로세스 오케스트레이션과 같은 무거운 작업은 Rust로 작성되어 있어, 익숙한 Python 코드를 유지하면서도 낮은 지연 시간과 높은 처리량의 추론 성능을 제공합니다.

주요 기능

  • 동적 배치 처리 (Dynamic batching) – 들어오는 요청을 자동으로 배치로 그룹화(크기 및 대기 시간 설정 가능)하여 GPU를 효율적으로 활용합니다.
  • 파이프라인 스타일 워커 (Pipeline-style workers) – 여러 프로세스(CPU 전용, GPU 전용, I/O)를 연결하여 전처리, 추론, 후처리를 별도의 단계로 분리할 수 있습니다.
  • Rust 기반 서버 – 비동기 I/O와 효율적인 CPU 사용률을 제공하며, Prometheus 메트릭과 정상 종료 기능을 내장하고 있습니다.
  • 유연한 직렬화 – 기본적으로 JSON을 사용하며, 이미지나 임베딩과 같은 바이너리 데이터를 위해 Msgpack 등의 믹스인을 지원합니다.
  • 클라우드 준비 완료 – 컨테이너, Kubernetes 및 공식 Docker 이미지 mosecorg/mosec과 즉시 호환됩니다.
  • OpenAPI 생성 – 모든 Worker 구현에 대해 자동으로 Swagger 문서를 생성합니다.

일반적인 사용 사례

  • 대규모 생성 모델(예: Stable Diffusion)을 REST 엔드포인트로 배포.
  • 임베딩, 리랭킹 또는 기타 경량 추론 서비스 제공.
  • 전처리는 CPU에서, 모델 추론은 GPU에서 실행되는 다단계 파이프라인 구축.
  • 사용자 정의 모델을 위한 OpenAI 호환 API 제공.

설치

# From PyPI (Linux/macOS)
pip install -U mosec
# Or via Conda
conda install -c conda-forge mosec
# Or Pixi
pixi add mosec

소스에서 컴파일하려면 Rust가 설치되어 있어야 하며, make package를 실행하여 wheel을 생성할 수 있습니다.

빠른 예제 – Stable Diffusion 서빙

from mosec import Server, Worker, get_logger
from mosec.mixin import MsgpackMixin
from diffusers import StableDiffusionPipeline
import torch, io

class StableDiffusion(MsgpackMixin, Worker):
    def __init__(self):
        self.pipe = StableDiffusionPipeline.from_pretrained(
            "sd-legacy/stable-diffusion-v1-5", torch_dtype=torch.float16
        )
        self.pipe.enable_model_cpu_offload()
        self.example = ["warmup prompt"] * 4   # warm‑up batch

    def forward(self, prompts: list[str]) -> list[memoryview]:
        results = self.pipe(prompts)
        images = []
        for img in results[0]:
            buf = io.BytesIO()
            img.save(buf, format="JPEG")
            images.append(buf.getbuffer())
        return images

if __name__ == "__main__":
    srv = Server()
    srv.append_worker(StableDiffusion, num=1, max_batch_size=4, max_wait_time=10)
    srv.run()

스크립트를 실행한 후 prompt 필드가 포함된 JSON 페이로드를 http://127.0.0.1:8000으로 POST하세요. 서비스는 Msgpack(바이너리 친화적)을 통해 생성된 JPEG 이미지를 반환합니다. Swagger UI는 /openapi/swagger/에서 확인할 수 있습니다.

생태계 및 통합

  • HuggingFace diffusers, transformers, PyTorch, JAX 등과 호환.
  • 사용자 정의 직렬화, 공유 메모리 IPC, 요청 검증 및 메트릭 확장을 위한 믹스인 제공.
  • 공식 Docker 이미지 및 Kubernetes 배포 예제 제공.
  • Modelz (serverless ML), Tencent Cloud ML Platform, MOSS 대화형 모델 등의 프로젝트에서 사용 중.

도움 받기

인용 연구에 Mosec을 사용하는 경우, 제공된 소프트웨어 참조를 인용하십시오.

관련

  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트