Jina-Serve: AI 서비스 구축 및 배포 프레임워크
요약
Jina-Serve는 AI 서비스를 구축하고 배포하는 통합 프레임워크입니다. gRPC, HTTP, WebSockets을 지원하며, 로컬 개발부터 Kubernetes를 통한 프로덕션 환경까지 확장성을 제공합니다. 특히 스트리밍 LLM 서빙과 내장 컨테이너화 기능을 통해 엔터프라이즈급 서비스 구현에 용이합니다.
핵심 포인트
- gRPC, HTTP, WebSockets 기반의 AI 서비스 구축 프레임워크
- 스트리밍 출력 및 동적 배치 처리를 지원하는 고성능 설계
- 내장 Docker 통합과 원클릭 클라우드 배포 기능 제공
- 마이크로서비스 스케일링에 최적화된 오케스트레이션 구조
Jina-Serve
<a href="https://pypi.org/project/jina/"><img alt="PyPI" src="https://img.shields.io/pypi/v/jina?label=Release&style=flat-square"></a>
<a href="https://discord.jina.ai"><img src="https://img.shields.io/discord/1106542220112302130?logo=discord&logoColor=white&style=flat-square"></a>
<a href="https://pypistats.org/packages/jina"><img alt="PyPI - 공식 pypistats 다운로드" src="https://img.shields.io/pypi/dm/jina?style=flat-square"></a>
<a href="https://github.com/jina-ai/jina/actions/workflows/cd.yml"><img alt="Github CD 상태" src="https://github.com/jina-ai/jina/actions/workflows/cd.yml/badge.svg"></a>
Jina-serve는 gRPC, HTTP 및 WebSockets을 통해 통신하는 AI 서비스를 구축하고 배포하기 위한 프레임워크입니다. 핵심 로직에 집중하면서 로컬 개발부터 프로덕션까지 서비스를 확장할 수 있습니다.
주요 기능 (Key Features)
- 모든 주요 ML 프레임워크 및 데이터 유형에 대한 네이티브 지원
- 스케일링, 스트리밍(streaming), 동적 배치 처리(dynamic batching)를 갖춘 고성능 서비스 설계
- 스트리밍 출력을 지원하는 LLM 서빙
- 내장 Docker 통합 및 Executor Hub
- Jina AI Cloud로 원클릭 배포
- Kubernetes 및 Docker Compose 지원을 통한 엔터프라이즈급 준비 완료
FastAPI 대비 주요 장점:
- 네이티브 gRPC 지원과 함께 DocArray 기반 데이터 처리
- 내장 컨테이너화 및 서비스 오케스트레이션(service orchestration)
- 마이크로서비스의 원활한 스케일링(seamless scaling of microservices)
- 단일 명령으로 클라우드 배포(One-command cloud deployment)
설치 (Install)
pip install jina
Apple Silicon 및 Windows에 대한 가이드를 참고하세요.
핵심 개념 (Core Concepts)
세 가지 주요 계층:
- 데이터 (Data): 입력/출력을 위한 BaseDoc 및 DocList
- 서빙 (Serving): Executor가 Document를 처리하고, Gateway가 서비스를 연결합니다.
- 오케스트레이션 (Orchestration): Deployment가 Executor를 서비스하며, Flow는 파이프라인을 생성합니다.
AI 서비스 구축 (Build AI Services)
StableLM을 사용하여 gRPC 기반의 AI 서비스를 만들어 보겠습니다:
Python 또는 YAML로 배포하기:
from jina import Deployment
from executor import StableLM
...
jtype: Deployment
with:
uses: StableLM
...
클라이언트 사용하기:
from jina import Client
from docarray import DocList
from executor import Prompt, Generation
...
파이프라인 구축 (Build Pipelines)
플로우로 서비스 연결하기 (Chain services into a Flow):
from jina import Flow
flow = Flow(port=12345).add(uses=StableLM).add(uses=TextToImage)
...
확장 및 배포 (Scaling and Deployment)
로컬 확장 (Local Scaling)
내장 기능을 사용하여 처리량 높이기 (Boost throughput with built-in features):
- 병렬 처리를 위한 복제본(Replicas)
- 데이터 분할을 위한 샤드(Shards)
- 효율적인 모델 추론을 위한 동적 배치 처리(Dynamic batching)
Stable Diffusion 배포 예시:
jtype: Deployment
with:
uses: TextToImage
...
클라우드 배포 (Cloud Deployment)
서비스 컨테이너화 (Containerize Services)
- Executor 구조화하기:
TextToImage/
├── executor.py
├── config.yml
...
- 설정하기:
# config.yml
jtype: TextToImage
py_modules:
...
- 허브에 푸시하기 (Push to Hub):
jina hub push TextToImage
Kubernetes에 배포하기
jina export kubernetes flow.yml ./my-k8s
kubectl apply -R -f my-k8s
Docker Compose 사용하기
jina export docker-compose flow.yml docker-compose.yml
docker-compose up
JCloud 배포 (JCloud Deployment)
단일 명령어로 배포하기:
jina cloud deploy jcloud-flow.yml
LLM 스트리밍 (LLM Streaming)
응답성이 뛰어난 LLM 애플리케이션을 위해 토큰 단위 스트리밍 활성화하기:
- 스키마 정의하기:
from docarray import BaseDoc
class PromptDocument(BaseDoc):
...
- 서비스 초기화하기:
from transformers import GPT2Tokenizer, GPT2LMHeadModel
class TokenStreamingExecutor(Executor):
...
- 스트리밍 구현하기:
@requests(on='/stream')
async def task(self, doc: PromptDocument, **kwargs) -> ModelOutputDocument:
input = tokenizer(doc.prompt, return_tensors='pt')
...
- 서비스 및 사용:
# 서버
with Deployment(uses=TokenStreamingExecutor, port=12345, protocol='grpc') as dep:
dep.block()
...
지원
Jina-serve는 Jina AI에서 후원하며 Apache-2.0 라이선스 하에 배포됩니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub AI Research의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기