6장. RAG 의 원리와 로컬 모델로 옮기기
로컬 모델이 필요한 까닭
배달 대신 집에서 요리하면 재료가 집 밖으로 나가지 않고, 끼니마다 배달비를 내지 않으며, 배달이 끊겨도 밥을 먹습니다. 대신 만들 수 있는 요리는 우리 집 주방의 크기에 달립니다. 로컬 모델이 집밥입니다.
네 카드가 로컬 모델을 쓰는 까닭입니다. 문서가 PC 밖으로 나가지 않고, 질문마다 돈이 들지 않으며, 인터넷이 끊겨도 돌고, 같은 모델 파일을 쓰는 한 답이 바뀌지 않습니다. 여기서 주방의 크기가 GPU 메모리, 요리 실력이 모델의 크기입니다.
외부 API 와 로컬 모델 견주기
| 견줄 것 | 외부 API | 로컬 모델 |
|---|---|---|
| 문서가 나가는가 | 공급사 서버로 나간다 | 내 PC 안에 있다 |
| 비용 | 토큰마다 낸다 | 전기와 장비 값뿐이다 |
| 모델 크기 | 아주 큰 모델도 쓴다 | 내 GPU 메모리에 들어가는 만큼 |
| 답의 품질 | 대체로 좋다 | 작은 모델은 떨어진다 |
| 준비 | API 키만 있으면 된다 | 프로그램 설치와 모델 내려받기 |
내 GPU 에 들어가는 크기 어림하기
모델 파일의 크기는 "파라미터 수 × 숫자 하나의 비트 수 ÷ 8" 바이트쯤입니다. Ollama 가 내려받는 모델은 대개 4비트 안팎으로 줄여 둔(양자화한) 것입니다.
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.49e9 | 0.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 ** 3 | 4비트 남짓으로 줄였을 때의 크기(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 의 자체 라이선스라 상업적으로 쓰기 전에 조건을 읽어야 합니다.
- 작은 모델은 문서를 붙여 줘도 틀립니다. 품질이 모자라면 더 큰 모델, 더 나은 검색, 더 좋은 프롬프트 가운데 무엇을 고칠지 재 가며 고릅니다.