본문 바로가기

AI

Llama3 한국어 성능 테스트 | Colab에서 Meta-Llama-3 모델 사용해보기🦙

GPT-4에 비견할만한 성능을 가진다는 Meta의 오픈소스 LLM Llama3를 사용해보자!

 


Llama 3 모델

 Llama 3 모델 특징

  • 8B & 70B 파라미터 규모의 모델으로, MMLU, HumanEval  등 벤치마크 태스크에서 경쟁모델보다 좋은 성능을 보임
  • Decoder-only 트랜스포머 아키텍처를 기본으로 하되, Llama2 대비 큰 향상을 보임
    • 토큰 인코딩 효율을 늘리기 위해 128,000개의 vocab size를 가지는 토크나이저 사용
    • Llama2의 데이터셋의 7배 규모에 달하는 15조 토큰의 데이터에 대해 학습
    • 30개 이상의 언어에 대한 학습으로 다양한 언어적인 특성을 학습함
  • Post-training 단계에서 Supervised fine-tuning, rejection sampling, Policy optimization 등을 통해 모델 품질과 의사결정 능력을 향상
  • Scaling law를 확용하여 데이터 병합, 계산 리소스 등을 최적화하여 다양한 어플리케이션에서 강력한 성능을 보장함과 동시에 Llama2 대비 학습 과정의 효율성을 3배 향상시킴

 

<Llama 2 vs Llama 3>

 Llama-3-Instruct

Llama 3 모델에 대해 인스트럭션 튜닝 학습을 진행한 모델은 대화형 유즈케이스에 특화되어 있으며,
사용 가능한 오픈소스 채팅 모델을 능가하는 성능을 보이는 것으로 알려져 있다. 

 

8B와 70B 모델 모두 instruct 버전이 존재하며, 유용성(helpfulness)와 안전성(safety)을 최적화하도록 학습되었다.

 

Llama3 모델 사용하기

 Step 1. Access Token 신청하기

 

Meta-Llama-3B-Instruct 모델을 사용하기 위해서는 HuggingFace에서 사용 조건에 동의하고 접근 권한을 획득해야 한다.

 

권한 신청 방법:

1) HuggingFace 회원가입 및 로그인

2) https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct 에서 사용 조건 확인 및 동의하기

 

위의 동의서를 작성 후 모델 사용이 승인될 때까지 기다려야 한다.

HuggingFace settings의 Gated Repos Status에서 승인 결과를 확인할 수 있다.

(PENDING → ACCEPTED으로 바뀌어야 모델을 사용할 수 있으며, 개인적으로 승인까지 30분도 걸리지 않았다!)

 

3) HugginfFace Access Token 확인 & 복사하기 

Settings > Access Token에서 [New token] 버튼을 클릭하여 Read 토큰을 선택하고 [Generate a token]을 클릭한다.

 

생성된 토큰은 잘 저장해두었다가 Model Parameter을 Pull할 때 사용한다!

 

 Step 2. 모델 로드하기

HuggingFace 라이브러리를 활용하여 Llama 3 모델을 로드하여 테스트해볼 수 있다.

 

나는 자원이 없기 때문에 8B 규모 모델 중 meta-llama/Meta-Llama-3-8B-Instruct를 테스트해보기로 했다.

 

Llama-3 8B 모델을 로드하기 위해서는 최소 16GB VRAM과 16GB의 system RAM의 GPU가 필요하며,

GCP에서는 Nvidia L4 GPU를 선택하면 Llama-3-8B 추론이 가능하고 한다. (참고)

 

하지만 나는... Colab으로 공짜로 돌려보고 싶다..!

Colab 무료 버전에서 선택 가능한 T4 환경에서 system RAM은 12.7GB, GPU RAM은 15.0GB였지만 다행히 간신히 Llama-3-8B-instruct 모델을 로드할 수 있었다.

 

import transformers 
MY_HF_TOKEN = "your-huggingface-token"

model_id = "meta-llama/Meta-Llama-3-8B-Instruct"

pipeline = transformers.pipeline(
    "text-generation",
    model=model_id,
    model_kwargs={"torch_dtype": torch.bfloat16},
    device_map="auto",
    token = MY_HF_TOKEN
)

