LLMOllamaLoRARAGMLX

나만의 로컬 LLM 만들기 — Sonnet급 모델을 내 Mac에서 돌리는 현실적인 방법

July 9, 20261 min read

"나도 Claude 같은 모델 하나 만들고 싶은데?"

Claude Code를 쓰다 보니 문득 이런 생각이 들었다. "이런 LLM을 나도 하나 만들어서 로컬에서 돌리면 안 되나? 거창한 건 필요 없고 Sonnet 정도면 충분한데." 아마 저와 비슷한 생각을 해본 분들이 꽤 있을 거다. API 비용도 아깝고, 내 데이터를 외부로 보내기 싫은 경우도 있고, 무엇보다 "내 것"을 갖고 싶은 욕심도 있으니까.

그래서 찾아봤다. 결론부터 말하면 이렇다.

Sonnet급 모델을 처음부터(from scratch) 만드는 건 개인에게 불가능하다. 하지만 "로컬에서 Sonnet급으로 쓰는 것"은 충분히 가능하다.

이 둘은 완전히 다른 문제다. 전자는 수천 장의 GPU와 수조 개의 토큰, 수백억 원 규모의 비용이 필요한 영역이다. 하지만 후자는 오늘 저녁에 터미널 몇 줄로 시작할 수 있다. 이 글에서는 목적별로 현실적인 선택지 4가지를 정리한다.

목적부터 정하자

방법을 고르기 전에 내가 뭘 원하는지부터 명확히 하는 게 좋다. 나는 처음에 이걸 뭉뚱그려서 "모델을 만들고 싶다"고 생각했는데, 사실은 서로 다른 4가지 목표가 섞여 있었다.

내가 원하는 것현실적인 방법
로컬에서 Sonnet급 성능으로 쓰고 싶다오픈 웨이트 모델 실행 (Ollama)
내 문서·지식을 활용하게 하고 싶다RAG
내 말투/도메인 스타일에 맞추고 싶다LoRA 파인튜닝
LLM의 원리를 배우고 싶다nanoGPT로 소형 모델 직접 학습

하나씩 살펴보자.

방법 1: 오픈 웨이트 모델 실행 — 가장 현실적인 시작점

이미 공개된 고성능 모델을 내려받아 그대로 쓰는 방식이다. 요즘 오픈 모델의 수준이 많이 올라와서, 큰 모델들은 이전 세대 Sonnet에 근접하는 성능을 낸다. Qwen, Llama, DeepSeek-R1 distill, Gemma, Mistral 같은 모델들이 대표적이다.

사전 준비: 내 Mac이 감당할 수 있는 모델 크기

Apple Silicon Mac이라면 유리하다. 통합 메모리(unified memory) 구조 덕분에 RAM 크기가 곧 돌릴 수 있는 모델 크기가 된다.

RAM돌릴 수 있는 모델체감
16GB7~14B일상 작업 무난
32~64GB30~70B코딩·추론에서 체감이 확 달라짐

메모리 확인은 이렇게 한다.

sysctl hw.memsize | awk '{print $2/1024/1024/1024 " GB"}'

Step 1: Ollama 설치

로컬 LLM 실행 도구는 몇 가지가 있는데, 처음이라면 Ollama가 가장 간편하다.

brew install ollama

GUI가 편하면 LM Studio, 저수준 제어가 필요하면 llama.cpp라는 선택지도 있지만, 일단은 Ollama로 시작하는 걸 추천한다.

Step 2: 모델 받아서 실행

ollama run qwen3:14b

이 한 줄이면 모델 다운로드부터 대화 시작까지 끝난다. 처음엔 모델 파일(수 GB)을 받느라 시간이 걸리지만, 한 번 받으면 이후엔 바로 뜬다.

Step 3: API로 쓰기

Ollama는 로컬에서 OpenAI 호환 API 서버도 띄워준다. 즉, 기존에 API 기반으로 짜둔 코드를 로컬 모델로 돌릴 수 있다.

curl http://localhost:11434/v1/chat/completions \
  -d '{
    "model": "qwen3:14b",
    "messages": [{"role": "user", "content": "안녕!"}]
  }'

자주 쓰는 Ollama 명령어

ollama list          # 받아둔 모델 목록
ollama pull <모델>   # 모델 다운로드만
ollama run <모델>    # 대화 시작
ollama rm <모델>     # 모델 삭제 (디스크 확보)
ollama ps            # 현재 메모리에 올라온 모델 확인

방법 2: RAG — 파인튜닝보다 먼저 고려할 것

"내 문서를 알고 있는 모델"을 원한다면, 파인튜닝부터 떠올리기 쉽다. 나도 그랬다. 그런데 알아보니 지식을 넣는 용도로 파인튜닝은 비효율적이라고 한다. 파인튜닝은 말투나 형식을 입히는 데는 좋지만, 새로운 사실을 기억시키는 데는 잘 맞지 않는다.

