본문 바로가기

AI 소식/오픈소스 AI 모델

[오픈 소스 AI] [로컬 환경] GPT-4o에 필적하는 메타의 새로운 AI 모델, Llama 3.1을 소개합니다.

안녕하세요,

최근 AI 분야에서는 OpenAI의 GPT-4o의 뛰어난 성능으로 큰 화제를 모았습니다. 그런데 메타(Meta)에서 이에 필적하는 성능을 지닌 새로운 AI 모델, Llama 3.1을 출시하며 많은 사람들을 놀라게 했습니다. Llama 3.1은 GPT-4o와 거의 비슷한 성능을 자랑할 뿐만 아니라, 텍스트 생성, 번역, 문서 요약 등 다양한 작업에서 높은 효율성을 보이며 더욱 주목받고 있습니다. 특히, 이 모델은 오픈 소스로 공개되어 연구자와 개발자들이 AI 기술을 보다 자유롭게 활용하고 발전시킬 수 있는 기회를 제공합니다. GPT-4o에 맞먹는 성능을 갖춘 Llama 3.1, 지금부터 그 매력에 대해 자세히 알아보겠습니다!

 


반응형

 

Llama 3.1이란

Llama 3.1Meta가 개발한 최신의 대형 언어 모델(LLM)로, 이전 버전인 Llama 2에서 성능과 효율성을 크게 향상시킨 버전입니다. Llama 3.1은 다양한 자연어 처리(NLP) 작업에서 더 뛰어난 성능을 제공하며, 연구자와 개발자가 더 나은 AI 기반 솔루션을 구축할 수 있도록 설계되었습니다.

 

Meta의 모델 평가 정보에 따르면, Llama 3.1 405B 모델은 GPT-4Omni, Claude 3.5 Sonnet와 거의 비슷하거나 어떤 부분에서는 더 뛰어난 성능을 나타내기도 했습니다. 특히, 텍스트 생성과 이해, 번역, 문서 요약 등에서 탁월한 결과를 보였으며, 효율적인 학습과 추론을 가능하게 하는 최신 알고리즘이 적용되었습니다. 이러한 모델이 오픈 소스로 공개된 점이 굉장히 놀라웠으며, 이는 AI 커뮤니티와 연구자들이 폭넓게 활용할 수 있는 기회를 제공합니다.

 

출처: Meta Llama 3.1 blog

 

 

목차

1. Llama 3.1 특징
2. 배포 및 사용
3. 실행 환경
4. Llama 3.1 8B
5. Llama 3.1 8B 모델 종류
6. Llama 3.1 8B 설치
7. 코드 작성
8. Llama 3.1 8B 실행

 

 

1. Llama 3.1 특징

  • 향상된 성능: Llama 3.1은 이전 버전인 Llama 2에 비해 다양한 벤치마크에서 더 나은 성능을 보여줍니다. 이는 특히 언어 이해, 생성, 번역, 요약 등의 자연어 처리 작업에서 두드러집니다.
  • 효율적인 학습과 추론: Llama 3.1은 최신 알고리즘 최적화 기법을 도입하여 학습과 추론 속도를 대폭 개선했습니다. 이를 통해 동일한 하드웨어 리소스에서도 더 빠르고 효율적으로 모델을 운영할 수 있습니다.
  • 개선된 미세 조정(Fine-Tuning) 가능성: 이 모델은 사용자 지정 작업을 위한 미세 조정이 용이하도록 설계되었습니다. 이를 통해 특정 도메인이나 응용 프로그램에 최적화된 모델을 쉽게 개발할 수 있습니다.
  • 더 나은 제어와 안전성: Llama 3.1은 사용자가 더 나은 제어를 할 수 있도록 하는 기능을 갖추고 있으며, 동시에 AI 윤리 및 안전성에 대한 개선 사항이 포함되어 있습니다. 이는 편향이나 부정확한 정보 생성 등을 줄이기 위한 추가적인 필터링 및 제어 메커니즘을 통해 구현되었습니다.
  • 커뮤니티와의 협력 강화: Meta는 Llama 3.1을 커뮤니티 중심의 접근 방식으로 배포하여, 연구자와 개발자들이 다양한 활용 사례와 솔루션을 개발할 수 있도록 장려합니다. 이를 위해 Meta는 Llama 3.1의 모델과 관련된 리소스들을 무료로 제공하고, 오픈 소스 커뮤니티와 협력하고 있습니다.

 

 

2. 배포 및 사용

Llama 3.1은 Meta의 웹사이트를 통해 모델 코드, 학습된 가중치, 추론을 위한 코드, 훈련 및 미세 조정을 위한 코드 등과 함께 제공됩니다. 이를 통해 사용자는 Llama 3.1을 연구 목적뿐만 아니라 상업적 목적으로도 활용할 수 있습니다. 다만, 제품이나 서비스의 월간 활성 사용자 수가 7억 명을 초과하는 경우에는 Meta로부터 추가 라이선스를 받아야 합니다. 자세한 라이선스 정보는 아래 링크에서 확인할 수 있습니다.

 

