TL;DR
TorchServe는 더 이상 업데이트, 버그 수정, 새 기능, 보안 패치를 받지 않으므로 운영팀이 CUDA와 PyTorch를 포함한 전체 의존성 호환성을 직접 관리해야 합니다. AWS의 Ray Serve DLC는 Amazon Linux 2023, CUDA 런타임, PyTorch, Ray Serve, FastAPI, Uvicorn과 멀티모달 처리 도구를 검증된 하나의 컨테이너 이미지로 묶고 빌드 시점에 보안 패치를 반영합니다. 글에서는 이 GPU 이미지를 Amazon EKS의 단일 g5.xlarge 노드에 배포하고, ConfigMap으로 주입한 Python 코드가 24GB VRAM의 NVIDIA A10G에서 Qwen3-VL-2B를 HTTP 포트 8000으로 제공합니다. Ray Serve는 모델 클래스를 @serve.deployment로 등록하고 num_gpus=1 설정에 따라 GPU worker에 배치하며, 더 큰 규모에서는 KubeRay를 이용해 여러 노드로 확장할 수 있습니다.
섹션별 상세
from ray import serve
from transformers import AutoModelForImageTextToText, AutoProcessor
import torch
@serve.deployment(ray_actor_options={"num_gpus": 1})
class QwenVLService:
def __init__(self):
model_name = "Qwen/Qwen3-VL-2B-Instruct"
self.processor = AutoProcessor.from_pretrained(model_name)
self.model = AutoModelForImageTextToText.from_pretrained(
model_name, torch_dtype=torch.float16
).to("cuda")
async def __call__(self, request):
try:
body = await request.json()
image_url = body.get("image_url")
prompt = body.get("prompt")
messages = [{"role": "user", "content": [
{"type": "image", "image": image_url},
{"type": "text", "text": prompt},
]}]
inputs = self.processor.apply_chat_template(
messages,
tokenize=True,
add_generation_prompt=True,
return_dict=True,
return_tensors="pt"
).to("cuda")
generated_ids = self.model.generate(**inputs, max_new_tokens=200)
trimmed = [o[len(i):] for i, o in zip(inputs.input_ids, generated_ids)]
output = self.processor.batch_decode(trimmed, skip_special_tokens=True)[0]
return {"response": output}
Except Exception:
logger.exception("Qwen inference request failed")
return {"error": "Unable to generate a response. Please try again later."}
app = QwenVLService.bind()Qwen3-VL-2B를 CUDA GPU에 올리고 이미지 URL과 text prompt를 받아 HTTP 응답을 생성하는 Ray Serve deployment 코드입니다.

용어 해설
- Deep Learning Containers
- — 프레임워크, 라이브러리, CUDA 런타임, 운영체제 구성요소를 함께 묶은 사전 제작 Docker 이미지입니다. 각 구성요소의 호환성을 테스트하고 보안 패치를 반영해, 사용자가 GPU 추론 환경을 직접 조립하는 부담을 줄입니다.
- Ray Serve
- — Python 코드로 모델 추론 API를 구성하고 HTTP 엔드포인트로 제공하는 serving 프레임워크입니다. @serve.deployment로 모델 클래스를 배포 단위로 만들고, Ray가 GPU 같은 자원에 작업을 배치합니다.
- ConfigMap
- — Kubernetes에서 애플리케이션 코드나 설정을 컨테이너 이미지와 분리해 저장하는 리소스입니다. 이 글에서는 qwen_serve.py를 ConfigMap으로 주입해 이미지를 다시 빌드하지 않고 serving 코드를 바꿉니다.
- KubeRay
- — Kubernetes 환경에서 Ray 클러스터와 작업을 운영하기 위한 구성요소입니다. 단일 노드 배포를 여러 GPU 노드와 복수 replica 구조로 확장할 때 Ray worker의 배치와 실행을 조정합니다.
기술
- Ray Serve DLC
- TorchServe
- Ray Serve
- PyTorch
- FastAPI
- Uvicorn
- FFmpeg
- Transformers
- Amazon EKS
- Amazon EC2
- Amazon SageMaker
- KubeRay
- AWS CLI
- eksctl
- kubectl
- Qwen3-VL-2B
- NVIDIA A10G
- CUDA
활용 사례
- Amazon EKS에서 vision-language model 추론 API 운영
- 단일 GPU 노드 기반 HTTP 모델 serving
- TorchServe에서 Ray Serve DLC로 마이그레이션
- KubeRay를 활용한 다중 노드 분산 serving
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.