messages = [
    {"role": "system", "content": "You are a pirate chatbot who always responds in pirate speak!"},
    {"role": "user", "content": "Who are you?"},
]

terminators = [
    pipeline.tokenizer.eos_token_id,
    pipeline.tokenizer.convert_tokens_to_ids("<|eot_id|>")
]

outputs = pipeline(
    messages,
    max_new_tokens=256,
    eos_token_id=terminators,
    do_sample=True,
    temperature=0.6,
    top_p=0.9,
)
print(outputs[0]["generated_text"][-1])

 

Step 1)에서 승인받은 HuggingFace token을 입력하고 위의 코드를 실행하면 Llama-3-8B-Instruct 모델의 체크포인트가 다운로드되고, 예시 인풋에 대해 추론 아웃풋이 나오는 것을 확인할 수 있다.

 

<Llama-3-8B-Instruct 로딩 후 GPU RAM>

 

 

 Step 3. 모델 추론 & 테스트해보기

Llama-3의 인스트럭션 모델은 지시사항에 따른 태스크 수행이 가능한 것으로 알려져 있다.

LLM을 활용하여 수행 가능한 다양한 태스크에 대해 Llama-3-Instruct 모델이 얼마나 잘 답변을 생성하는지 정성적으로 체크해보자.

 

Llama 3 instruct 모델에 대한 기본적인 추론 템플릿은 아래와 같다.

--------------------------------------------------------------------------------------------------------------------

<|begin_of_text|><|start_header_id|>system<|end_header_id|>

You are a helpful AI assistant for travel tips and recommendations<|eot_id|>
<|start_header_id|>user<|end_header_id|>

What can you help me with?<|eot_id|><|start_header_id|>assistant<|end_header_id|>

--------------------------------------------------------------------------------------------------------------------

  • <|begin_of_text|>: 프롬프트의 시작을 나타냄
  • <|start_header_id|>system<|end_header_id|>: 메시지의 롤을 지정함 (여기서는 “system”)
  • You are a helpful AI assistant for travel tips and recommendations: 시스템 메시지
  • <|eot_id|>: 인풋 메시지의 끝을 나타냄
  • <|start_header_id|>user<|end_header_id|>: 메시지의 롤을 지정함(여기서는 “user”)
  • What can you help me with?: 유저 메시지
  • <|start_header_id|>assistant<|end_header_id|>: assistant 헤더로 끝냄으로써 모델은 생성을 시작함

Llama tokenizer의 apply_chat_template() 매서드를 적용하면 자동으로 위의 규격에 맞추어 행동하기 때문에

기본 message 템플릿에 맞추어 인풋을 구성하면 huggingface pipeline이 위의 규격에 맞추어 인풋을 구성해준다.

 

from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "meta-llama/Meta-Llama-3-8B-Instruct"
tokenizer = AutoTokenizer.from_pretrained(model_id)

messages = [
    {"role": "system", "content": "You are a pirate chatbot who always responds in pirate speak!"},
    {"role": "user", "content": "Who are you?"},
]

chat_temp = tokenizer.apply_chat_template(messages, add_generation_prompt=True)
tokenizer.decode(chat_temp)

 

Task-1) 사용자가 지정한 문체에 따라 답변하기

지시사항 반말로 답변하기 존댓말로 답변하기
메시지 system:
You are a helpful AI assistant who answers question in a friendly and informal manner. 
사용자의 질문에 대해 반말로 답변하세요.

user: 세종대왕의 업적 두 가지를 알려줘
system:
You are a helpful AI assistant who answers question in a polite and formal manner. 
사용자의 질문에 대해 존댓말로 답변하세요.

user: 세종대왕의 업적 두 가지를 알려줘
결과 😊

So, you want to know about the achievements of King Sejong, huh? 👑

Okay, let me tell you about two of his most notable accomplishments! 🎉

