LLM 엔지니어링6장 · RAG 의 원리와 로컬 모델로 옮기기10 / 23← 이전목차다음 →MetaContents

6장. RAG 의 원리와 로컬 모델로 옮기기

로컬 모델이 필요한 까닭

배달 대신 집에서 요리하면 재료가 집 밖으로 나가지 않고, 끼니마다 배달비를 내지 않으며, 배달이 끊겨도 밥을 먹습니다. 대신 만들 수 있는 요리는 우리 집 주방의 크기에 달립니다. 로컬 모델이 집밥입니다.

개인정보, 비용, 끊김 없음, 버전 고정의 네 가지 까닭을 카드로 놓은 그림

네 카드가 로컬 모델을 쓰는 까닭입니다. 문서가 PC 밖으로 나가지 않고, 질문마다 돈이 들지 않으며, 인터넷이 끊겨도 돌고, 같은 모델 파일을 쓰는 한 답이 바뀌지 않습니다. 여기서 주방의 크기가 GPU 메모리, 요리 실력이 모델의 크기입니다.

외부 API 와 로컬 모델 견주기

견줄 것외부 API로컬 모델
문서가 나가는가공급사 서버로 나간다내 PC 안에 있다
비용토큰마다 낸다전기와 장비 값뿐이다
모델 크기아주 큰 모델도 쓴다내 GPU 메모리에 들어가는 만큼
답의 품질대체로 좋다작은 모델은 떨어진다
준비API 키만 있으면 된다프로그램 설치와 모델 내려받기

내 GPU 에 들어가는 크기 어림하기

모델 파일의 크기는 "파라미터 수 × 숫자 하나의 비트 수 ÷ 8" 바이트쯤입니다. Ollama 가 내려받는 모델은 대개 4비트 안팎으로 줄여 둔(양자화한) 것입니다.

Python
models = {"qwen2.5:0.5b": 0.49e9, "qwen2.5:1.5b": 1.54e9, "qwen2.5:3b": 3.09e9}
for name, n in models.items():
    fp16 = n * 16 / 8 / 1024 ** 3        # 숫자 하나에 16비트
    q4 = n * 4.5 / 8 / 1024 ** 3         # 4비트 남짓(작은 표 몇 개는 더 크게 둔다)
    print(f"{name:14s} fp16 {fp16:4.1f}GB  4비트 {q4:4.1f}GB")

3B 모델은 fp16 으로 5.8GB 라 4GB GPU 에 들어가지 않지만, 4비트로 줄이면 1.6GB 쯤이라 들어갑니다. 실제로 이 PC 에서 Ollama 로 띄운 세 모델은 GPU 메모리를 각각 481MB, 1.2GB, 2.2GB 썼습니다(ollama ps 로 본 값, 대화 기억 공간까지 포함).

코드에 나오는 함수

코드쉬운 뜻
0.49e90.49 × 10의 9제곱, 곧 4억 9천만이다. 모델의 파라미터(가중치 숫자) 수다
n * 16 / 8숫자 하나에 16비트를 쓰면 숫자 n 개에 몇 바이트인지 셈한다. 8비트가 1바이트라서 8로 나눈다
/ 1024 ** 3바이트를 GB(기가바이트)로 바꾼다. 1024 × 1024 × 1024 바이트가 1GB 다
f"{name:14s}", f"{fp16:4.1f}"이름은 14칸에 맞춰, 숫자는 소수 첫째 자리까지 4칸에 맞춰 찍는다. 줄이 가지런해진다

이 코드가 뜻하는 것

짐 상자의 무게를 어림하는 일과 같습니다. 물건 개수에 물건 하나의 무게를 곱하면 상자의 무게가 나옵니다. 여기서 물건 개수가 파라미터 수, 물건 하나의 무게가 숫자 하나의 비트 수입니다.

줄하는 일쉽게 말하면
models = {...}모델 이름마다 파라미터 수를 적는다상자마다 물건 개수
fp16 = n * 16 / 8 / 1024 ** 3숫자 하나에 16비트일 때의 크기(GB)다무거운 물건으로 채운 상자
q4 = n * 4.5 / 8 / 1024 ** 34비트 남짓으로 줄였을 때의 크기(GB)다가벼운 물건으로 바꾼 상자
print(...)모델마다 두 크기를 나란히 찍는다두 상자의 무게를 견준다

결과에서 0.5B 는 0.9GB 와 0.3GB, 1.5B 는 2.9GB 와 0.8GB 로, 4비트로 줄이면 fp16 의 4분의 1 남짓이 됩니다. 이 크기가 GPU 메모리보다 작아야 모델을 GPU 에 올릴 수 있습니다.

주의할 점

  • 로컬이라도 "안전하다"고 끝내지 않습니다. 모델 파일의 라이선스(상업적으로 써도 되는지)를 확인하고, PC 자체의 보안도 챙깁니다. Qwen2.5 의 0.5B, 1.5B 는 Apache 2.0 이고, 3B 는 Qwen 의 자체 라이선스라 상업적으로 쓰기 전에 조건을 읽어야 합니다.
  • 작은 모델은 문서를 붙여 줘도 틀립니다. 품질이 모자라면 더 큰 모델, 더 나은 검색, 더 좋은 프롬프트 가운데 무엇을 고칠지 재 가며 고릅니다.
← 이전 절6장 · 외부 API 로 만드는 RAG다음 절 →6장 · Ollama 로 로컬 모델 띄우기