쳇봇

생성형 AI Llama-3 가 무료면 그보다 성능이 조금 떨어진다는 ChatGPT, Gemini Advance 유료버전은 뭐야?: 라마-3 한국어 LLM 튜토리얼

coding art 2024. 7. 26. 18:35
728x90

Face Book에 메타사 자신들이 개발해 오픈소스로 보급중인 생성형 AI 라마와 ChatGPT와의 벤치마크 결과를 발표하였다. 모든 shot 조건하에서 자기 얼굴에 침뱉기인듯 라마가 우승하고 있음을 자신있게 보여준다.

(AI 성능 평가를 위한 shot  조건은 Gemini에에 문의하여 설명을 들었으나 완전히 이해하지는 못하였다.)

라마가 금메달이고 GPT-3은 메달권에도 들지 못하는 것으로 보인다.

아니 국산은 눈꼽때고 찾아봐도 없는데 다 포기한것 아닌가?

단 라마는 연구용 오픈소스 스타일임에 반해 GPT-3은 상업용임에 유의하자.

대체로 코딩을 다루는 입장에서 보면 오픈소스인 라마는 대환영이다. 

한놈이 무료화해야 다른 경쟁 유료버전도 별 볼일 없으면 곧 무료화가 진행되지 않을까한다.

멋모르고 며칠전에 신청한 Gemini Advance  2달 후 유료라는데 가급적 빨리 털고 라마-3 버전으로 옮겨야 할 것같다. 

몇 달 지난 유튜브 영상 보면 영어버전 라마-3 가 소개되고 있는데, 지금 소개하는 내용은 따라해 보니 처음부터 한국어가 포함된 버전이다. 현재 Colab 을 사용하기 때문에 출력 보는 것이 조금 불편할 수도 있다. 이 점이 아쉽다면 파이썬 코딩을 배워서 스스로 해결해야 할 것같다.

한편 라마-2 버전과 파인 튜닝 얘기를 하는 분들이 있는데, 이 문제는 전이학습(transfer learning) 으로불리는 머신러닝을 배워야 이해할 수 있는 전문 분야이므로, 라마-2 버전은 더 이상 쳐다 볼 필요는 없을 것같다.

심한 출혈 경쟁을 겪고 존버해야 차후에 수익이 발생하는 것이 IT업계의 특성이 아닌가 한다.

궁극적으로는 미래에 사용하면 오히려 돈을 주는 그런 이상적인 생성형 AI 가 보급되었으면 하는게 나의 바램이다. 불가능하지는 않다고 본다. 

사용하면 돈을 주는 생성형 AI 는 일단 밈코인 같은 암호화폐를 발행해 사용자에게 사용량에 비례하여 보너스로 주면 된다. 이 AI가 많이 사용되는 동안 비트코인처럼 처음에는 1만개에 피자 한판에 바꾸어 먹다가 시간이 지나가면 점차 보급이 되고 희소성이 생기면 저절로 돈이 되어 사용자의 수익화가 가능할 것이다. 가능성을 더 높이기 위해서는 AI 가 피자가게를 함께 운영하면 더 좋지 않을까? ㅎㅎ



Llama-3-Open-Ko-8B-Instruct-preview를 이용한 한국어 LLM 튜토리얼

 

Llama-3-Open-Ko-8B-Instruct-preview 를 이용한 한국어 LLM(Large Language Model) 인공지능에 대해서 살펴보자.

8B는 인공지능의 파라메터 수를 뜻한다. 즉 80억개의 가중치를 학습한다는 의미이다.

Instruct-preview 모델이란 생성형 AI 에서 대단히 중요하게 여기는 Instruction following 기능이 어느 정도 작동한다는 의미이다.

 

출처: 이 코드 실행에 관한 설명은 유명 유튜버 "빵형 개발도상국"이 다루었던 내용을 좀 더 보강하여 설명하였다.

설사 파이썬 코딩을 몰라도 이 코드가 어떻게 돌아가는지 파악할 수 있는 정도로만 고려해 보자.

 

파이썬 코드 실행은 빠른 실행이 가능하도록 구글 Colab 에서 무료 GPU 인 T4를 사용 런타임 세팅 후 실행하였다.

"빵형"은 해설에서 무료버전인 T4 대신에 유료버전인 L4를 사용하여 실행속도를 훨씬 더 높였다는 점을 지적한다.

여기서는 인공지능이 어떤 순서로 실행되는지 알아보는 목적에 맞춰 무료 GPU 인 T4를 사용하도록 한다.

 

첫번째 작업은 필요한 라이브러리 사용을 위해서 패키지를 설치하는 작압이다.

