내 노트북에서 도는 모델을 얹는다 — Ollama 와 qwen
Article
앞 편까지 264편을 9,005조각으로 자르고, 질문을 던지면 관련 조각을 찾아내는 데까지 왔다. 그런데 아직 답을 만들어주지는 않는다. 조각을 찾아서 보여줄 뿐이다.
- ① 모델을 얹는다오늘
- ② 출력을 통제한다내일
- ③ 검색을 재고 고친다수요일
- ④~⑩ 서비스로다음 주
지금까지 쓴 모델과 오늘 얹을 모델은 다른 것이다
우리는 이미 AI 모델을 쓰고 있었다. 11강부터 쓴 multilingual-e5-small 은 임베딩 모델이다. 문장을 넣으면 숫자 384개가 나오고, 글은 만들지 못한다. 하는 일은 뜻이 가까운 것을 찾는 것 하나다.
오늘 얹는 qwen 은 생성 모델(LLM) 이다. 글을 넣으면 글이 나온다. 찾은 조각을 읽고 답을 만드는 쪽이다. 크기가 2GB 를 넘고 임베딩 모델보다 훨씬 느리다.
둘 다 필요하다. 찾는 것과 답하는 것은 다른 일이다.
1. 왜 상용 API 를 바로 안 쓰나
돈만 내면 훨씬 좋은 모델을 쓸 수 있는데도 오늘은 일부러 노트북에서 도는 걸 먼저 쓴다. 이유는 셋이다.
첫째, 데이터가 밖으로 안 나간다. 상용 API 는 프롬프트를 남의 서버로 보내는데, 무엇을 보내면 안 되는지는 아직 안 배웠다.
둘째, 마음껏 틀려도 된다. 오늘 프롬프트를 수십 번 고쳐가며 돌릴 텐데 로컬은 몇 번을 돌리든 0원이다.
셋째, 나쁜 걸 봐야 좋은 걸 안다. 다음 주에 상용 API 로 갈아끼울 때 비교 대상이 필요하다. 그때 코드를 다시 쓰지는 않는다 — 주소와 열쇠와 모델 이름 세 줄만 바꾼다.
2. Ollama 를 깐다
ollama.com 에서 설치 파일을 받아 실행한다. 깔리면 백그라운드에서 서버가 하나 돈다. 파이썬이 이 서버에 요청을 보내는 구조다.
- 내 파이썬 코드요청을 보낸다
- Ollama 서버localhost:11434 · 내 컴퓨터 안
- qwen 모델글을 만든다
ollama --version
- ollama version is 0.32.6
설치가 끝나면 Launch 창이 하나 뜬다. 남의 도구를 로컬 모델에 물려주는 기능이라 우리 수업과 상관없다. 창은 닫되 트레이 아이콘에서 Quit 하지는 않는다 — 서버까지 꺼진다.
3. 어느 모델을 받을지가 오늘의 진짜 결정이다
같은 qwen 이라도 크기가 여러 개다. 기준은 노트북 사양 — VRAM 2GB, RAM 16GB 다. VRAM 은 그래픽카드 메모리로 빠르지만 작고, RAM 은 본체 메모리로 느리지만 크다. 모델은 통째로 메모리에 올라가야 도는데, VRAM 에 다 못 올라가면 RAM 으로 밀려나고 CPU 가 계산한다.
| 모델 | 받는 크기 | 어디서 도나 | 판정 |
|---|---|---|---|
qwen2.5:0.5b | 약 0.4GB | VRAM | 한국어가 무너진다. 쓸 수 없다 |
qwen2.5:1.5b | 약 1GB | VRAM 에 들어갈 수도 | 느린 노트북용 대안 |
qwen2.5:3b | 약 2GB | 대부분 RAM · CPU | 오늘 쓸 것 |
qwen2.5:7b | 약 4.7GB | RAM · CPU | 답 하나에 1분. 수업 불가 |
양자화는 모델 안의 숫자를 덜 정밀하게 저장하는 것이다. 3b 모델의 원본은 6GB 가 넘는데 Q4 로 줄이면 2GB 가 된다. Ollama 가 받는 것은 기본이 양자화된 판이라 따로 신경 쓸 게 없다.
ollama pull qwen2.5:3b
2GB 를 서른 명이 동시에 받으면 60GB 다. 11강에서 허깅페이스가 429 Too Many Requests 로 막았던 것과 같은 일이 생기므로, 오늘 것은 미리 받아두었다.
4. 첫 대화 — 터미널에서
파이썬을 쓰기 전에 모델이 살아 있는지부터 확인한다. 빠져나올 때는 /bye 다.
ollama run qwen2.5:3b
- >>> 안녕? 너는 누구야
- 안녕하세요! 저는 Alibaba Cloud에서 제작한 AI 챗봇입니다. 다양한 질문에
- 답변하거나 도와드릴 수 있습니다. 어떤 걸 도와드릴까요?
- >>> /bye
여기서 두 가지를 눈여겨본다. 첫 글자가 나오기까지 몇 초 걸리는데, 모델을 메모리에 올리는 시간이라 두 번째 질문부터는 빨라진다. 그리고 답이 나오는 속도가 눈에 보인다 — 상용 서비스에서 답이 주르륵 흐르는 것과 같은 원리인데 우리는 느려서 더 잘 보인다.
5. 어디서 돌고 있나 — GPU 인가 CPU 인가
모델을 띄워둔 채로 다른 터미널을 열어 확인한다.
ollama ps
- NAME ID SIZE PROCESSOR CONTEXT UNTIL
- qwen2.5:3b 357c53fb659c 2.2 GB 100% CPU 4096 4 minutes from now
| 표시 | 무슨 뜻 | 속도 |
|---|---|---|
100% GPU | 전부 그래픽카드에 올라갔다 | 가장 빠르다 |
40%/60% CPU/GPU | 일부만 올라갔다 | 어중간하다 |
100% CPU | 전부 본체 메모리에서 돈다 | 느리다. 우리는 대개 여기 |
그래픽카드가 있어도 모델이 들어가야 쓴다. 3b 가 답답하면 ollama pull qwen2.5:1.5b 로 내려도 된다 — 오늘 배울 내용은 모델 크기와 상관이 없다. 다만 0.5b 는 한국어가 아예 무너져서 다음 주 비교가 「고장 대 정상」이 되어버린다.
6. 조각을 많이 넣으면 CPU 에서만 느려진다
모델은 답을 만들기 전에 입력을 통째로 한 번 읽는다. 이 단계를 프리필(prefill)이라고 부르고, CPU 에서는 특히 느리다.
| 넣은 조각 | 입력 토큰 | CPU 프리필 | CPU 총 | GPU 총 |
|---|---|---|---|---|
| 3개 | 423 | 3.6초 | 10.9초 | 3.1초 |
| 10개 | 864 | 4.2초 | 11.9초 | 3.1초 |
| 30개 | 2,647 | 21.0초 | 30.4초 | 4.0초 |
GPU 는 조각을 열 배로 늘려도 3.1초에서 4.0초다. CPU 는 10.9초에서 30.4초가 되고, 프리필만 3.6초에서 21초로 뛴다. 우리 노트북은 여기다.
그래서 학원 노트북에서는 조각을 적게 넣는 것이 선택이 아니라 조건이다. 검색을 잘해서 세 개만 넣어야 한다. 우리 조각은 200자라 토큰 평균 71개다 — 영어권 예제대로 1000자로 잘랐으면 조각 하나가 414토큰이라 셋만 넣어도 1,200토큰이다. 청킹을 200으로 잡은 결정이 오늘 속도로 돌아온다.
7. 모델이 어디에 저장됐나
ollama list
- NAME ID SIZE MODIFIED
- qwen2.5:3b 357c53fb659c 1.9 GB 12 minutes ago
저장 위치는 윈도우 기준 C:\Users\사용자\.ollama\models 다. C 드라이브가 빠듯하면 OLLAMA_MODELS 환경변수로 옮길 수 있고, 안 쓰는 모델은 ollama rm 모델이름 으로 지운다. 11강에서 본 허깅페이스 캐시와는 별개의 폴더라 둘 다 쌓인다.
이번 편에 나온 것
| 쓴 것 | 하는 일 |
|---|---|
ollama --version | 설치 확인 |
ollama pull 모델 | 모델을 받는다 |
ollama run 모델 | 터미널에서 바로 대화. 나올 때 /bye |
ollama ps | 지금 떠 있는 모델과 GPU/CPU 비율 |
ollama list | 받아둔 모델 목록 |
ollama rm 모델 | 모델 삭제 |
OLLAMA_MODELS | 저장 위치를 옮긴다 |
localhost:11434 | Ollama 서버 주소. 다음 편에서 여기로 요청한다 |
다음 편에서 파이썬으로 이 모델을 부른다.