현재 허깅페이스에서는 Llama 3.1 모델이 학습된 파라미터 크기에 따라 8B, 70B, 405B의 세 가지 버전으로 오픈 소스로 공개되어 있습니다. 관심 있는 분들은 아래 링크를 통해 다운로드할 수 있습니다. Llama 3.1을 사용하려면 라이선스를 수락하고 모델에 액세스할 수 있는 권한을 요청해야 합니다. Meta 공식 홈페이지와 허깅페이스 모두에서 이 절차를 지원하며, 저의 경우 하루 정도 기다리니 승인이 완료되었습니다. 아래는 Meta 공식 홈페이지와 Meta 허깅페이스 링크입니다.

Meta 공식 홈페이지 & 허깅페이스

 

 

3. 실행 환경

  • 운영체제 : Window 11
  • python : 3.10.14
  • transformers : 4.44.2
  • packaging : 24.1
  • GPU: NVIDIA GeForce RTX 4060 Ti

 


728x90

 

4. Llama 3.1 8B

이번 포스팅에서는 "Llama 3.1 8B"를 설치하고 사용해보도록 하겠습니다. "Llama 3.1 8B" 모델은 작은 크기에도 불구하고 여러 벤치마크에서 준수한 성능을 보여줍니다. 예를 들어, MMLU(0-shot, CoT)에서 73.0점, HumanEval(0-shot)에서 72.6점, ARC Challenge(0-shot, CoT)에서는 83.4점을 기록해 다양한 작업에서 뛰어난 결과를 냈습니다. 수학 문제 해결 성능을 평가하는 GSM8K(8-shot, CoT)에서도 84.5점을 기록하며 강력한 성능을 입증했습니다.

 

이처럼 "Llama 3.1 8B" 모델은 적은 자원으로도 다양한 자연어 처리 및 코드 생성 작업에서 좋은 성과를 낼 수 있는 효율적인 선택입니다. 이제, 이 모델을 설치하고 직접 테스트해보겠습니다. Meta 허깅페이스에 접속하시면 "Llama 3.1 8B" 모델이 4가지 정도 있습니다. 해당 모델은 사용 목적에 따라 조금씩 다른 버전으로 보시면 됩니다.

 

 

5. Llama 3.1 8B 모델 종류

Meta의 허깅페이스 페이지에 접속하면 Llama 3.1 8B 모델도 다양한 버전이 제공되고 있습니다. 각 버전은 사용 목적에 따라 파인튜닝된 모델들입니다. 각 모델에 대한 설명은 아래와 같습니다.

 

 

  • Llama-3.1-8B: 기본 Llama 3.1 모델입니다. 일반적인 텍스트 생성 작업을 위해 훈련된 버전으로, 자유롭게 다양한 텍스트를 생성할 수 있는 능력을 갖추고 있습니다. 이 모델은 특정 작업 지침 없이 광범위한 자연어 처리 작업에 사용됩니다.
  • Llama-3.1-8B-Instruct: "Instruct" 모델은 사용자의 명령(Instruction)이나 질문에 맞춰 보다 구체적이고 지시적인 답변을 제공하도록 추가 훈련된 버전입니다. 이러한 유형의 모델은 "Instruction Tuning"이라는 과정을 통해 개발되며, 사용자가 제공하는 지시에 더 적합한 응답을 생성할 수 있도록 최적화되어 있습니다.
  • Llama-3.1-8B-evals: 이 버전은 모델의 성능 평가 결과를 포함한 데이터셋입니다. "evals"는 Llama-3.1-8B 모델이 다양한 벤치마크와 테스트를 통해 어떤 성능을 보였는지에 대한 상세한 평가 결과를 제공합니다. 연구자나 개발자가 모델의 성능을 이해하고 비교할 때 유용합니다.
  • Llama-3.1-8B-Instruct-evals: "Instruct-evals"는 Llama-3.1-8B-Instruct 모델의 성능 평가 결과를 포함합니다. Instruct 모델이 다양한 지침 기반 작업에서 어떻게 성능을 발휘하는지에 대한 평가 데이터를 제공합니다. 이를 통해 사용자는 Instruct 모델이 특정 지시 사항이나 질문에 얼마나 잘 반응하는지 파악할 수 있습니다.

 

 

6. Llama 3.1 8B 설치

이번 포스팅에서는 "Llama-3.1-8B-Instruct" 모델을 설치하고 사용해보도록 하겠습니다. Meta의 허깅페이스에서 해당 모델을 다운받겠습니다.

출처: Meta Llama-3.1-8B-Instruct 허깅페이스

 

 

7. 코드 작성

"Llama-3.1-8B-Instruct" 모델을 실행하기 위한 코드를 Python 언어로 작성했습니다. 아래 코드는 Meta에서 제공하는 가이드를 참고하여 작성되었으며, 원하는 경로에 저장하면 됩니다.

# Python code

from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline

