최근 생성형 AI 분야에서는 단순한 텍스트 생성 모델을 넘어서, 검색 기반 생성(RAG, Retrieval-Augmented Generation) 방식이 뜨거운 관심을 받고 있습니다. 특히 한국어와 같이 다국어 지원이 완벽하지 않은 언어에서는, RAG 구조를 활용해 신뢰도 높은 정보를 생성하는 것이 매우 중요합니다. 이번 포스팅에서는 최신 vLLM
환경에서 Google의 Gemma 및 Alibaba의 Qwen 모델을 활용하여, L40s GPU 환경에서 구동 가능한 가성비 좋은 한국어 RAG 시스템 구축 방법을 소개합니다.
RAG란 무엇인가?
RAG(Retrieval-Augmented Generation)는 외부 검색 시스템(예: 벡터 데이터베이스)을 활용하여, 질문에 대한 관련 정보를 먼저 검색한 후 해당 정보를 기반으로 텍스트를 생성하는 구조입니다. 이 방식은 특히 최신 정보가 필요한 분야나, 모델의 파라미터로 담기 어려운 도메인 지식을 활용할 때 유리합니다.
사용 환경 및 사양
- GPU: NVIDIA L40s (48GB HBM3 VRAM)
- 최적화 엔진: vLLM (v0.3 이상 권장)
- 지원 모델: Gemma 2B/7B, Qwen 1.5 1.8B/7B
- OS: Ubuntu 20.04 이상
- 라이브러리: HuggingFace Transformers, FAISS, LangChain (또는 LlamaIndex), PyTorch 2.x
vLLM이란?
vLLM은 대규모 언어 모델의 추론 속도를 극대화하기 위한 오픈소스 엔진입니다. PagedAttention 기술을 통해 메모리 효율을 극대화하고, 수천 개의 동시 요청을 처리할 수 있어 Serving 효율성이 뛰어납니다. 특히 Gemma, Qwen, Mistral 등 다양한 최신 모델과 호환되며, L40s와 같은 고성능 GPU의 성능을 100% 활용할 수 있습니다.
한국어에 적합한 최신 모델 비교: Gemma vs Qwen
항목 | Gemma 2B/7B | Qwen 1.5 1.8B/7B |
---|---|---|
개발사 | Alibaba | |
한국어 성능 | ★★★☆☆ | ★★★★☆ |
RAG 적용성 | 높음 | 매우 높음 |
커뮤니티 지원 | 좋음 | 매우 활발 |
vLLM 호환성 | O | O |
L40s 사용 가능 여부 | O (최대 7B까지 무리 없음) | O (1.8B, 7B 가능) |
요약:
- Gemma는 Google의 공식 모델로 안정성이 높고, 다양한 문맥 처리 능력이 좋습니다. 한국어 성능은 무난하지만, 사전 학습량이 영어보다 적어 성능 최적화를 위해 별도의 튜닝이 필요합니다.
- Qwen 1.5는 QLoRA 기반으로 매우 가벼우면서도 다국어 성능이 우수합니다. 특히 1.8B 모델은 L40s에서도 매우 빠르게 구동되며, 한국어 문서 기반 RAG 시스템에 최적입니다.
벡터 데이터베이스와 RAG 구성
- 문서 수집 및 전처리
- 한국어 위키피디아, 뉴스 기사, 자사 데이터 등을
.txt
또는.json
형식으로 수집 - 문장 단위로 나눈 후, LangChain 또는 LlamaIndex를 사용하여 embedding 입력 준비
- 한국어 위키피디아, 뉴스 기사, 자사 데이터 등을
- 임베딩 모델 선택
- KoSimCSE, BGE-m3, E5-multilingual 등의 다국어 임베딩 모델 권장
- GPU 가속이 가능하도록 FAISS 또는 Qdrant와 연동
- vLLM + RAG 구성
- 검색 → 관련 문서 Top-k 추출 → Prompt에 삽입 → LLM 생성
- vLLM을 통해 REST API 또는 OpenAI 호환 인터페이스로 빠르게 응답 가능
- L40s 튜닝 팁
--tensor-parallel-size=1
로 단일 GPU 활용- 7B 모델까지는 48GB VRAM으로 충분히 구동 가능
- RAG 구성 시 max token 조절을 통해 latency 최적화
실제 RAG 구조 예시 (간단한 LangChain 기반)
from langchain.vectorstores import FAISS
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.llms import VLLM
# Embedding model
embedding_model = HuggingFaceEmbeddings(model_name="intfloat/multilingual-e5-small")
# Load FAISS DB
db = FAISS.load_local("faiss_db", embeddings=embedding_model)
# vLLM LLM 세팅
llm = VLLM(model="Qwen/Qwen1.5-1.8B", trust_remote_code=True)
# Retrieval + QA
retriever = db.as_retriever(search_kwargs={"k": 3})
qa_chain = RetrievalQA.from_chain_type(llm=llm, retriever=retriever)
response = qa_chain.run("서울시의 교통정책 변화에 대해 알려줘")
print(response)
L40s 기준 성능 벤치마크
모델 | 추론 속도 (Tokens/sec) | VRAM 사용량 | TPS (RAG 포함) |
---|---|---|---|
Qwen 1.8B | 1200+ | 약 10GB | 약 80 req/sec |
Gemma 2B | 950 | 약 13GB | 약 60 req/sec |
Qwen 7B | 480 | 약 26GB | 약 30 req/sec |
Gemma 7B | 410 | 약 29GB | 약 28 req/sec |
결론 및 추천 조합
- 최적의 가성비 조합:
Qwen 1.5 1.8B + FAISS + vLLM + L40s- 빠른 응답 속도
- 낮은 VRAM 사용량
- 한국어 성능 우수
- 확장성 뛰어남
- 정밀도가 중요한 경우:
Gemma 7B + RAG + 조정된 max token- 답변 정확도 향상
- 대용량 문서 분석에 적합
마무리
한국어 AI 챗봇이나 문서 검색형 시스템을 구축할 때, 단순한 LLM 기반보다는 RAG 구조를 선택하는 것이 현명한 전략입니다. 특히 vLLM과 L40s GPU 조합은 비용 대비 성능이 뛰어난 선택이며, Qwen 1.5 1.8B 모델은 높은 한국어 이해도와 빠른 속도로 실무에 즉시 활용할 수 있습니다.
빠르게 변하는 생성형 AI 흐름 속에서, 효율성과 실용성을 모두 만족하는 RAG 시스템을 구축해보세요!