본문으로 건너뛰기

© 2026 Molayo

GitHub요약2026. 06. 18. 00:13

mrdbourke/simple-local-rag

요약

NVIDIA GPU를 활용하여 로컬 환경에서 실행 가능한 오픈 소스 RAG 파이프라인 구축 가이드를 제공합니다. PDF 문서 인제스션부터 LLM을 이용한 질의응답까지의 전 과정을 다루며, Google Colab에서도 실행 가능합니다.

핵심 포인트

  • NVIDIA GPU 기반의 완전한 로컬 RAG 워크플로우 구축
  • 오픈 소스 도구와 Gemma 모델을 활용한 PDF 채팅 기능 구현
  • PyTorch 및 CUDA 환경 설정과 Flash Attention 2 활용 팁 제공
  • 로컬 환경 및 Google Colab 환경 모두 지원

우리가 구축할 로컬 RAG 파이프라인:

모두 NVIDIA GPU에서 로컬로 실행되도록 설계되었습니다.

PDF 인제스션 (PDF ingestion)부터 "PDF와 채팅" 스타일의 기능까지 모든 과정을 다룹니다.

모두 오픈 소스 (open-source) 도구를 사용합니다.

우리의 구체적인 예시에서는, 사용자가 1,200페이지 분량의 영양학 교과서 PDF 버전에 대해 질문하면, LLM (Large Language Model)이 교과서의 텍스트 구절을 바탕으로 질문에 대한 응답을 생성할 수 있게 해주는 RAG 워크플로우인 NutriChat을 구축할 것입니다.

PDF 소스: https://pressbooks.oer.hawaii.edu/humannutrition2/

또한 노트북 00-simple-local-rag.ipynb를 Google Colab에서 직접 실행할 수도 있습니다.

TODO:

  • 설정 지침 완료
  • 워크플로우 헤더 이미지 제작
  • README에 RAG 정보 소개 추가 여부?
  • README에 확장 기능 추가
  • 코드 작성/워크스루 영상 녹화 - 완료, YouTube에서 각 코드 라인을 따라오세요: https://youtu.be/qN_2fnOPY-M

두 가지 주요 옵션:

  • 5GB 이상의 VRAM을 갖춘 로컬 NVIDIA GPU가 있는 경우, 아래 단계를 따라 이 파이프라인을 귀하의 기기에서 로컬로 실행하십시오.

  • 로컬 NVIDIA GPU가 없는 경우, Google Colab을 따라 하며 그곳의 NVIDIA GPU에서 실행할 수 있습니다.

  • Python 코드를 작성하는 데 익숙함.

  • 1~2개의 초급 머신러닝 (machine learning)/딥러닝 (deep learning) 코스 수강.

  • PyTorch에 익숙함, 더 자세한 내용은 나의 초급 PyTorch 영상을 참조하십시오.

참고: Python 3.11에서 테스트되었으며, CUDA 12.1이 설치된 NVIDIA RTX 4090을 탑재한 Windows 11에서 실행되었습니다.

git clone https://github.com/mrdbourke/simple-local-rag.git
cd simple-local-rag
python -m venv venv

Linux/macOS:

source venv/bin/activate

Windows:

.\venv\Scripts\activate
pip install -r requirements.txt

참고: torch를 CUDA와 함께 수동으로 설치해야 함을 확인했습니다 (더 빠른 추론을 위해 최신 버전의 어텐션 (attention)을 사용하려면 torch 2.1.1+ 버전이 필요합니다), 다음을 참조하십시오: https://pytorch.org/get-started/locally/

Windows에서는 다음을 사용했습니다:

pip3 install -U torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

VS Code:

code .

Jupyter Notebook

jupyter notebook

