ML_AI/AI Tool 정리

RAG, LLM 모델, LoRA adapter, ollama

안정민 2024. 7. 2. 13:27

■ RAG 
:  Retrieval-Augmented Generation
:  대규모 언어 모델의 출력을 최적화하여 응답을 생성하기 전에 학습 데이터 소스 외부의 신뢰할 수 있는 지식 베이스를 참조하도록 하는 프로세스
:  대형 언어 모델은 현재 상황에 대한 최신 정보를 얻기를 거부하지만 항상 절대적인 자신감을 가지고 모든 질문에 답변하는 지나치게 열정적인 신입 사원, RAG는 이러한 문제 중 일부를 해결하기 위한 접근 방식
:  LLM을 리디렉션하여 신뢰할 수 있는 사전 결정된 지식 출처에서 관련 정보를 검색
:  RAG가 없는 경우 LLM은 사용자 입력을 받아 훈련한 정보 또는 이미 알고 있는 정보를 기반으로 응답을 생성, RAG에는 사용자 입력을 활용하여 먼저 새 데이터 소스에서 정보를 가져오는 정보 검색 구성 요소가 도입
:  https://aws.amazon.com/ko/what-is/retrieval-augmented-generation/

:  외부데이터 생성 -> 관련 정보 검색 -> LLM 프롬프트 확장 -> 외부 데이터 업데이트
:  LLM의 원래 학습 데이터 세트 외부에 있는 새 데이터를 외부 데이터 (API, 데이터베이스 또는 문서 리포지토리와 같은 여러 데이터 소스에서 가져올 수 있다)
:  임베딩 언어 모델이라고 하는 또 다른 AI 기법은 데이터를 수치로 변환하고 벡터 데이터베이스에 저장 (생성형 AI 모델이 이해할 수 있는 지식 라이브러리를 생성)
:  사용자 쿼리는 벡터 표현으로 변환되고 벡터 데이터베이스와 매칭
:  RAG 모델은 검색된 관련 데이터를 컨텍스트에 추가하여 사용자 입력(또는 프롬프트)을 보강


■ Ollama
:  Ollama는 오픈소스 LLM을 로컬 PC에서 쉽게 실행할 수 있게 해주는 도구
:  Mistral, Llama 3 등 다양한 오픈소스 LLM을 지원 및 모델 가중치, 설정, 데이터셋을 하나의 패키지로 묶어서 Modelfile로 관리
:  [특징] 무료 오픈소스, 로컬PC에서 실행 가능, 다양한 모델 지원, 모델 커스터마이징 가능, REST API 제공
:  https://www.developerfastlane.com/blog/ollama-usage-guide#google_vignette



■ langchain
:  LangChain은 대규모 언어 모델(LLM)을 기반으로 애플리케이션을 구축하기 위한 오픈 소스 프레임워크
:  LangChain은 모델이 생성하는 정보의 맞춤화, 정확성 및 관련성을 개선하기 위한 도구와 추상화 기능을 제공
:  예를 들어 개발자는 LangChain 구성 요소를 사용하여 새 프롬프트 체인을 구축하거나 기존 템플릿을 맞춤화
:  LangChain에는 LLM이 재훈련 없이 새 데이터 세트에 액세스할 수 있도록 하는 구성 요소도 포함
:  LangChain은 RAG 와 같은 데이터 응답 애플리케이션을 개발하기 위한 중간 단계를 간소화하여 프롬프트 엔지니어링의 효율성을 높임

:  체인은 사용자의 쿼리부터 모델의 출력에 이르기까지, 일련의 자동화된 작업
:  체인은 링크로 이루어짐,  개발자가 서로 연결하여 체인 시퀀스를 형성하는 각 작업을 링크라고 하고, 개발자는 링크를 사용하여 복잡한 작업을 여러 개의 작은 작업으로 나눌 수 있다
: 링크의 예시 : 사용자 입력 형식 지정, LLM에 쿼리 전송, 클라우드에서 데이터 검색, 언어 번역 등
:  LangChain 프레임워크에서 링크는 사용자로부터 입력을 받아 처리를 위해 LangChain 라이브러리로 전달

 

 

 

