vLLM Semantic Router 멀티모달 라우팅 및 비전 인코더 강화
vLLM Semantic Router 멀티모달 라우팅 및 비전 인코더 강화
vLLM은 Semantic Router (VSR)를 확장하여 멀티모달 라우팅을 지원하며, 이미지, 스크린샷, 문서의 시각적 증거가 텍스트와 동일한 결정 구조 내에서 유형화된 신호로 작용할 수 있도록 했습니다. 이러한 전환은 VSR을 프롬프트 수준의 라우팅에서 요청 수준의 정책으로 이동시켜, 멀티모달 요청의 실제 콘텐츠를 기반으로 더욱 정밀한 라우팅을 가능하게 합니다.
요청 수준 정책으로서의 멀티모달 라우팅
VSR의 멀티모달 라우팅은 단순한 이미지 분류가 아닙니다. 이는 시각적 신호를 Signal-Decision 아키텍처에 통합하는 것입니다. 이 모델에서 신호는 우선순위와 불리언 논리를 사용하여 라우팅 경로를 결정하기 위해 구성되는 독립적인 관찰값입니다.
텍스트 프롬프트뿐만 아니라 전체 요청을 분석함으로써, VSR은 텍스트는 일반적이지만 이미지가 결정적인 증거를 포함하고 있는 시나리오를 처리할 수 있습니다. 예시는 다음과 같습니다:
- PII 리스크: "이것을 요약해줘"라는 요청이 여권 이미지와 결합된 경우, 제한된 처리가 필요한 식별 문서로 라우팅됩니다.
- 도메인 전문화: "이것이 무엇을 보여주나요?"와 같은 모호한 질문이 흉부 X-ray와 결합되면 의료 도메인 정책이 트리거되어 역량 있는 Vision-Language Model (VLM)로 라우팅됩니다.
- 보안 검토: 코드 스크린샷과 결합된 "버그를 찾아줘" 프롬프트는 코드 아티팩트로 식별되어 보안 검토 경로와 비밀 유출 체크를 트리거합니다.
- 도메인 외 거부: 의료 프롬프트가 관련 없는 자동차 이미지와 결합된 경우, 도메인 외 시각적 증거로 플래그가 지정되어 명확화 또는 거부 경로로 이어집니다.
비전 신호 반전 문제 해결
multi-modal-embed-small (mmes) 인코더를 사용한 멀티모달 라우팅을 구현하는 동안, vLLM은 배포된 경로가 "확신을 가지고 틀린(confidently wrong)" 상태인 심각한 오류를 발견했습니다. 3개의 수직 계층과 21개의 후보 레이블에 걸친 11개 이미지 프로브 결과, 신호가 단순히 노이즈가 있는 것이 아니라 반대로 상관관계가 나타나는 82%의 반전율을 보였습니다 (예: 의료 X-ray가 의료 관련 후보보다 반도체 후보에 더 가깝게 랭크됨).
오진: 인코더 성능 문제
초기 가설은 컴팩트한 multi-modal-embed-small 인코더가 해당 작업에 불충분하다는 것이었습니다. 그러나 테스트 결과 SigLIP2-base, SigLIP-base (Hugging Face를 통해), 그리고 더 큰 multi-modal-embed-large (mmEL)를 포함한 다른 모델들이 동일한 프로브에서 10/10점을 기록했습니다. 결정적으로, PyTorch 참조 경로를 통해 로드된 mmes 모델도 10/10점을 기록하여 인코더 자체가 문제가 아님을 증명했습니다.
근본 원인: 구현 드리프트
조사 결과 PyTorch 참조 경로와 Rust/Candle 바인딩 경로 사이에 상당한 격차가 있음이 밝혀졌습니다. 여권 고정 테스트에서 PyTorch는 0.7204의 코사인 유사도를 보인 반면, Candle-binding 경로에서는 0.1576을 기록했습니다.
Candle 경로에서 발견된 세 가지 구체적인 구현 오류가 수정되었습니다:
- Pooling Head 불일치:
SigLIPVisionEncoder::forward구현이 요구되는 attentional probe pooling head 대신 BERT 스타일의 mean + Linear + tanh pooling을 사용하고 있었습니다. 이는 PR #1927에서 해결되었습니다. - 정규화 오류: Go 이미지 로더는
[0, 1]범위의 픽셀을 제공했지만, SigLIP은 채널별 정규화(x - 0.5) / 0.5를 요구합니다. 이는 PR #1928에서 수정되었습니다. - 전처리 드리프트: Go 측의 resize 경로는 4-tap bilinear 구현을 사용하여 PyTorch 참조의 PIL 스타일 전처리와 달랐습니다. PR #1943을 통해 이미지 디코딩, 리사이징 및 변환을 Rust로 이동시켰으며, PIL의 bicubic + antialias 동작을 근사화하기 위해 Catmull-Rom 필터링을 사용하는
image크레이트를 사용했습니다.
검증 및 성능
이러한 수정 후, 프로덕션 경로는 PyTorch 참조를 기준으로 검증되었습니다. 여권 고정 데이터에 대한 3-벡터 격리 실험 결과, 전체 브랜치 스택 파이프라인이 참조 대비 0.999902의 코사인 유사도를 달성했습니다.
20개 이미지 코퍼스 전체에서 시스템은 최소 코사인 유사도 0.999557, 평균 0.999919를 달성했으며, 20개 이미지 모두 PyTorch 참조에 대해 $\ge 0.999$ 점수를 기록했습니다.
성능 측면에서 VSR의 분류기 신호는 runSignalDispatchers를 통해 병렬로 실행되므로, 실제 지연 시간(wall-clock latency)은 활성화된 가장 느린 분류기에 의해 제한됩니다. 대표적인 트레이스에서 전체 분류 결정은 CPU에서 약 1.3초 만에 완료됩니다.
VSR의 향후 로드맵
신뢰할 수 있는 비전 신호 경로를 확보함에 따라, vLLM은 VSR을 포괄적인 요청 수준 제어 평면으로 진화시키고자 합니다. 향후 아키텍처 목표는 다음과 같습니다:
- 이미지 유래 신호를 텍스트 신호와 동일한 결정 레이어에 직접 통합.
- 멀티모달 결정이 replay, metrics 및 디버깅 도구에서 가시적으로 보이도록 보장.
- 모델 선택 시 정책 적합성과 모달리티 역량을 모두 고려하도록 구현.
- PII 및 탈옥(jailbreak)과 같은 안전 필수 신호에 대한 고정밀 검사 유지.
- 도구 호출(tool calls) 및 메모리 쓰기를 포함한 에이전트 워크플로우로 라우팅 패브릭 확장.