설치 참고 사항 (Setup notes):

  • 설치 또는 설정 과정에서 문제가 발생하면 이슈(issue)를 남겨주세요.
  • Gemma LLM 모델에 접근하려면 Hugging Face의 Gemma 모델 페이지에서 이용 약관에 동의해야 합니다. 그 후 Hugging Face CLI/Hugging Face Hub의 login() 함수를 통해 로컬 머신을 인증해야 합니다. 이 과정을 완료하면 모델을 다운로드할 수 있습니다. Google Colab을 사용하는 경우, "Secrets" 탭에 Hugging Face 토큰을 추가할 수 있습니다. - 속도 향상을 위해 Flash Attention 2 (더 빠른 어텐션 구현)를 설치 및 컴파일하는 작업은 시스템 설정에 따라 약 5분에서 3시간 정도 소요될 수 있습니다. 자세한 내용은 Flash Attention 2 GitHub를 참조하세요. 특히 Windows에서 실행하는 경우, 이 GitHub 이슈 스레드를 확인하세요. 컴파일 시간 문제로 인해 requirements.txt에서 flash-attn을 주석 처리해 두었으니, 사용을 원하시면 주석을 해제하거나 pip install flash-attn을 실행하세요.

RAG는 검색 증강 생성 (Retrieval Augmented Generation)의 약자입니다.

이 개념은 Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks 논문에서 소개되었습니다.

각 단계는 대략 다음과 같이 나눌 수 있습니다:

Retrieval (검색) - 쿼리(query)가 주어졌을 때 소스에서 관련 정보를 찾는 과정입니다. 예를 들어, 질문이 주어졌을 때 데이터베이스에서 관련 있는 Wikipedia 텍스트 구절을 가져오는 것입니다.
Augmented (증강) - 검색된 관련 정보를 사용하여 생성 모델 (예: LLM)의 입력을 수정하는 과정입니다.
Generation (생성) - 입력이 주어졌을 때 출력을 생성하는 과정입니다. 예를 들어, LLM의 경우 입력 프롬프트(prompt)가 주어졌을 때 텍스트 구절을 생성하는 것입니다.

RAG의 주요 목표는 LLM의 생성 결과물(generation outputs)을 개선하는 것입니다.

두 가지 주요 개선 사항은 다음과 같습니다:

환각 현상 방지(Preventing hallucinations) - LLM은 놀랍지만, 실제로는 아닌 것을 처럼 생성하는 환각(hallucination)에 취약합니다. RAG 파이프라인은 사실적인 입력(retrieved inputs)을 제공함으로써 LLM이 더 사실적인 결과물을 생성하도록 도울 수 있습니다. 그리고 RAG 파이프라인에서 생성된 답변이 정확하지 않은 것처럼 보이더라도, 검색(retrieval) 덕분에 그 정보가 어디서 왔는지 출처(sources)에 접근할 수 있습니다.맞춤형 데이터로 작업하기(Work with custom data) - 많은 기본 LLM은 인터넷 규모의 텍스트 데이터로 학습되었습니다. 이는 언어를 모델링하는 뛰어난 능력을 갖추고 있음을 의미하지만, 종종 특정 지식이 부족합니다. RAG 시스템은 LLM에 의료 정보나 회사 문서와 같은 도메인별(domain-specific) 데이터를 제공하여, 특정 사용 사례에 맞게 출력물을 사용자 정의할 수 있도록 할 수 있습니다.**원래 RAG 논문의 저자들은 위에서 언급된 두 가지 포인트를 그들의 토론에서 설명했습니다. 이 작업은 이전 작업들보다 몇 가지 긍정적인 사회적 이점을 제공합니다. 실제 사실 지식(이 경우 Wikipedia)에 더 강하게 기반하고 있다는 사실 자체가, 더 사실적인 생성물에서는

고객 지원 Q&A 채팅 - 기존 고객 지원 문서를 리소스로 활용하여, 고객이 질문을 하면 시스템이 관련 문서 스니펫(snippets)을 검색하고 LLM이 이 스니펫들을 바탕으로 답변을 작성하게 할 수 있습니다. 이를

성능 측면에서, LLM API는 일반적인 작업에서 로컬에서 실행되는 오픈 소스 모델보다 여전히 더 나은 성능을 보일 수 있지만, 더 작고 집중된 모델이 더 큰 모델보다 뛰어난 성능을 보이는 사례가 점점 더 많이 나타나고 있습니다.