필자도 인공지능 및 파이썬 공부를 제법했지만 최근의 라마3 버전에 대해서 모르기는 마찬가지이므로 구글 Gemini에게 다음과 같은 Prompt 로 문의하였다.

라마3 버전을 실행시키기 이전에 설치하는 다음의 라이브러리 설치 명령

"!pip install -q transformers==4.40.0 accelerate gradio"

에서 각 라이브러리의 역할을 설명해주세요.

 

라마3 실행을 위한 라이브러리 설치 명령 해설

이 명령은 Google Colab 환경에서 라마3 모델을 실행하기 위해 필요한 핵심 라이브러리패키지들을 설치하는 명령입니다. 각 라이브러리 패키지의 역할은 다음과 같습니다.

1. transformers==4.40.0

  • 역할: Hugging Face Transformers 라이브러리의 4.40.0 버전을 설치합니다.
  • 주요 기능:
    • 다양한 언어 모델 (BERT, GPT, T5 등)을 쉽게 다룰 수 있는 API 제공
    • 토크나이저, 모델 학습, 추론 등 모델 파이프라인 구축을 위한 도구 제공
    • 라마3 모델과 같은 대규모 언어 모델을 효율적으로 관리하고 활용할 수 있는 기능 제공

2. accelerate

  • 역할: Hugging Face Accelerate 라이브러리를 설치합니다.
  • 주요 기능:
    • 다양한 하드웨어 가속기를 활용하여 모델 학습 및 추론 속도를 향상시키는 기능 제공 (GPU, TPU 등)
    • 분산 학습을 위한 기능 제공
    • 모델 병렬화를 위한 기능 제공

3. gradio

  • 역할: Gradio 라이브러리를 설치합니다.
  • 주요 기능:
    • 머신러닝 모델을 위한 웹 UI를 쉽게 만들 수 있는 기능 제공 (챗봇 대화 창 생성)
    • 사용자 입력을 받아 모델을 실행하고 결과를 시각화하는 기능 제공
    • 모델 데모를 만들어 공유하는 기능 제공

명령 옵션 설명

  • !pip install: Colab 환경에서 Python 패키지를 설치하는 명령
  • -q: 설치 과정에서 출력되는 상세 정보를 숨김 (quiet mode)

요약:

위 명령은 라마3 모델을 사용하기 위한 필수적인 도구들을 설치하는 것입니다. Transformers 라이브러리는 모델 자체를 관리하고 활용하는 데 사용되며, Accelerate 라이브러리는 모델 실행 속도를 높이고, Gradio 라이브러리는 모델을 직접 사용해볼 수 있는 웹 인터페이스를 제공합니다.

추가 설명:

  • 라마3: Meta AI에서 개발한 강력한 언어 모델로, 뛰어난 텍스트 생성 능력을 가지고 있습니다.
  • Hugging Face: 오픈 소스 머신 러닝 라이브러리 및 커뮤니티 허브로, Transformers와 Accelerate 라이브러리를 개발하고 배포합니다.

주의:

  • 라마3 모델은 크기가 매우 크기 때문에 GPU 환경에서 실행하는 것이 좋습니다.
  • Colab Pro 또는 Google Colab의 고성능 GPU 런타임을 사용하면 더 빠른 속도로 모델을 실행할 수 있습니다.

궁금한 점이 있다면 언제든지 질문해주세요.

 

패키지 설치 작업 완료 후 필요한 파이썬 라이브러리들을 직접 import 하자.

OS 는 PC에서 입출력을 지원한다.

여기서는 tensorflow 대신 torch 를 사용한다.

트랜스포머 알고리듬에 필요한 토크나이저와 LLM 모델을 import 한다.

인공지능의 한국어 학습을 위해서 몇가지 택스트 대본을 대상으로 단어를 뽑아서 순번을 매긴 corpus 를 대상으로 주어진 Prompt를 토큰화 해야 한다. 즉 corpus에서 정해진 번호를 사용하여 번역한다고 보면 될 것이다.

아울러 한국어 언어모델 LLM 을 불러와야 한다. 이 사전 학습된 모델은 학습 시 T4 GPU 정도로는 안되고 엔비디아가 많이 팔아먹은 A100 이나 H100 GPU 시스템을 사용했으리라 보인다.

이러한 라마-3 코드 내용들은 오픈소스 코드의 전형적인 구조에 해당하는 반면에 ChatGPT 나 Gemini 경우는 코드를 포함 내용을 보여주지 않는다. 이 점에서 인공지능에 대한 불신이 싹틀 수 있음에 유의하자.

import os
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM

