허깅페이스 인퍼런스 엔드포인트로 임베딩 모델 배포하기
허깅페이스는 Text Embeddings Inference(TEI)를 자체 인퍼런스 엔드포인트 서비스에 통합하여, 개발자가 독점적 대안보다 높은 처리량과 znacz하게 낮은 비용으로 오픈소스 임베딩 모델을 배포할 수 있게 했습니다. 이 통합은 Retrieval Augmented Generation(RAG) 워크플로우를 최적화하도록 특별히 설계되었으며, 여기서 빠르고 효율적인 데이터의 벡터 표현은 고품질 생성에 필수적입니다.
Text Embeddings Inference (TEI) 기능
Text Embeddings Inference(TEI)는 오픈소스 텍스트 임베딩 모델을 제공하기 위해 목적에 맞게 구축된 솔루션입니다. 고성능 추출에 최적화되어 있으며, Massive Text Embedding Benchmark(MTEB) 리더보드의 상위 10개 모델, 즉 E5, GTE, Ember, FlagEmbedding을 지원합니다.
업계 최고 수준의 처리량과 비용 효율성을 달성하기 위해 TEI는 여러 가지 기술적 최적화를 구현합니다:
- 추론 최적화: 최적화된 트랜스포머 코드를 위해 Flash Attention, cuBLASLt, 그리고 Candle 프레임워크를 활용합니다.
- 효율적인 로딩: 가중치 로드에 Safetensors를 사용하고 모델 그래프 컴파일 단계를 제거합니다.
- 운영 효율성: 빠른 부팅 시간을 위한 작은 Docker 이미지(서버리스 패턴 지원)와 토큰 기반 동적 배치를 제공합니다.
- 프로덕션 준비: Prometheus 메트릭과 Open Telemetry를 통한 분산 추적을 포함합니다.
성능 및 비용 벤치마크
TEI를 통해 오픈소스 모델을 배포하면 폐쇄형 API에 비해 상당한 비용 절감 효과를 얻을 수 있습니다. Nvidia A10G 인퍼런스 엔드포인트에서 배치 크기 32, 시퀀스 길이 512 토큰으로 BAAI/bge-base-en-v1.5 모델을 사용한 벤치마크에서 허깅페이스는 다음과 같은 성과를 달성했습니다:
- 처리량: 초당 450+ 요청.
- 비용: 1k 토큰당 $0.00000156 (1M 토큰당 $0.00156).
허깅페이스에 따르면, 이는 1k 토큰당 $0.0001로 가격이 책정된 OpenAI 임베딩에 비해 64배 비용 절감을 의미합니다.
허깅페이스 인퍼런스 엔드포인트를 통한 배포
인퍼런스 엔드포인트는 수동 인프라 관리 또는 MLOps가 필요 없는 관리형 SaaS 환경을 제공합니다. 주요 기능은 다음과 같습니다:
- 간편한 배포: 몇 번의 클릭만으로 프로덕션 준비가 된 API로 모델을 배포할 수 있습니다.
- 확장 및 비용 제어: 비활성 기간 동안 비용을 절감하기 위해 자동 스케일 투 제로를 지원합니다.
- 엔터프라이즈 보안: SOC2 Type 2 인증, GDPR 데이터 처리 계약, BAA를 제공하며, 직접 VPC 연결을 통한 보안 오프라인 엔드포인트도 제공합니다.
- 광범위한 지원: Sentence-Transformers, Diffusers, 그리고 🤗 Transformers와의 즉시 호환성을 제공합니다.
배포 워크플로우
임베딩 모델을 배포하려면 사용자는 모델 저장소(예: BAAI/bge-base-en-v1.5)를 선택하고, 클라우드 제공자 및 지역을 선택한 후 인스턴스 유형을 선택합니다. 시스템은 모델 크기에 따라 인스턴스 유형을 제안하지만, 높은 성능 벤치마크는 Nvidia A10G와 같은 GPU 인스턴스를 사용하여 달성됩니다. 배포 과정은 일반적으로 1~3분이 소요됩니다.
임베딩 엔드포인트 사용
엔드포인트가 온라인 상태가 되면, Inference Widget을 통해 수동 테스트를 하거나 cURL, Python, JavaScript를 사용한 API 요청으로 접근할 수 있습니다.
배치 처리 및 트렁케이션
TEI는 배치 요청을 지원하여 단일 요청에 여러 문서를 보내 엔드포인트 활용도를 높일 수 있습니다. 사용자는 TEI가 입력을 자동으로 트렁케이션하지 않는다는 점을 유의해야 하며, 트렁케이션은 요청 페이로드에서 truncate: true를 설정하여 명시적으로 활성화해야 합니다.
import requests
API_URL = "https://your-endpoint-url.huggingface.cloud"
headers = {
"Authorization": "Bearer YOUR TOKEN",
"Content-Type": "application/json"
}
output = requests.post(API_URL, headers=headers, json={
"inputs": ["sentence 1", "sentence 2", "sentence 3"],
"truncate": True
}).json()