Run Llama Locally: 최소한의 의존성으로 Llama 모델을 실행하고 내부 구조를 살펴볼 수 있도록 하는 프로젝트

Run Llama Locally 프로젝트 소개

Run Llama Locally 프로젝트는 Meta에서 공개한 대규모 언어 모델(LLM)인 Llama 모델을 개인이 직접 실행해보며 모델의 구조와 동작을 살펴볼 수 있도록 하는 것을 목표로 합니다. 기존의 Ollama나 Hugging Face에서 제공하는 모델이나 API를 활용하는 경우, 쉽게 실행하고 사용할 수는 있지만 모델이 어떻게 동작하는지에 대한 핵심 세부 사항을 숨기기 때문에 모델의 내부 작동 방식을 이해하기 어렵습니다.

이 프로젝트를 시작한 개발자(:github: anordin95는 Llama 모델의 구조와 동작을 보다 투명하게 탐구하기 위해 이 프로젝트를 개발하고 공개하였습니다. 파이토치(torch)와 일부 최소한의 의존성만으로 실행하며, Meta가 공개한 가중치를 사용할 수 있습니다. 또한, 사용 가능한 GPU가 있다면 이를 통해 더 나은 성능을 발휘할 수 있습니다.

프로젝트 설치

Llama 모델을 로컬에서 실행하기 위해 다음 단계를 따르세요:

  1. 모델 가중치를 Llama Downloads에서 다운로드해둡니다.

  2. 이 프로젝트를 GitHub 저장소에서 복제(clone)합니다:

    git clone https://github.com/anordin95/run-llama-locally
    cd run-llama-locally
    
  3. 필요한 의존성 라이브러리들을 설치합니다:

    pip install -r requirements.txt
    
  4. llama-models 패키지를 설치합니다:

    cd llama-models; pip install -e .; cd ..
    
  5. run_inference.py 또는 minimal_run_inference.py 중 하나를 실행하여 추론을 수행합니다:

    python minimal_run_inference.py
    ## 또는
    python run_inference.py
    

각 추론 스크립트의 동작은 다음과 같습니다:

  • minimal_run_inference.py: Llama 모델을 실행하는 최소한의 코드만 포함한 간단한 스크립트입니다. 이 스크립트는 모델을 처음 학습하는 사람이나 모델을 탐구하려는 사람에게 좋은 출발점입니다.

  • run_inference.py: 빔 서치(Beam-Search)를 비롯한 더 많은 설명이 포함된 복잡한 버전입니다. 모델의 작동 방식을 더 깊이 이해하고자 하는 사람에게 유용합니다.

minimal_run_inference.py는 최소한의 코드로 Llama 모델을 실행하도록 하였기 때문에, 이해가 어려운 부분이 있다면 좀 더 상세한 주석과 코드로 구성된 run_inference.py를 참고해주세요.


또한, run_inference.py 스크립트에는 설정에 맞게 수정해야 할 몇 가지 전역 변수가 있습니다:

  • MODEL_NAME: 사용하고자 하는 모델의 이름입니다.
  • LLAMA_MODELS_DIR: 모델 가중치가 저장된 디렉토리 경로입니다.
  • INPUT_STRING: 모델이 처리할 입력 텍스트입니다.
  • DEVICE: 모델을 실행할 하드웨어 장치입니다(예: CPU, GPU).

각 매개변수에 대한 설명과 예시는 해당 Python 스크립트에 포함되어 있습니다.

기술 개요

의존성

Llama 모델을 실행하기 위한 최소한의 의존성은 다음과 같습니다:

  • torch: 머신러닝 모델을 실행하는 데 필요한 핵심 라이브러리.
  • fairscale: Meta에서 제공하는 라이브러리로, torch와 유사한 대규모 병렬 연산을 수행합니다.
  • blobfile: Meta의 토크나이저(Tokenzier) 구현에서 사용하는 파일 입출력(I/O) 라이브러리입니다.

Meta는 모델 가중치를 제공하지만, 모델 아키텍처는 llama-models 저장소에서 제공되며, 이는 torchfairscale을 필요로 합니다. 이 모델은 torch.distributedfairscale의 올바른 초기화가 필요합니다.

빔 서치(Beam-search)

빔 서치는 각 단계에서 가장 가능성이 높은 토큰을 선택하는 대신, k개의 가장 가능성이 높은 토큰을 추적하며 각 토큰에 기반한 시퀀스를 확장합니다. 최종적으로 가장 가능성이 높은 시퀀스가 선택됩니다.

성능 메모

  • Mac M1 Air (16GB RAM)에서 1B Llama 모델은 CPU에서 초당 1 토큰을 생성할 수 있습니다.
  • 3B 모델은 느리게 작동하며, 8B 모델은 메모리 부족으로 종종 실패합니다.
  • Apple의 GPU (mps - Metal Performance Shaders)를 사용할 때, 처음에는 torch.triu의 버그로 인해 문제가 발생했으나, 저장소에 이를 수정한 버전이 포함되어 있습니다.
  • GPU 버전은 짧은 토큰 시퀀스에서는 더 빠른 추론을 보였으나, 메모리 소비가 더 커져 시퀀스 길이가 증가함에 따라 성능이 저하되었습니다.

:github: Run Llama Locally 프로젝트 저장소

https://github.com/anordin95/run-llama-locally

:llama: Llama 모델 가중치 다운로드

:llama: Meta에서 제공하는 Llama 모델 라이브러리: llama-models

https://github.com/meta-llama/llama-models




이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다. :hugs:

:pytorch:파이토치 한국 사용자 모임:kr:이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일:love_letter:로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)

:gift: 아래:arrow_lower_right:쪽에 좋아요:+1:를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~ :star_struck: