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 대화형 모델 등의 프로젝트에서 사용 중.
도움 받기
- Discord: https://discord.gg/Jq5vxuH69W
- GitHub Issues: 버그나 기능 요청은 티켓을 열어주세요.
- Documentation: https://mosecorg.github.io/mosec/
인용 연구에 Mosec을 사용하는 경우, 제공된 소프트웨어 참조를 인용하십시오.
관련
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트