■ 파인튜닝 LoRA (adapter)
:  Low-Rank Adaptation
:  Huggingface 에서 개발한 Parameter-Efficient Fine-Tuning (PEFT) 방식
:  파이썬의 peft 라이브러리를 사용하여 쉽게 LoRA 를 사용 가능
:  기존 full fine-tuning은 pre-trained Model 전체 파라미터에 가중치와 역전파(back propagation)의 기울기를 더하는 방식, LoRA 는 기존의 LLM을 직접 fine-tuning 하는 대신, 새로운 레이어(LoRA adapter 의 A Layer, B Layer)를 삽입해서 훈련하는 방식
:   LoRA는 LLM의 weight는 고정하고 추가적인 trainable 파라미터를 각 트랜스포머 레이어에 inject함
:  학습 파라미터를 10000배 정도 줄여주고 더 나은 성능을 보장함
:  https://x2bee.tistory.com/335
:  https://beeny-ds.tistory.com/entry/LORA-%EB%85%BC%EB%AC%B8-%EC%89%BD%EA%B2%8C-%EC%84%A4%EB%AA%85%ED%95%98%EA%B8%B0#google_vignette

 

LoRA의 장점과 단점 정리


Advantages
Disadvantages
  • full-finetune 과정에서 요구하는 것보다 훨씬 적은 파라미터를 사용한다.
  • 그만큼 저장공간도 덜 필요하게 되고,
  • 백프로파게이션 속도도 빨라지게 된다.
  • 또한, 적은 연산량을 가지고도 full-finetune 기법과 비견할 만한 성능을 낼 수 있다 (논문 실험 섹션에 정리되어 있음).
  • 실제 사용하는 입장에서는, 연산량이 기존 LLM의 15~20%로 줄어들기 때문에, 단일 GPU에서도 학습할 수 있다.
  • low-rank approximation process에서 모델 성능에 영향을 미칠 수 있는 정보 손실이 일어날 수 있다. 연산량과 성능의 트레이드 오프
  • 논문의 실험 파트에서도 볼 수 있듯, 랭크를 얼마로 설정하냐가 성능에 큰 영향을 끼친다. 따라서 랭크 값을 잘 설정하는 것이 중요하다.

LoRA의 후속작 (DoRA , QLoRA etc)들 정리

 [LoRA sequel #1] DoRA

  • DoRA (Weight-Decomposed Low-Rank Adaptation)
  • DoRA는 사전 학습된 가중치를 크기(Magnitude)와 방향(Direction)의 구성 요소들로 분해(Decompose)하고, LoRA를 사용하여 방향(Direction) 업데이트를 적용하여 미세조정(FT, Fine-Tuning) 과정에서 학습 가능한 매개변수의 수를 효율적으로 최소화
  • DoRA의 핵심적인 아이디어는 사전 학습된 가중치( W )를 크기(Magnitude)와 방향(Direction)의 두 가지 구성 요소로 분해(Decompose)하는 접근 방식에 있습니다. 이 분해(Decompose)는 미세조정 과정에서 더 세밀한 업데이트를 가능하게 하며, 특히 가중치 벡터의 방향(Direction) 구성 요소쪽에 LoRA를 적용합니다. 이 방법론적 전환은 전통적인 PEFT의 한계를 해결하고, 추가 계산 부담 없이 더 정밀하고 효과적인 업데이트를 가능하게 합니다. 논문에서는 방향(Direction)의 업데이트에 초점을 맞춤으로써 DoRA가 전체 파인튜닝(Full Fine-Tuning)에 가까운 성능을 달성할 수 있으며 PEFT 방법의 효율성을 유지할 수 있다고 주장합니다.
  • DoRA의 또 다른 주요 기여는 LoRA 기반 방법의 학습 능력과 학습의 안정성을 향상시키는 것입니다. 가중치 분해 전략을 사용함으로써 DoRA는 특정 작업에서 모델의 성능에 직접적인 영향을 미치는 방향(Direction) 구성 요소의 가중치에 대한 효율적이고 목표 지향적인 업데이트를 허용합니다.
  • https://discuss.pytorch.kr/t/dora-lora-weight-decomposed-low-rank-adaptation/3528
 

DoRA: 가중치 분해 LoRA (Weight-Decomposed Low-Rank Adaptation)

PyTorchKR​🔥🇰🇷 🤔💬 대표적인 PEFT(Parameter-Efficient Fine-Tuning) 기법 중 하나인 LoRA(Low-Rank Adaptation)에 이어 DoRA가 등장하였습니다. 함께 살펴보시죠. 😃 이 글은 GPT 모델로 정리한 것으로, 잘못

discuss.pytorch.kr

 

 [LoRA sequel #2] QLoRA

  • QLoRA는 양자화된(Quantized) 모델을 LoRA 기법을 사용해서 학습하는 방법입니다.
  • 즉, QLoRA는 4-bit로 양자화된 모델을 가져와서 LoRA 기법을 활용해 파인튜닝하는 방법으로
    NF4(4-bit NormalFloat) + 이중 양자화(Double Quantized) + 페이지드 옵티마이저(Paged Optimizer) 등을 사용하여 메모리 소모를 크게 줄였습니다.