# 모델 및 토크나이저 로드
model_url = "E:/ai_model/Llama3.1-8B-Instruct" # 허깅페이스에서 다운받은 Llama3.1-8B-Instruct 파일 경로

# Hugging Face의 AutoTokenizer와 AutoModelForCausalLM을 사용하여 모델과 토크나이저를 로드
tokenizer = AutoTokenizer.from_pretrained(model_url)
model = AutoModelForCausalLM.from_pretrained(
    model_url,
    torch_dtype="auto",  # 모델의 데이터 타입을 자동으로 설정 (GPU가 있는 경우 FP16, 없는 경우 FP32)
    device_map="auto"    # 사용 가능한 장치(GPU 또는 CPU)에 모델을 자동으로 할당
)

# 텍스트 생성 파이프라인 설정
text_generation_pipeline = pipeline(
    "text-generation",
    model=model,
    tokenizer=tokenizer,
    max_new_tokens=100,  # 모델이 생성할 새 토큰의 최대 개수 설정
    min_new_tokens=10,  # 모델이 생성할 새 토큰의 최소 개수 설정
    do_sample=True,     # 샘플링 활성화 (더 다양한 출력을 생성하기 위해)
    top_p=0.9,          # Nucleus sampling (상위 p 확률에 포함된 단어만 샘플링)
    temperature=0.5,    # 생성 다양성을 위한 온도 조절 (낮을수록 덜 랜덤)
    no_repeat_ngram_size=2  # 반복 방지 설정
)

# Llama 3.1 모델 프롬프트 형식에 맞춰 시스템 메시지와 사용자 메시지 설정
def format_prompt(question):
    # Llama 3.1 모델의 대화형 프롬프트 형식
    system_message = "You are a helpful AI assistant. Provide a short and accurate answer to the question."
    user_message = f"[USER]: {question}\n"
    ai_message = "[AI]:"
    
    # 전체 프롬프트 생성
    full_prompt = f"{system_message}\n\n{user_message}{ai_message}"
    return full_prompt

def ask_question(question):
    # 질문을 프롬프트 형식으로 변환
    prompt = format_prompt(question)
    
    # 모델에 프롬프트를 입력하여 답변 생성
    result = text_generation_pipeline(prompt)
    full_answer = result[0]['generated_text']

    # AI의 응답만 추출하도록 후처리
    answer = full_answer.split("[AI]:")[-1].strip()  # [AI]: 이후의 텍스트 추출

    # 문장이 잘리지 않도록 문장 끝 문장부호 이후로 자르기
    if '.' in answer:
        answer = answer.split('.')[0] + '.'
    elif '!' in answer:
        answer = answer.split('!')[0] + '!'
    elif '?' in answer:
        answer = answer.split('?')[0] + '?'

    return answer

# 예제 질문
if __name__ == "__main__":
    question = "한국의 수도는 어디야?"
    answer = ask_question(question)
    print(f"Question: {question}\nAnswer: {answer}")

 

참고 내용

 

VS Code 편집기를 사용해 "main.py" 파일을 작성했으며, 사용 편의를 위해 해당 코드를 "Llama-3.1-8B-Instruct" 모델 파일이 있는 경로에 저장했습니다.

"Llama-3.1-8B-Instruct" 모델 코드 작성 및 저장위치

 

 

8. Llama 3.1 8B 실행

이제 "Llama-3.1-8B-Instruct" 모델을 실행해보겠습니다. 질문은 "한국의 수도는 어디야?"로 간단하게 설정했습니다. 그런 다음, 위에서 작성했던 main.py 코드를 실행합니다.

 

"Llama-3.1-8B-Instruct" 모델 답변

 

위 결과 이미지에서 보시는 것처럼, "Answer: 서울입니다."라는 답변을 받을 수 있었습니다. 이를 통해 "Llama-3.1-8B-Instruct" 모델을 로컬 환경에 다운로드하고 실행하는 과정을 완료했습니다.

 


 

이번 포스팅에서는 Llama-3.1-8B 모델을 로컬 환경에 다운로드하여 간단하게 실행해보았습니다. 작은 모델임에도 불구하고, GPU 성능의 문제 때문인지 간단한 질문과 답변을 수행하는 데 시간이 조금 소요되었습니다. 또한, 모델을 실행하는 코드 역시 좀 더 다듬어야 할 필요가 있어 보입니다. 예를 들어, 간단한 질문조차도 제대로 이해하지 못하고 엉뚱한 답변을 생성하는 경우가 있었습니다.

 

이러한 점들을 개선하기 위해, 다음 포스팅에서는 Llama-3.1-8B 모델을 LangChain을 활용하여 더 효율적이고 정확하게 실행하는 방법에 대해 알아보겠습니다. LangChain을 사용하면 모델의 응답을 더 정교하게 제어할 수 있고, 다양한 애플리케이션에 쉽게 통합할 수 있습니다. 기대해 주세요!

 

 

긴 글 읽어주셔서 감사합니다. 😊