Hugginface(embedding, reranker)&Ollama(llm) 연동 trouble shooting #3
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📌 Ollama LLM 및 HuggingFace Embedding&Re-ranker 모델 연동
1. 개요
사내 문서를 활용하여 평가 데이터를 생성하고 RAG(Retrieval-Augmented Generation) 파이프라인을 검증하기 위해 AutoRAG를 사용했다.
그러나 Ollama와 **HuggingFace 기반 모델(HF Embedding, Re-ranker)**을 추가하는 과정에서 예상치 못한 오류가 발생했고, 이를 해결하기 위해 AutoRAG의 구조를 분석하고 코드를 수정하였다.
이에 대한 이슈 분석 및 해결 과정을 공유한다.
2. 이슈
AutoRAG는 기본적으로 OpenAI API와 일부 사전 정의된 모델만을 지원한다. 이에 따라 사용자가 직접 Ollama 기반 LLM과 HuggingFace 임베딩 및 리랭커 모델을 명시적으로 등록해줘야 했다.
📌 발생한 주요 오류
(1) Ollama 모델 인식 불가
generator_models에 등록해주는 작업이 필요하다.(2) Ollama 서버 연결 오류 (
ReadTimeout)Ollama서버 주소(base_url)가 잘못되었거나 Docker 컨테이너 간 네트워크 설정이 올바르지 않은 경우 발생할 수 있다.autorag-ollama)을 기반으로base_url을 정확히 명시해야 한다.(3) Embedding 모델 문제
embedding_models딕셔너리에서 찾을 수 없음.embedding_models딕셔너리에 HuggingFace 모델을 직접 등록.(4) Re-ranker 모델 문제
3. 해결 과정
(1)
main.py에서 Ollama 모델 등록Ollama 모델을 AutoRAG에서 사용할 수 있도록
LazyInit을 활용하여generator_models에 추가했다. 이때,base_url은 Ollama docker 주소로 정의한다.📌 수정된
main.py📝 설명:
LazyInit을 통해 모델을 지연 초기화하여 실제 사용할 때까지 리소스를 아끼며 로드함.autorag-ollama는docker-compose.yml에서 정의한 컨테이너 이름이므로 반드시 일치시켜야 통신 가능.(2)
embedding/base.py에서 HuggingFace 임베딩 모델 등록AutoRAG가 HuggingFace Embedding 모델을 인식할 수 있도록
embedding_models에 추가했다.📌 수정된
embedding/base.py📝 설명:
HuggingFaceEmbedding클래스를 통해 HuggingFace의 사전학습 임베딩 모델 사용 가능.KoE5는 한국어에 최적화된 encoder-only 모델로, RAG의 문서 임베딩 성능을 향상시킬 수 있음.LazyInit을 통해 필요한 시점에만 모델을 불러오게 구성.(3)
nodes/passagereranker/에서 HuggingFace 리랭커 모델 정의새로운 re-ranker 모델을 추가하기 위해서는 별도의 py 파일 작성이 필요했다.
📌 수정된
__init__.py📌 신규 작성된
draongKue2.py📝 설명:
dragonkue/bge-reranker-v2-m3-ko는 한국어 문장 쌍에 대한 의미적 유사도를 기반으로 재정렬을 수행함.BasePassageReranker를 상속받아 AutoRAG의 평가 파이프라인에 통합.pure()→_pure()구조를 통해 query와 candidate 간 유사도 평가 및 상위 k개 선택.📝 dragonku2_run_model() 설명:
exp_normalize()함수를 통해 softmax 안정성 보장 (overflow 방지).