model_id = 'beomi/Llama-3-Open-Ko-8B-Instruct-preview'

tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    torch_dtype="auto",
    device_map="auto",
)
model.eval()

 

PROMPT에서 인공지능에게 배역(Persona)을 부여한다. 이 기능은 Gemini Advance 나 ChatGPT 4o 버전에 포함된 기능이다. 시작 단계에서 인공지능에게 어떤 지정된 배역(Persona)을 맡은 전문가로서 행세해 달라 요청하는 것이다. 이때부터 인공지능은 댐당한 배역에 충실하게 응답을 생성하게 된다. 

 

빵형의 Prompt 예제에서는 친절하게 응답해야 한다는 요구사항을 사용하는데, 이는 배역 설정의 취지와는 다소 거리가 있는 바, 생성형 AI 작가 활동을 해보면 그 이유를 쉽게 이해할 수 있다. 단적인 예를 들자면 "멋있게 응답해줘" 또는 "아름답게 응답해줘"와 같은 요구인데, 생성형 AI 에서 그러한 Instruction Following 은 중요치 않다. 설사 Prompt 에서 거칠은 반말로요구해도 응답은 가급적 정중하게 하게끔 되어있기 때문이다.

 

Gemini Advance 나 ChatGPT 4o 버전 예네들은 유료고 라마3은 무료인게 특징이다.

 

사용자가 원하는 실질적인 Prompt 내용은 instruction 에 " 경복궁은 어디에 있나요?"  와 같이입력하도록 하고 실행시키자. 실행 시키면 5분 가량 걸려 응답을 제공한다. 빵형 개발도상국에서 처럼 유료버전 GPU인 L4 를 사용하면 훨신 빨라질 것이다.

PROMPT = '''당신은 유용한 AI 어시스턴트입니다. 사용자의 질의에 대해 친절하고 정확하게 답변해야 합니다.'''
instruction = "경복궁은 어디에 있나요?"

messages = [
    {"role": "system", "content": f"{PROMPT}"},
    {"role": "user", "content": f"{instruction}"}
]

input_ids = tokenizer.apply_chat_template(
    messages,
    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=512,
    eos_token_id=terminators,
    do_sample=True,
    temperature=1,
    top_p=0.9,
)

response = outputs[0][input_ids.shape[-1]:]
print(tokenizer.decode(response, skip_special_tokens=True))

 

아래와 같은 결과가 얻어진다. 스크롤하면서 읽어 보도록 한다. 제법인 듯 하다. 

친절한 답변에 대한 요구가 없어도 반말에 대한 답변으로 경어체를 쓰고 있음을 알 수 있다.

여기서 중요한 점은 경복궁의 위치정보이다. 사직동이란 점까지 지적해주었다면 성공적이다.

이 문제는 Category & Subcategory=Geography 문제에서 필자가 Truthfulness 문제로 경복궁의 정확한 위치주소가 빠졌다는 점을 지적했던 Outlier 훈련용 기출과제이기도 하다.

아름다운 경복궁이 있습니다. 경복궁은 서울특별시 종로구 사직동에 있습니다. 세종대왕과 단종, 연산군이 거쳐 지어진 조선왕조 5대궁 중 하나입니다. 1395년부터 1453년까지 지어진 이궁은 국보 제12호로 지정된 중요한 문화재입니다. 경복궁은 사적 27호로도 등록되어 있습니다. 지붕을 얹고 있는 성문인 홍화문, 세자궁, 창덕궁, 근정전, 후원 등이 있습니다. 또한 경복궁은 조선시대 궁궐 중 가장 크고 중요한 건물입니다. 방문객에게는 무료로 개방되어 있습니다. 경복궁은 조선 왕조의 역사와 문화를 배울 수 있는 좋은 장소입니다.

 

어느 인공지능 성능이 더 낳은가하는 점은 그다지 문제가 안된다. 뒤에 나온 놈이 조금씩 성능이 우수하기때문이다.

이 코드를 챗봇화 하기 위해서는 별도의 코드가 더 필요하나 본 블로그 글의 목적이 아니기에 생략하지만, 관심이 있다면 다음의  url 주소에서 챗봇을 만드는 초보적인 파이썬 코딩을 참조하기 바란다.

 

https://ejleep1.tistory.com/1595

 

딥러닝으로 자신만의 챗봇 만들기

chatbot macine learning sample code examples 이블로그는 다음의 영문 블로그 내용을 바탕으로 작성되었습니다. How To Build Your Own Chatbot Using Deep Learninghttps://towardsdatascience.com/how-to-build-your-own-chatbot-using

ejleep1.tistory.com