내 문서·지식을 활용하게 하고 싶다면 **RAG(Retrieval-Augmented Generation)**가 훨씬 싸고 효과적이다. 원리는 단순하다.

  1. 내 문서를 잘게 쪼개서 벡터 DB에 저장해둔다
  2. 질문이 들어오면 관련 문서 조각을 검색한다
  3. 검색된 내용을 프롬프트에 끼워서 모델에게 전달한다

모델 자체는 그대로 두고, "참고 자료를 쥐여주는" 방식이다. 학습이 필요 없으니 문서가 바뀌어도 DB만 갱신하면 된다. 잘 짠 시스템 프롬프트와 RAG 조합만으로도 개인용으로는 충분한 경우가 많다.

방법 3: LoRA 파인튜닝 — 내 스타일을 입히고 싶을 때

RAG로 해결이 안 되는 것이 있다. 모델의 말투, 응답 형식, 특정 도메인의 표현 방식 같은 것들이다. 이럴 때 파인튜닝을 쓴다.

다만 전체 파라미터를 다시 학습하는 게 아니라 LoRA(Low-Rank Adaptation) 방식을 쓴다. 모델 본체는 그대로 두고 작은 어댑터만 학습하는 기법이라, 개인 GPU나 Mac에서도 가능하다. 메모리가 더 부족하면 양자화를 곁들인 QLoRA라는 변형도 있다.

환경별 표준 도구는 이렇다.

환경도구
Apple Silicon MacMLX (mlx-lm)
Linux + NVIDIA GPUunsloth, axolotl

Mac이라면 Apple이 직접 만든 MLX 프레임워크로 로컬 파인튜닝이 잘 된다.

pip install mlx-lm

# 준비한 학습 데이터(JSONL)로 LoRA 학습
mlx_lm.lora --model Qwen/Qwen3-14B --train --data ./my_data

주의할 점 하나. 파인튜닝은 학습 데이터 준비가 일의 8할이다. 도구 실행 자체는 어렵지 않은데, "내가 원하는 응답 스타일"을 보여주는 좋은 예시 데이터를 수백~수천 개 만드는 게 진짜 작업이다.

방법 4: nanoGPT — 진짜 "만드는" 과정을 배우고 싶다면

마지막으로, 실용성과 별개로 "LLM이 어떻게 만들어지는지" 자체를 배우고 싶다면 작은 모델을 처음부터 직접 학습해보는 게 최고다.

  • Andrej Karpathy의 nanoGPT — GPT를 수백 줄 코드로 직접 구현하고 학습하는 프로젝트
  • 같은 저자의 "Let's build GPT" 유튜브 강의와 함께 보면 좋다

이렇게 만든 모델은 실용성은 없다. 하지만 토크나이저, 어텐션, 학습 루프가 어떻게 맞물려 돌아가는지 뼛속까지 이해하게 된다. "만들고 싶다"는 욕심의 근원이 학습 욕구였다면 이쪽이 정답이다.

트러블슈팅

모델이 너무 느리다 — RAM 대비 큰 모델을 돌리면 스왑이 발생해서 급격히 느려진다. ollama ps로 메모리 사용을 확인하고 한 단계 작은 모델이나 더 강한 양자화 버전(예: q4 계열)으로 바꿔보자.

응답 품질이 기대 이하다 — 7B급 모델과 Sonnet을 비교하면 실망할 수밖에 없다. RAM이 허락하는 한 큰 모델(30B+)을 쓰고, 용도별로 모델을 나눠 쓰는 것도 방법이다(코딩용, 요약용 등).

디스크가 부족하다 — 모델 하나가 수 GB~수십 GB다. 안 쓰는 모델은 ollama rm으로 정리하자.

정리

전체 흐름을 한눈에 보면 이렇다.

  1. 일단 Ollama로 오픈 모델을 돌려본다 — 오늘 바로 가능
  2. 내 지식이 필요하면 RAG를 붙인다 — 파인튜닝보다 우선
  3. 스타일 조정이 필요하면 LoRA 파인튜닝 — Mac이면 MLX
  4. 원리가 궁금하면 nanoGPT — 학습용

"모델을 만들고 싶다"는 막연한 욕심을 쪼개보니, 사실 대부분은 1~2번에서 해결됐다. 처음부터 만드는 건 개인의 영역이 아니지만, 거인의 어깨 위에서 내 입맛에 맞게 조립하는 건 생각보다 문턱이 낮았다. 일단 ollama run 한 줄부터 시작해보자.

PM

backtodev

40대 PM, 다시 개발자로 돌아갑니다. 실패하고 배우며 성장하는 기록.

나만의 로컬 LLM 만들기 — Sonnet급 모델을 내 Mac에서 돌리는 현실적인 방법 | backtodev