모델 통합(Models)
모델 통합(Models)
Outlines는 같은 구조화 생성 코드를 여러 추론 엔진과 provider에서 그대로 동작하게 설계됐어요. "Works with any model"이라는 철학처럼, 모델 공급자를 바꿔도 코드를 거의 고치지 않아도 돼요. 이 문서는 어떤 모델 백엔드를 지원하는지, 그리고 초기화 방법이 어떻게 달라지는지를 정리해요.
모델의 종류
Outlines의 모델 통합은 크게 세 갈래로 나눌 수 있어요.
- 서버 지원(Server): vLLM, Ollama 같은 서버를 통해 구조화 생성을 하는 방식이에요.
- 로컬 모델(Local): transformers(허깅페이스)와 llama.cpp 같은 로컬 추론을 쓰는 방식이에요.
- API 지원: OpenAI, Gemini, Dottxt 같은 API를 호출하는 방식이에요.
각각 초기화 함수가 조금씩 달라요.
transformers로 모델 초기화
로컬 허깅페이스 모델은 outlines.models.transformers로 불러와요. 모델과 토크나이저를 함께 넘겨야 해요.
import outlines
from transformers import AutoTokenizer, AutoModelForCausalLM
MODEL_NAME = "microsoft/Phi-3-mini-4k-instruct"
model = outlines.models.transformers(
AutoModelForCausalLM.from_pretrained(MODEL_NAME, device_map="auto"),
AutoTokenizer.from_pretrained(MODEL_NAME),
)
출처: https://dottxt-ai.github.io/outlines/latest/features/models/
device_map="auto" 같은 transformers의 옵션을 그대로 쓸 수 있어서, GPU 분산·혼합 정밀도 설정을 Outlines 밖에서 관리할 수 있어요. 이 인터페이스는 SFG(Schemas for the Final Generation) 최종 생성 단계에서 사용하는 감독 스키마를 포함하도록 정의된 outlines.models.Model 프로토콜을 따르므로, 호출부가 백엔드와 분리돼요.
서버·API provider 바꾸기
vLLM·Ollama 같은 서버를 쓰거나 OpenAI·Gemini 같은 API를 쓸 땐 해당 백엔드에 맞는 초기화 함수(예: from_vllm, from_ollama, from_openai, from_gemini)를 써요. 초기화만 바꾸면 구조화 생성 코드는 그대로 재사용할 수 있어요. 어떤 구조화 출력 타입이 지원되는지는 모델마다 다를 수 있으니, 쓰는 모델/백엔드 문서에서 가용 출력 타입을 확인하는 걸 권장해요.
래퍼와 분리된 인터페이스
outlines.models는 학습·추론 래퍼(TrainingModelProtocol, ModelProtocol 등)와 상호작용 방식(generate.interactive)을 구분해 두고 있어요. 이 추상화 덕분에 "모델 바꾸기"가 코드 전면 수정이 아니라 초기화 한 줄 교체로 끝나요. output type이 애매하게 매칭될 때 허용 오차(false positive)를 줄이기 위한 디자인도 이곳에 반영돼 있어요.
더 알아보기
- 퀵스타트: Quickstart
- 출력 타입: Output Types
- 서버 통합: Server Integrations