brunch

You can make anything
by writing

C.S.Lewis

LLM 서비스 구현한기

HuggingFace Transformer 와 Llama.cpp 비교

by 송 재희 Jan 31. 2025

최근 예산이 부족하고 전문 인력이 부족한 중소기업을 대상으로, 어떻게 하면 회사 내 및 개인 컴퓨터에 소규모 LLM(Large Language Model)을 설치해서 데이터 보안에 대한 염려 없이 AI 서비스를 이용할 수 있을지에 대한 글을 쓰고 있다.  


오늘은 단순한 Chatbot 형태의 AI 서비스를 벗어나, 회사 내 및 개인적으로 로컬에서 AI 서비스를 개발하기 위한 대표적인 라이브러리인 Hugging Face Transformers와 llama.cpp를 비교해보려고 한다. 로컬 LLM을 이용해 AI 서비스를 개발하려면 여러 가지 고려 사항이 있지만, 이번에는 어떤 라이브러리를 사용하는 것이 각자 주어진 환경에 적합한지 함께 생각해보려고 한다.  


Hugging Face Transformers와 llama.cpp는 각각 다른 장단점과 사용 사례를 가지고 있다. Hugging Face Transformers는 다양한 NLP 모델을 학습하고 배포하는 데 유용하며, GPU 가속을 활용할 수 있는 환경에서 강점을 발휘한다. 반면, llama.cpp는 CPU와 에지 디바이스에서 효율적으로 동작하도록 최적화되어 있어, 리소스가 제한된 환경에서도 AI 서비스를 구축할 수 있는 가능성을 열어준다.  


이 글에서는 두 라이브러리의 목적, 사용 편의성, 성능, 배포 측면을 비교하고, 각 환경에 맞는 선택을 고민해보려고 한다. 이를 통해 중소기업이나 개인 사용자가 자신의 상황에 맞는 AI 서비스 개발 방향을 찾는 데 도움이 되길 바란다.


1. 목적 및 사용 사례

HuggingFace Transformers:  

    개발 및 실험 (및 배포): 다양한 NLP 모델(BERT, GPT, T5 등)을 학습, 미세 조정, 실험 및 배포하기에 이상적. 또한 추론(inference)에도 적합.  

    사용 사례: 연구, 프로토타이핑, 클라우드 기반 배포, GPU 가속이 필요한 시나리오, 프로덕션 설정(클라우드 또는 로컬 GPU).  

llama.cpp:  

    효율적인 추론: 양자화된 모델(초기에는 LLaMA에 초점을 맞췄지만 현재는 여러 아키텍처 지원)의 효율적인 추론에 최적화, 특히 CPU 및 에지 디바이스에서.  

    사용 사례: 리소스가 제한된 환경(예: 임베디드 시스템, 모바일), CPU 전용 추론, 프라이버시 중심의 로컬 배포.  



2. 사용 편의성

HuggingFace Transformers:

    고수준 API: 파이썬 라이브러리로 pipeline("text-generation")과 같은 파이프라인 및 from_pretrained()를 통한 쉬운 모델 로딩 제공.  

    통합: PyTorch/TensorFlow 및 Hugging Face 생태계(데이터셋, 모델 허브)와 원활하게 연동.  

llama.cpp:  

    C++/CLI 중심: C++ 코드 컴파일 또는 사전 빌드된 바이너리 사용 필요.  

    파이썬 바인딩: llama-cpp-python과 같은 파이썬 바인딩이 있지만, 비 C++ 사용자에게는 transformers의 네이티브 파이썬 API보다 직관적이지 않고 기능이 부족함.  

    설정: 수동 모델 변환/양자화 단계(예: GGUF/GGML 형식)가 필요할 수 있음.  



3. 성능

HuggingFace Transformers:

    GPU 가속: CUDA를 활용하여 GPU에서 빠른 학습/추론 가능. 최적화 없이 CPU에서는 느림.  

    양자화: 8/4비트 양자화를 지원하지만, CPU 추론에 대해 llama.cpp보다 최적화가 덜 됨.  

llama.cpp:  

    CPU 최적화: 메모리 효율적인 기술(예: KV 캐싱, AVX/NEON 명령어) 및 양자화(4/5/8비트)를 사용하여 CPU 추론 속도 향상.  

    속도: CPU 전용 설정에서 특히 작은 양자화된 모델을 사용할 때 Hugging Face보다 종종 더 나은 성능을 보임.  



4. 배포
HuggingFace Transformers:

    클라우드/서버: 클라우드/서버 환경(예: AWS, Hugging Face Inference Endpoints 또는 GPU가 있는 온프레미스 서버)에서 GPU 기반 배포에 가장 적합. 그러나 CPU 기반 배포도 가능.  

    메모리 요구 사항: 전체 정밀도 모델의 경우 일반적으로 더 큰 VRAM/GPU 메모리가 필요.  

llama.cpp:  

    에지/임베디드: 경량 구조와 최소한의 종속성으로 인해 라즈베리 파이 또는 스마트폰과 같은 디바이스에서 실행 가능한 에지/임베디드 배포에 적합. 그러나 디바이스 리소스에 의해 성능이 제한될 수 있음.  

    메모리 효율성: 최적화된 양자화 기술로 인해 메모리 효율성이 높음. 4비트 또는 5비트와 같은 양자화된 모델은 4–8GB의 RAM만 필요할 수 있음. 메모리 사용량은 모델 크기와 적용된 양자화에 크게 의존함.  


어떤 것을 선택할까?  

    Hugging Face는 모델 학습/미세 조정, 다양한 아키텍처 사용 또는 GPU 접근이 필요할 때 선택.  

    llama.cpp는 CPU 추론, 로컬 배포 또는 제한된 하드웨어에서 LLaMA 모델을 실행하는 것을 우선시할 때 선택.  


매거진의 이전글 LLM 로컬에서 돌리기

브런치 로그인

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari