[Model Review] Llama3

nebchi·2024년 7월 18일

Llama3

  • Meta에서 4월 18일 최첨단 LLM 모델 Llama3를 발표 했습니다.
  • 모델의 파리미터는 8B, 70B으로 이번에도 10~20B 사이의 모델도 기대를 했었는데, 이 부분에서는 좀 아쉬웠습니다.
  • 향후에는 405B 모델도 공개한다고 하는데, 이제는 오픈소스 LLM도 Gpt, Cluade, Gemini와 같은 폐쇠형 모델과 비슷한 성능을 발휘 할 날이 얼마 안 남은 거 같습니다.

학습 데이터 및 데이터 필터링

  • 공개적으로 사용 가능한 소스에서 수집된 15조 이상의 토큰을 사용하여 사전학습을 진행하였는데, 이전 2조 토큰보다 약 7배 더 많이 학습했습니다.
  • 30개국의 비영어권 언어에 대해서도 5%이상 고품질 사전 학습 데이터를 구성하였습니다.
  • 고품질 데이터를 위해 휴리스틱 필터, NSFW 필터, 의미적 중복 제거 접근 방식을 사용하였습니다
  • Instruction-Tuning에서는 SFT, PPO, DPO 방식을 사용하였고, 10M(1000만개)이상의 예제를 사용하였습니다.

모델 아키텍처

  • 기존 Llama2에서 7B에서는 GQA을 적용하지 않았는데, Llama3에서는 8B, 70B에 GQA을 적용하였습니다.
  • Llama3는 이전 Llama2에서 달라진 점은 우선, vocab_size 입니다. vocab_size가 32,000 -> 128,256개로 많이 증가하였고, 이를 통해 비영어권 언어에 대해서도 효율적인 학습이 가능해졌습니다. 그래서 Llama2에서 진행한 토크나이저 확장 및 임베딩 초기화 과정을 생략해도 될 거 같습니다.
  • model의 sequence length 또한 4096 -> 8192로 텍스트 처리 길이 또한 2배 증가하였습니다.

BenchMark

  • 해당 벤치마크를 보면, 70B의 경우 gemini와 Claude를 상회하는 능력으로, 이제는 점차 Open LLM 모델도 폐쇠형 모델과 성능이 비슷해지고 있습니다.

Llama3 사용해보기

사용한 패키지 버전

  • flash_attn == 2.5.9.post1
  • accelerate == 0.30.1
  • sentencepiece == 0.2.0
  • torch == 2.3.0
  • transformers == 4.42.3
# 한국어로 사전학습된 Llama3를 사용 하였습니다.
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline, TextStreamer
import torch

tokenizer = AutoTokenizer.from_pretrained(
    "nebchi/Llama3-Chat_Vector-kor",
)

model = AutoModelForCausalLM.from_pretrained(
    "nebchi/Llama3-Chat_Vector-kor",
    torch_dtype=torch.bfloat16,
    device_map='auto',
)
streamer = TextStreamer(tokenizer)

messages = [
    {"role": "system", "content": "당신은 인공지능 어시스턴트입니다. 묻는 말에 친절하고 정확하게 답변하세요."},
    {"role": "user", "content": "대한민국의 수도에 대해 알려줘"},
]

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=False,
    repetition_penalty=1.05,
    streamer = streamer
)
response = outputs[0][input_ids.shape[-1]:]
print(tokenizer.decode(response, skip_special_tokens=True))

# 결과
대한민국의 수도는 서울특별시입니다.
서울특별시에는 청와대, 국회의사당, 대법원 등 대한민국의 주요 정부기관이 위치해 있습니다.
또한 서울시는 대한민국의 경제, 문화, 교육, 교통의 중심지로써 대한민국의 수도이자 대표 도시입니다.제가 도움이 되었길 바랍니다. 더 궁금한 점이 있으시면 언제든지 물어보세요!
profile
NLP Developer

0개의 댓글