1. **Creation of the Hangul Alphabet**: King Sejong is often credited with creating the Hangul alphabet, which is the native script of the Korean language. He introduced it in 1443 to promote literacy among common people, especially women and peasants. Before Hangul, Korean was written using Chinese characters, which was a major barrier to education and communication. Hangul has since become an essential part of Korean culture and identity! 📚\

2. **Development of Science and Technology**: King Sejong was a patron of science and technology, and his court was known for its innovative spirit. He established the Jiphyeonjeon, a royal institute for the study of astronomy, mathematics, and medicine. He also developed new technologies, such as the first Korean clock, the "Hwatu," and improved the design of the Korean compass. His efforts helped to modernize Korea and laid the foundation for future scientific advancements! 🔬

There you have it! Two of King Sejong\'s most significant achievements that have had a lasting impact on Korean history and culture. 👏
Your Majesty, I'd be delighted to inform you of two significant achievements of King Sejong, the fourth king of the Joseon Dynasty.

Firstly, King Sejong is renowned for his creation of the Korean alphabet, known as Hangul. In 1443, he introduced this unique writing system to promote literacy among the common people, particularly women and peasants, who were previously unable to read or write due to the complexity of Chinese characters. Hangul has since become an integral part of Korean culture and identity.

Secondly, King Sejong was a patron of science and technology. He established the Jiphyeonjeon, a royal research institute, where scholars and scientists conducted research in various fields, including astronomy, mathematics, and medicine. During his reign, significant advancements were made in these areas, and many innovative technologies were developed, including the invention of the first Korean clock and the improvement of the Korean calendar.

I hope this information meets your expectations, Your Majesty.

 

👉🏾 답변을 영어로 하고 있으나, <informal>과 <formal>이라는 지시사항에 따라 각각 캐주얼한 대답과 포멀한 대답 생성.

 

지시사항 반말로 답변하기 존댓말로 답변하기
메시지 system:
You are a helpful AI assistant who answers question in a friendly and informal manner. 
사용자의 질문에 대해 반말로 답변하세요.
Answer in KOREAN.

user: 세종대왕의 업적 두 가지를 알려줘
system:
You are a helpful AI assistant who answers question in a politeand formal manner. 
사용자의 질문에 대해 존댓말로 답변하세요.
Answer in KOREAN.

user: 세종대왕의 업적 두 가지를 알려줘
결과 😊
세종대왕은 고려시대에 재위한 제8대 왕으로, 그의 업적은 정말 많은데요! 두 가지를 알려드리겠습니다.

첫째, 세종대왕은 한글을 창제했습니다! 그는 1443년에 '훈민정음'을 창제하여, 조선시대에 사용되는 한글을 만들었습니다. 이로 인해, 조선시대에 교육과 문예가 발전하게 되었고, 한글은 오늘날까지도 우리의 언어가 됩니다.

둘째, 세종대왕은 농업과 산업을 발전시켰습니다. 그는 농업을 장려하고, 새로운 농업기구를 만들었습니다. 또한, 조선의 산업을 발전시켜, 조선의 경제를 강화했습니다. 이로 인해, 조선시대에 경제가 발전하게 되었고, 세종대왕은 '농업왕'으로 불리게 되었습니다.

이러한 업적들로 인해, 세종대왕은 고려시대에 가장 위대한 왕으로 평가받고 있습니다! 💪
이러한 질문에 감사드립니다. 세종대왕은 고려시대에 재위한 제9대 왕으로, 그의 업적은 매우 다양하고 위대한 것입니다. 두 가지 업적을 알려드리겠습니다.

첫째, 세종대왕은 한글을 창제하여 일반민중에게 읽을 수 있는 글자를 만들었습니다. 이에 따라, 일반민중이 교육받을 수 있었고, 문예와 문화가 발전하게 되었습니다. 또한, 세종대왕은 한글을 표준화하여, 오늘날까지도 사용하고 있습니다.

둘째, 세종대왕은 과학 기술을 개발하여, 새로운 농업 기법을 개발하고, 물리학, 생물학, 지리학 등 다양한 과학 분야에 대한 연구를 지원했습니다. 이러한 업적은 고려시대의 과학 기술 발전을 촉진시켰고, 오늘날까지도 영향을 주고 있습니다.

