PyTorch 기반 LLM 설치 & 활용 가이드

최근 딥 러닝과 인공지능이 빠르게 발전함에 따라, 대형 언어 모델(LLM, Large Language Model)의 활용이 폭넓게 확산되고 있습니다. 하지만 LLM을 직접 환경에 세팅해 보려 하면, 종종 다양한 오류가 발생해 진입 장벽을 느끼기 쉽습니다. 특히 Hugging Face 라이브러리(Transformers, tokenizers 등)를 사용하는 과정에서, Python 버전 호환이나 Rust 컴파일러, 그리고 모델 코드가 기대하는 특정 함수 불일치와 같은 문제들이 자주 보고됩니다. 이번 글에서는 LLM을 세팅하면서 겪을 수 있는 대표적인 오류와 해결 방법을 정리하고, GPT-2나 Llama 같은 모델을 로컬 환경에서 간단히 돌리는 과정을 안내해 드리겠습니다.

먼저 Python 가상환경(venv)나 Conda 환경을 통해 독립된 작업공간을 마련해야 합니다. 이렇게 하면 의존 패키지 충돌을 줄이고, 여러 버전의 라이브러리를 동시에 관리하기가 수월해집니다.

  1. PyTorch, Transformers 설치
    • 가장 먼저 PyTorch를 설치해야 합니다. GPU 사용 시에는 CUDA 버전에 맞추어 설치하시는 것이 좋습니다.
    • 그다음 transformers, sentencepiece, huggingface_hub 등의 Hugging Face 관련 패키지를 설치합니다.
    • 만약 특정 버전으로 제한되어야 하는 모델(예: 구형 모델)이 있다면, 해당 모델에 맞춰 transformers 버전을 다르게 세팅해야 할 수 있습니다.
  2. Rust 컴파일러 문제
    • tokenizers 라이브러리는 내부적으로 Rust 코드를 사용하므로, 특정 환경에서 미리 빌드된 바이너리가 없으면 로컬에서 소스 컴파일이 진행될 수 있습니다.
    • 이때 Rust가 설치되어 있지 않다면 “can’t find Rust compiler” 오류가 발생합니다.
    • 해결 방법은 rustup.rs를 통해 Rust 컴파일러를 설치하거나, 가상환경에 맞춰 PATH를 설정해 주는 것입니다.
    • 설치 후에는 rustc --version을 통해 버전 확인이 가능합니다.
  3. 토크나이저 빌드 오류와 invalid_reference_casting
    • 최신 버전의 Rust(예: 1.84 이상)에서, tokenizers가 과거에 사용하던 특정 캐스팅 코드가 이제는 기본적으로 빌드 에러를 일으키는 일이 있습니다.
    • 이 문제를 임시 해결하기 위해선 RUSTFLAGS='-A invalid_reference_casting'를 주어 빌드 시 경고로 처리할 수 있습니다.
    • 혹은 Rust를 더 구버전(예: 1.72)으로 세팅하면 빌드 에러 없이 설치될 수도 있습니다.
    • 하지만 가장 깔끔한 해결책은 tokenizers가 새 버전에서 수정되거나, 호환되는 파이썬 버전을 사용해 사전에 빌드된 휠(wheel)을 받아오는 것입니다.
  4. 구버전 함수 불일치: is_torch_greater_or_equal_than_1_13
    • 어떤 모델은 오래된 시점의 Transformers 코드를 참조하여, 이미 최신 버전에서 사라졌거나 이름이 바뀐 함수를 임포트하려고 시도합니다.
    • 예를 들어, is_torch_greater_or_equal_than_1_13라는 함수가 더 이상 존재하지 않고, 대신 is_torch_greater_or_equal_than_2_1만 남아 있다면 ImportError가 발생합니다.
    • 이를 해결하기 위해선 크게 두 가지 방법이 있습니다.
      1. 모델 코드 자체를 수정: Hugging Face 캐시에 저장된 modeling_XXX.py 파일을 열어, 임포트 구문과 내부 사용 부분을 일치하는 함수명으로 직접 바꾸는 방법입니다. 캐시 파일을 수정하려면 ~/.cache/huggingface/modules/... 경로에서 해당 .py 파일을 찾으면 됩니다. 다만 캐시를 삭제 후 다시 받아야 할 수도 있고, 모델 재다운로드 시 덮어써질 위험이 있습니다.
      2. Transformers를 구버전으로 설치: 모델이 작성된 시점의 구버전(예: 4.27~4.28 근방)으로 돌아가면, 해당 함수가 존재해 임포트 에러가 사라집니다. 다만 다른 최신 모델과의 호환성이 떨어질 수 있습니다.
    • 궁극적으로는 모델 제작자가 최신 Transformers 버전에 맞추어 모델 코드를 업데이트하는 것이 가장 바람직합니다.
  5. GPT-2, Llama 테스트
    • Transformers 환경이 제대로 갖춰졌다면, 대표적인 기본 모델인 GPT-2를 간단히 불러와 텍스트 생성을 시도해 볼 수 있습니다. from transformers import AutoTokenizer, AutoModelForCausalLM import torch model_name = "gpt2" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForCausalLM.from_pretrained(model_name).to("cuda" if torch.cuda.is_available() else "cpu") inputs = tokenizer("Hello world!", return_tensors="pt").to(model.device) output = model.generate(**inputs, max_length=50) print(tokenizer.decode(output[0]))
    • 마찬가지로 Llama 계열 모델(예: “meta-llama/Llama-2-7b-chat-hf”) 역시 설치와 라이선스 수락 과정을 거친 뒤, 토크나이저를 이용해 로드 가능합니다.
      • Llama 모델은 sentencepiece가 필수이며, GPU 메모리가 충분히 확보되어야 합니다.
      • Llama2 Chat 버전은 대화형 폼에 맞춰 추가 프롬프트 설정을 해주면 더욱 좋은 결과를 얻을 수 있습니다.
  6. 마무리 조언
    • LLM을 로컬에서 다루려면 충분한 GPU 메모리와 정확한 버전 호환이 필수적입니다.
    • Rust 컴파일러나 protobuf, sentencepiece 등은 사소하지만 자주 잊히기 쉬운 의존성 요소이므로, 환경 세팅 과정을 꼼꼼히 관리해야 합니다.
    • 특히 모델 코드와 transformers 버전이 어긋나 생기는 임포트 오류나 함수명 불일치 문제는, 캐시 수정 또는 구버전 다운그레이드로 해결 가능하지만, 장기적으로 모델 제작 측의 코드 업데이트가 이뤄져야 근본적인 호환성이 확보됩니다.
    • GPT-2나 Llama2 정도의 모델을 정상적으로 로드하고 텍스트를 생성해볼 수 있다면, 이후에는 분산 학습, 파인튜닝, 퀀타이제이션(4/8bit) 등을 단계적으로 시도해 볼 수 있을 것입니다.

이상으로, Hugging Face Transformers 환경에서 PyTorch 기반의 대형 언어 모델을 설치·활용하는 과정에서 마주치기 쉬운 오류와 해결책을 정리해 보았습니다. 다양한 모델들이 빠르게 업데이트되고 있으므로, 항상 버전 호환과 의존 라이브러리에 유의하셔야 합니다. 본 가이드를 통해 환경 문제를 최소화하시고, LLM 연구와 서비스에 더욱 집중할 수 있기를 바랍니다.

Comments

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다