llama3 설치 방법과 한국어로 RAG 기술을 적용해서 환각 현상이 없는 정확한 문서를 검색해주는 똑똑한 나만의 챗봇을 만드는 과정을 자세히 소개해드립니다. 시리즈로 LLAMA3 를 이용해서 챗봇과 AI Search라는 글을 포스팅 할 계획 이오니 꼭 읽어보시기 바랍니다.
llam3 설치를 직접하게 된 계기는 2024년 4월 30일에 양재 AT 센터에서 한국 Microsoft 에서 MS AI Tour 라는 워크숍을 진행하면서 RAG를 접하게 되었기 때문이예요. 사실은 MS AI Tour 행사가 진행되는 건물은 2층 컨벤션 센터였는데 층고도 엄청 높고 수용할 수 있는 관람객이 정말 많았어요.
MS AI Tour 행상에 참석해서 MS Copilot 을 이용해서 RAG 검색을 지원하는 실습 세션을 들어보려고 기대하였으나 정상 워크숍이 진행된 룸에 입장하지도 못했습니다. 개인 노트북을 지참하고 워크숍에 참석한 사람들은 직접 실습을 해볼 수 있는 좋은 기회였습니다.
하지만 아쉽게도 MS Copilot 으로 직접 RAG 를 개발하는 세션은 사람들이 너무 몰려서 입장하지 못하였어요. MS 운영측에서는 실습 세션이라서 40명 정도가 테이블에 앉아서 실습을 할 수 있는 멀티탭을 준비하였는데 사람들이 수백명이 입장하려고 기다렸습니다. 결국에는 선착순으로 줄을 섰던 40명만 입장해서 “Copilot RAG 프로그래밍 실습” 수업을 듣게 되었지요.
그 이후에는 사람들이 무조건 다른 강의 듣다가 중간에 뛰쳐 나와서 다른 실습 세션이 열리는 강의실 앞에 줄을 서기 시작했습니다. 마지막에 다행스럽게도 RAG 실습을 노트북으로 직접하는 세션을 들을 수 있었어요!
강연을 듣고 집에 돌아와서 다시 실습을 해보려고 하니까 강연장에서 제공해 주었던 copilot key 가 비활성화 되어서 다시 가상 컴퓨팅 환경에 접속해서 Copilot VS Code에 접속을 할 수 없는 것이었어요! 오 마이 갓!
llama3 한국어 설치 해 볼까?
llama3 한국어 모델이 최근에 메타에서 출시되었고 개인은 라이센스 비용을 내지 않고 사용할 수 있다고 하더군요. 기업들도 무료로 사용할 수 있데요! 기업들은 메타에게 연락해서 사용 허가만 받으면 된다고 하더라구요!
llam3 RAG 를 드디어 직접 사용해볼 수 있게 된 것이예요~
RAG 란 무엇인가?
RAG 란 Retrieval Augmented Generation 의 약자인데요. ChatGPT 는 사용자가 입력한 채팅을 이해하여 답변을 합니다. llama3 도 한글로 질문을 하면 메타에서 만든 초거대 언어 모델을 활용해서 질문에 대한 답변을 매우 정확하게 해줍니다.
집에 있는 데스크탑 컴퓨터에 GPU가 없어서 Google Colab 에서 GPU 를 사용해서 llama3 모델을 돌려야 겠습니다. 집 컴퓨터에 GPU 를 RTX 2060 이상의 성능을 가진 Nvidia 그래픽 카드를 구비하는 것도 요즘 같은 생성형 AI 모델을 테스트하기에 좋은 것 같습니다.
2년 전에 RTX 3060 그래픽 카드를 이더리움 채굴을 한다고 2개 나 장만했다가 중고로 팔아버린 것이 매우 아쉽네요. 그때 이더리움도 팔지 않고 RTX 3060도 팔지 않았다면 요즘에 AI 로 그림을 그려주는 Stable Diffusion 모델도 집에서 돌려볼 수 있었을 텐데요. 매우 아쉬운 상황입니다.
llama3 모델을 이용해서 한국어를 영어로 번역하는 코드를 작성해 보겠습니다. 한국어와 영어 번역 말뭉치는 정부에서 운영하는 AI Hub에서 다운로드를 받았습니다.
aihub 에서 데이터 이름 검색 창에서 “한국어 영어” 로 검색을 하여도 “INNORIX Ex Agnet” 라는 애플리케이션이 설치가 정상적으로 되지 않습니다. 설치 화면이 정상적으로 진행 되었더라도 제가 선택한 “한국어 영어 (병렬)” 파일 다운로드가 동작이 시작되지 않는 경우가 많았습니다.
이 경우에는 INNORIX Ex Agent 프로그램을 삭제한 후에 다시 설치를 해주셔야 합니다. 어제 정상적으로 설치가 되어서 파일을 다운로드 받는데 성공하셨더라도 하루가 지나니까 다시 파일이 정상적으로 다운로드가 되지 않더라구요. 결국에는 설치되어 있던 INNORIX Ex Agent 를 깨끗하게 삭제하고 다시 설치했습니다.
제가 “4_문어체_한국문화.zip” 데이터 파일을 받아서 여기에 올려두었으니 아래에서 직접 다운로드 받으셔도 됩니다.
“4_문어체_한국문화.xlsx” 파일을 열어보면 아래와 같이 컬럼이 ID, 키워드, 원문, 번역문 으로 구분되어 있는 것을 알 수 있습니다.
구글 콜랩에서 아래 명령어를 실행해서 accelerate 패키지를 설치합니다.
!pip install accelerate
google colab 의 노트북의 코드 입력 항목에 아래와 같이 입력하여 ‘4_문어체_한국문화.xlsx’ 데이터 파일에 담긴 내용을 python 에서 데이터를 다룰 때 애용하는 dataframe 형태인 df 라는 변수에 저장을 합니다.
이때 엑셀 쉬트에는 여러 개의 sheet 가 존재할 수 있는데 sheet의 이름이 ‘sheet0’ 인 엑셀 쉬트의 내용을 읽어오도록 설정합니다.
import pandas as pd
path='4_문어체_한국문화.xlsx'
df = pd.read_excel(path, sheet_name='Sheet0')
아래와 같이 dataframe 인 df 의 컬럼 이름들을 확인하기 위해서 notebook 의 코드 입력창에 “df colums” 라는 명령어를 입력하고 “Shift + 엔터” 키를 누르면 코드가 실행됩니다.
dataframe 의 전체 내용을 확인해 보기 위해서 notebook 의 코드 입력 창에 “df” 라는 명령어를 입력하고 “Shift + 엔터” 키를 입력하려 코드를 실행하면 아래와 같이 df 에 저장된 데이터가 각 행과 열에 맞추어서 표현이 됩니다.
첫번째 행과 열에 해당하는 한국어와 번역문이 정상적으로 표현되는지 살펴보기 위해서 1행1열의 한국어를 출력하고 또한 1행 2열에 있는 번역문을 출력하여 정상 출력되는지 확인합니다.
df_filtered.iloc[0]['원문']
df_filtered.iloc[0]['번역문']
위 2개의 구문을 notebook 의 코드 입력 라인에 입력하고 “Shift + 엔터” 를 누르면 코드가 실행됩니다.
Huggingface 에서 llama3 모델 가져오는 방법
llama3 8B 모델은 AI 모델을 모아놓은 유명 사이트인 huggingface에 올라와 있어요. 아래에서 직접 huggingface 의 git 에 올라와 있는 llama3 8B model 을 다운로드 받을 수 있어요.
huggingface 의 meta llama3 8B 공식 페이지에 들어가면 huggingface 에 가입을 한 후에 meta 가 요구하는 개인정보 동의 등에 관하여 agree 를 진행해야 합니다. 또한, 이메일을 인증하여 실제로 사람이 가입했다는 점을 증명하면 hugging face 에서 agree 하는 메뉴는 사라집니다.
meta llama3 8B 소스 코드는 아래 커맨드를 google colab 의 notebook 커맨드 입력 창에서 실행하면 소스 코드가 다운로드를 받을 수 있습니다.
!git clone https://github.com/meta-llama/llama3
llama3 한국 챗봇 만드는 방법
llama3 설치가 끝났으므로 영어를 한국어로 번역해주는 챗봇을 만들어 보도록 하겠습니다. llama3-chat 은 한국어를 영어로 번역할 수도 있고 반대로 영어를 한국어로 번역할 수 있습니다. aihub 에서 다운로드 받은 “한국어-영어(병렬)” 에 있는 데이터세트를 입력 데이터로서 활용하여 영어로 구성된 문장을 한국어로 변역 하였을 때 얼마나 자연스러운지 확인해 보도록 하겠습니다.
허깅페이스에서 meta llama3 8B 모델에 대한 사용 승인 ( grant )를 받으면 Huggingface_token 을 발급해줍니다.
huggingface 에서 Account 메뉴에서 Setting 을 클릭하면 왼쪽 하단 중앙부에 “Access Tokens” 라는 메뉴가 있습니다. 들어가셔서 오른쪽의 “New token”을 클릭하면 Hugging Face Token 을 발급 받을 수 있습니다. 이때 사용 목적에 따라서 “read” 목적으로만 token 을 발급받을 수도 있고 “write” 목적으로만 token 을 발급받을 수 있으며 “custom” 목적으로 token을 발급받을 수 있습니다.
발급받은 토큰을 아래와 같이 os.environment에 등록해줍니다.
import os
os.enviroment['HF_TOKEN'] = "허깅페이스에서 발급받은 토큰값"
meta llama3 8B 모델을 불러와서 번역 기능 구현을 위해서 아래와 같이 코드를 작성합니다.
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
model = "meta-llama/Meta-Llama-3-8B"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model,
torch_dtlype=torch.bfloat16,
device_map="auto",
)
아래에 보시는 것 처럼 LLAMA3 에게 입력한 시스템 명령어와 사용자 메세지를 생성합니다. huggingface에서 생성한 토큰을 이용해서 LLAMA3 모델 사용에 대한 인증 획득 여부를 점검합니다. 또한, 채팅 프롬프트를 활성화 시켜줍니다.
생성된 모델은 outputs 에 담겨있다가 최종적으로 rsp 를 decode 시켜서 리턴해 주면 사용자가 입력한 질문에 대해서 영어 문장을 한국어로 번역한 답변을 리턴해줍니다.
def make_instruction(system_message, user_message):
msg = [
{"role": "system", "content": system_message},
{"role": "user", "content": user_message},
]
input_ids = tokenizer.apply_chat_template(
msg,
add_generation_prompt=True,
return_tensors="pt"
).to(model.device)
terminators = [
tokenizer.eos_token_id,
tokenizer.convert_tokens_to_ids("<|eot_id|>")
]
outputs = model.generate(
input_ids,
max_new_tokens=256,
eos_token_id=terminators,
do_sample=True,
temperature=0.6,
top_p=0.9
)
rsp = outputs[0][input_ids.shape[-1]:]
return tokenizer.decode(rsp, skip_special_tokens=True)
print(model.device)
korean_input=df_filtered.iloc[0]['원문']
english_input=df_filtered.iloc[0]['번역문']
llama3_translated_text = make_instruction(system_message="너는 번역을 해주는 챗봇이야. 다음을 영어로 번역해줘", user_message=english_input)
print(llama3_translated_text)
아래와 같이 english_input 에 들어있던 영문을 한국어로 번역해주는 것을 볼 수 있습니다.
llama3 한국어 문서 RAG 검색 하는 방법
llama3 한국어 모델을 사용하려고 낑낑대고 애쓰는 이유는 집에서 사용하고 있는 컴퓨터가 CPU 성능도 10년 전 모델이라 너무 느리고요. 메모리도 16GB 라서 큰 거대 언어 모델을 돌려볼 수가 없어요. 특히 RTX 3060 그래픽 카드를 중고로 팔아버린 것이 뼈아픈 실수네요.
다시 RTX 3060 그래픽 카드를 중고로 구매하려고 하니까 판매했을 때 가격보다 더 중고 그래픽 카드 가격이 높아졌지 뭐예요. 일단은 요번에는 구글 콜랩에서 llama3 3B 모델을 다운로드 받아서 설치를 해보고 한국어 데이터세트를 영어로 번역하는 작업을 해보았어요.
한국어 판례 텍스트 문서들을 여러 개를 임베딩해서 생성된 벡터들을 llama3 에 검색 키워드와 함께 입력해서 RAG 방식으로 판례 문서에서 제가 검색하고자 하는 키워드와 유사한 단어들과 유사한 의미를 담고 있는 문장들을 찾아주었어요. 정말 llama3 는 무료 거대 언어 모델인데도 유료인 ChatGPT-4 검색 성능하고 거의 비슷하네요!
RAG 기술을 사용하려면 여러 개의 문서 파일을 임베딩하여 벡터들을 생성하는 기능이 필요해요. 벡터를 생성하는 기능은 Elastic Search 엔진이 수행해 줍니다. Elasitc Search에 대한 자세한 내용과 설치하는 방법은 아래 포스팅에 자세하게 설명 하였으니 꼭 확인해 보시기 바랍니다.
pdf 문서를 여러 개를 임베딩 시키고 내가 찾는 키워드와 유사한 키워드 및 유사한 문장을 검색하려면 elastic search 검색 엔진을 사용하게 되는데 브라우저에서 검색된 결과를 확인하려면 kibana 라고 하는 Web UI 툴도 설치하여야 합니다. 아래 포스팅에 Kibana 란 무엇인가에 대하여 자세하게 설명하였고 보고 따라하면 쉽게 kibana를 설치할 수 있도록 설명을 하였으니 꼭 읽어보시기 바랍니다.
이번 포스팅에서 llama3 설치 방법하고 llama3 로 RAG 를 구현해서 나만의 문서 검색 챗봇을 만들어 보려고 하였는데 벌써 내용이 상당히 많네요. 이번에는 다음 포스팅으로 넘겨서 llama3 RAG 문서 검색 기능을 실제 동작하는 소스 코드로 Google Colab 에서 동작하도록 코딩하는 내용을 자세히 다뤄보겠습니다.
마무리
llama3 한국어 번역 기능은 ChatGPT-4 번역 기능하고 비교해도 전혀 부족함이 없네요. 단순히 번역만 해주는 것이 아니라 질문에 대해서 정확한 답변도 해주어서 구글 검색을 따로 하지 않아도 될 만큼 만족스러워요!
llama3 3B가 모델 파일 사이즈가 작아서 집에 있는 데스크탑 컴퓨터에 다운로드 받아서 추론을 해볼 수 있어서 정말 편리하네요. 사실 저한테 제일 필요한 기능은 pdf 파일이나 word 파일 또는 텍스트 파일들을 여러 개를 초거대 언어 모델에 입력해서 제가 필요로 하는 키워드로 검색을 하면 정확하게 일치하지 않아도 유사한 단어와 비슷한 뜻을 가지는 문장들을 찾아내고 싶었거든요. llama3 RAG 기술은 정말 여러 모로 도움이 되네요.
8월에 ChatGPT-5 가 출시될 예정이라고 합니다. AGI ( Artificial General Intelligence) 기능을 완벽하게 구현해서 나올 것으로 기대된다고 하네요. 그때쯤이면 llama4 모델이 나와서 ChatGPT 모델과 경쟁할 수 있기를 기대하고 있어요.