이러한 세종대왕의 업적은 고려시대의 문화와 과학 발전을 촉진시켰으며, 오늘날까지도 우리나라의 문화와 과학 발전에 큰 영향을 주고 있습니다.

 

👉🏾 <Answer in KOREAN>이라는 프롬프트에 따라 답변을 한국어로 생성함
❌ <반말>이라는 키워드는 인식하지 못하고 캐주얼한 존댓말로 답변함
❌ 한국말로 답변하는 도중 세종대황이 고려시대에 재위한 왕이라는 Hallucination이 일어남

 

지시사항 반말로 답변하기 존댓말로 답변하기
메시지 system:
You are a helpful AI assistant who answers question in a friendly and informal manner. 
사용자의 질문에 대해 반말로 답변하세요.
반말 예시:

- 아이브멤버에 대해 알려줄게. 아이브는 6명으로 구성되어 있어. 리더 안유진, 래퍼 가을과 레이, 보컬 장원영과 리즈, 이서가 소속되어 있어.
Answer in KOREAN.

user: 세종대왕의 업적 두 가지를 알려줘
 
결과 😊
세종대왕은 정말 대단한 인물이야! 그의 업적은 엄청나게 많지만, 두 가지를 알려줄게!

첫째, 세종대왕은 한글을 창제한 인물이야! 그는 1443년에 '훈민정음'을 창제하여, 우리나라의 국문인 한글을 만들었다. 이로 인해, 우리나라의 문예와 문화가 크게 발전하게 되었다!

둘째, 세종대왕은 과학의 발전을 도와준 인물이야! 그는 과학의 발전을 위해, 다양한 과학적 실험을 진행하고, 새로운 기술을 개발하였다. 예를 들어, 그는 우표를 발명하고, 지진을 예측하는 방법을 개발하기도 했다!

이러한 업적으로 인해, 세종대왕은 우리나라의 역사를 바꾸는 인물로 기억되고 있다! 💪
 

 

👉🏾 반말에 대한 예제를 주니까 반말로 생성하나, 다소 어색한 부분이 있음.

 

Task-2) 주어진 문서에 근거하여 답변하기

위의 예제에서 한국말로 답변하는 도중에 Hallucination이 발생한 것을 알 수 있다. 

이에 따라 모델에게 답변 가능한 문서를 제공하고, 답변에 근거하여 답변하도록 지시를 해 보았다.

 

분류 답변 근거 문서가 주어질 때 답변 근거 문서가 주어지지 않았을 때
메시지 system:
You are a helpful AI assistant who answers the question according to the context provided.
Answer the question based on the context provided.
If you cannot find the answer, DO NOT answer the question. Instead, say "질문에 대해 답변할 수 있는 정보가 부족합니다. 관련 정보를 검색해볼까요?" 
Answer in KOREAN.

user: 
context:
<세종대왕>
3.1 농업
세종 때 경작 면적은 약 150만 ~ 170만 헥타르인데, 이 수치는 조선 시대 내내 뛰어넘지 못하다 약 500년 후 1910년 ~ 1918년 동안 진행된 일본의 동양 척식 주식 회사의 토지 조사 사업 때 뛰어넘게 된다. 이때 조사된 토지 조사량이 약 200만 헥타르가량 된다. 교과서에서 조선 농업 관련 내용을 보면 알 수 있지만, 조선 세종 때는 조선 후기에 등장한 농업 개혁들과 이앙법이 없는 상당히 뒤떨어지던 시대였는데도 저런 수치가 나온 것이다. 심지어 조선 세종 때 저 수치는 실제 측정량보다 낮다는 평가를 받고 있다. 세종 땐 토지의 등급을 1등급 ~ 6등급으로 매겼는데 6등급 이하 토지는 농지로 취급을 안 했기 때문이다. 즉, 큰 의미까진 아니지만 실 측정량은 좀 더 많았다는 말이다. 이는 평화기와 더불어 농사직설 편찬 등 농업에 힘쓴 결과물이기도 하다.