용어설명
토큰 (Token)텍스트의 하위 단어 단위입니다. 예를 들어, "hello, world!"는 ["hello", ",", "world", "!"]로 나뉠 수 있습니다. 토큰은 전체 단어, 단어의 일부 또는 문장 부호 그룹이 될 수 있습니다. 영어 기준으로 1 토큰은 약 4글자와 같으며, 100 토큰은 약 75단어와 같습니다. 텍스트는 LLM에 전달되기 전에 토큰으로 분할됩니다.
임베딩 (Embedding)데이터 조각의 학습된 수치적 표현입니다. 예를 들어, 텍스트 문장은 768개의 값을 가진 벡터(vector)로 표현될 수 있습니다. (의미상) 유사한 텍스트 조각들은 이상적으로 유사한 값을 갖게 됩니다.
임베딩 모델 (Embedding model)입력 데이터를 받아 수치적 표현을 출력하도록 설계된 모델입니다. 예를 들어, 텍스트 임베딩 모델은 384 토큰의 텍스트를 입력받아 크기가 768인 벡터로 변환할 수 있습니다. 임베딩 모델은 LLM 모델과 다를 수 있으며, 실제로도 다른 경우가 많습니다.
유사도 검색/벡터 검색 (Similarity search/vector search)유사도 검색/벡터 검색은 고차원 공간(high-dimensional space)에서 서로 가까이 있는 두 벡터를 찾는 것을 목표로 합니다. 예를 들어, 임베딩 모델을 통과한 두 개의 유사한 텍스트 조각은 높은 유사도 점수(similarity score)를 가져야 하는 반면, 서로 다른 주제에 관한 두 텍스트 조각은 더 낮은 유사도 점수를 갖게 됩니다. 일반적인 유사도 점수 측정 방식으로는 내적(dot product)과 코사인 유사도(cosine similarity)가 있습니다.
거대 언어 모델 (Large Language Model, LLM)텍스트의 패턴을 수치적으로 표현하도록 훈련된 모델입니다. 생성형 LLM은 시퀀스(sequence)가 주어지면 그 시퀀스를 이어 나갑니다. 예를 들어, "hello, world!"라는 텍스트 시퀀스가 주어지면, 생성형 LLM은 "we're going to build a RAG pipeline today!"를 생성할 수 있습니다. 이러한 생성은 학습 데이터와 프롬프트(prompt)에 크게 의존합니다.
LLM 컨텍스트 창 (LLM context window)LLM이 입력으로 받아들일 수 있는 토큰의 수입니다.

예를 들어, 2024년 3월 기준으로 GPT-4는 기본적으로 32k 토큰(약 96페이지 분량의 텍스트)의 컨텍스트 창 (context window)을 가지며, 필요에 따라 최대 128k까지 확장될 수 있습니다. Google의 최신 오픈 소스 LLM인 Gemma (2024년 3월)는 8,192 토큰(약 24페이지 분량의 텍스트)의 컨텍스트 창을 가집니다. 컨텍스트 창이 더 크다는 것은 LLM이 질의 (query)를 돕기 위해 더 많은 관련 정보를 받아들일 수 있음을 의미합니다. 예를 들어, RAG 파이프라인 (RAG pipeline)에서 모델의 컨텍스트 창이 더 크다면, 생성 (generation)을 돕기 위해 검색 시스템 (retrieval system)으로부터 더 많은 참조 항목 (reference items)을 받아들일 수 있습니다. |
| 프롬프트 (Prompt) |
생성형 LLM에 입력되는 값을 설명하는 일반적인 용어입니다. "프롬프트 엔지니어링 (prompt engineering)"의 개념은 생성형 LLM에 텍스트 기반(또는 잠재적으로 이미지 기반) 입력을 특정 방식으로 구조화하여 생성된 출력이 이상적이도록 만드는 것입니다. 이 기술은 LLM의 인컨텍스트 학습 (in-context learning) 능력 덕분에 가능합니다. 즉, LLM이 언어에 대한 표현을 사용하여 프롬프트를 분석하고 적절한 출력이 무엇인지 인식할 수 있는 능력을 갖추고 있기 때문입니다 (참고: LLM의 출력은 확률적(probable)이므로, "출력할 수 있다(may output)"와 같은 표현이 사용됩니다). |

곧 공개 예정입니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 GitHub AI Tools의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0