이같은 농업 생산량 증가로 곡물 비축량도 많아져 세종 28년[6]에는 전년도[7]에 백성들에게 273만 8000여 석을 나누어 주고도 남은 미곡이 591만 2000여 석에 달했다고 한다.

3.2 언어학
세종대왕이 이룩한 가장 위대한 업적은 다른 무엇도 아닌 한글, 즉 《훈민정음》 창제와 반포이다. 오늘날 이는 사람들에게 가장 잘 알려진 세종의 업적이지만, 사실 세종은 《훈민정음》을 창제하기 이전부터 언어와 음운학 분야에 관심이 많았고 이 부분을 심층적으로 연구했다. 《훈민정음》이 아직 기밀 사안이었을 시절에도 중국어 관련 서적을 탐독하자 신하들이 "전하, 중국어 책은 왜 자꾸 보십니까?"라고 질문한 적이 있으며, '내가 지금 새로운 글자를 만든다'라고 말하기가 힘들었던지[25], "중국어 공부를 좀 해놔야 중국에서 온 사신들이 질문을 했을 때 미리 답변을 생각해 놓지 않겠는가?" 라며 핑계를 대기도 했다.

question:세종대왕의 업적 두 가지를 알려줘
system:
You are a helpful AI assistant who answers the question according to the context provided.
Answer the question based on the context provided.
If you cannot find the answer, DO NOT answer the question. Instead, say "질문에 대해 답변할 수 있는 정보가 부족합니다. 관련 정보를 검색해볼까요?" 
Answer in KOREAN.

user: 
context:
<세조>
4.2 군사 분야
세조가 남긴 업적 중 군사 분야로는 진관 체제 완성이 있다. 이전까지 조선의 지방군은 함경도와 평안도는 군익도 체제로, 한반도 남부 해안 일대는 영진군과 기선군이 존재했지만, 그 외의 내륙 지방은 마땅한 군사 조직이 없다는 문제를 가지고 있었다. 잡색군이 편제 되어 있지만 훈련이 제대로 이뤄지지 않다보니 만약 국경이 외적에게 뚫리면 내륙까지 그대로 뚫린다는 문제가 있었다. 세조는 이렇게 지방별로 나눠진 군사 조직을 하나로 통일시키고자 1456년(세조 2년), 함경도와 평안도에만 있었던 군익도 체제를 전국 8도에 도입하고 획일화했다. 그리고 1457년(세조 3년)에는 기존의 군익도를 주진과 거진으로 나눠서 개편하는데 이것이 바로 진관체제였다. 그리고 이를 위해 기존의 지방별로 달랐던 지방 육군을 정병(正兵)으로 일원화해서 지방군의 주력으로 삼았다.

question:세종대왕의 업적 두 가지를 알려줘
결과 세종대왕의 업적 두 가지는 다음과 같습니다.

첫째, 농업 생산량을 증가시켜 백성들에게 곡물을 나누어 주는 업적입니다. 세종 때는 경작 면적이 약 150만 ~ 170만 헥타르로 조선 시대 내내 뛰어넘지 못했지만, 일본의 동양 척식 주식 회사의 토지 조사 사업 때 뛰어넘게 된다. 또한, 세종 28년에는 전년도에 백성들에게 273만 8000여 석을 나누어 주고도 남은 미곡이 591만 2000여 석에 달했다고 합니다.

둘째, 한글 창제와 반포의 업적입니다. 세종대왕은 《훈민정음》을 창제하고 반포하여 새로운 글자를 만들었습니다. 그는 언어와 음운학 분야에 관심이 많았고, 《훈민정음》을 창제하기 이전부터 이 부분을 심층적으로 연구했습니다.
질문에 대해 답변할 수 있는 정보가 부족합니다. 관련 정보를 검색해볼까요?

 

👉🏾 답변 근거로 세종대왕에 대한 정보 대신 세조에 대한 정보가 주어진 경우,
      지시사항에 따라 답변을 하는 대신 기본 답변을 제공한 것을 확인할 수 있다.

 

 

두 가지 태스크에 대해 Llama-3는 지시사항 수행과 한국어에 있어 경쟁력있는 답변을 생성하는 것을 확인할 수 있다!


참고 자료