테마 전환

Ollama Modelfile 매개변수 완벽 해설: 나만의 커스텀 모델 만들기

Easton editorial illustration: one large recipe-like code card assembling a model cube

2026-06-08 업데이트: Ollama 공식 Modelfile 문서를 기준으로 지시어 목록(FROM / PARAMETER / TEMPLATE / SYSTEM / ADAPTER / LICENSE / MESSAGE 총 7개, REQUIRES는 없음)과 매개변수 기본값을 다시 확인하고, 입문 글 링크를 수정했으며 같은 시리즈의 관련 글을 추가했습니다.

지난 글에서 모델을 실행하는 방법을 다룬 뒤에도 한 가지 문제가 계속 따라다녔습니다. 응답이 너무 들쭉날쭉하다는 점이었습니다.

예를 들어 llama3.2에 간단한 코드 질문을 하면 어떨 때는 세 줄로 깔끔하게 답하고, 어떨 때는 논문 한 편을 써 줍니다. temperature를 0.8로 올리면 지나치게 ‘창의력을 발휘’하고, 0.1로 낮추면 교과서를 외우듯 경직됩니다. 더 골치 아픈 것은 대화할 때마다 system prompt를 다시 설정해야 한다는 점입니다. 계속 복사해 붙여 넣다 보면 정말 지칩니다.

그러다 Ollama에 Modelfile이라는 기능이 있다는 것을 알게 됐습니다. 쉽게 말하면 모델에 ‘성격 소개서’를 작성해 주는 것입니다. 한 번 설정하면 계속 적용됩니다. 이 글에서는 제가 직접 겪은 시행착오와 튜닝 경험을 정리했습니다. 핵심 매개변수 10개의 조정 방법과 바로 사용할 수 있는 실전 템플릿 4개도 함께 소개합니다.

Ollama를 아직 설치하지 않았다면 먼저 Ollama 입문 가이드를 읽어 보세요. 이 글은 ollama run을 이미 사용할 줄 안다는 전제에서 시작하는 심화 내용입니다.

1. Modelfile이란 무엇이며 왜 필요한가

Modelfile은 모델의 ‘설정 설계도’와 같습니다. 개념은 Dockerfile과 비슷합니다. 어떤 모델을 기반으로 할지, 어떤 매개변수를 설정할지, 시스템 프롬프트에는 무엇을 쓸지를 Ollama에 알려 주고 이름을 붙입니다. 이후에는 그 이름으로 모델을 호출할 때마다 모든 설정이 자동으로 적용됩니다.

간단히 말해 다음 세 가지 문제를 해결합니다.

문제 1: 매번 설정을 반복해야 함

이런 상황을 겪어 봤을 겁니다. 터미널을 열고 ollama run llama3.2를 실행한 다음 system prompt를 입력합니다. 다음 날 또 같은 작업을 하고, 그다음 날에도 반복합니다. 번거롭지 않나요? Modelfile에 고정 설정을 작성하면 한 번만 설정해도 계속 사용할 수 있습니다.

문제 2: 일관되지 않은 출력 스타일

같은 모델이라도 매개변수 설정에 따라 출력은 크게 달라집니다. 코드 도우미는 안정적인 출력이 필요하고 창작에는 다양성이 필요합니다. 작업할 때마다 ‘이 작업에는 temperature 0.3, 저 작업에는 0.8’을 모두 기억하기는 어렵습니다. Modelfile은 이런 사전 설정을 저장해 줍니다.

문제 3: 모델 변형 관리

‘코드 리뷰용 llama3.2’, ‘글쓰기 도우미용 llama3.2’, ‘JSON 출력용 llama3.2’가 각각 필요하다고 해 봅시다. 모델을 세 벌 복사할 필요는 없습니다. Modelfile로 이름이 다른 변형 세 개를 만들면 됩니다. 기반 모델 파일은 같고 설정만 달라집니다.

기본 과정은 세 단계뿐입니다:

# 1. Modelfile 파일 만들기
echo 'FROM llama3.2
SYSTEM "당신은 코드 리뷰 전문가입니다"' > Modelfile

# 2. ollama create로 새 모델 생성하기
ollama create my-coder -f Modelfile

# 3. 바로 실행하기
ollama run my-coder

정말 간단합니다. 이제 Modelfile 안에 어떤 내용을 작성할 수 있는지 자세히 살펴보겠습니다.

2. Modelfile 구조와 7가지 지시어

Modelfile의 문법은 간단합니다. 주석은 #으로 시작하고 지시어는 대문자 단어로 시작합니다. 예시는 다음과 같습니다.

# 주석입니다
FROM llama3.2
PARAMETER temperature 0.8
SYSTEM "당신은 친절한 도우미입니다"

파일에는 주석과 지시어, 두 종류의 내용만 들어갑니다. 지시어는 모두 7가지입니다. 먼저 한눈에 살펴보겠습니다.

지시어역할필수 여부사용 시점
FROM기반 모델 지정필수모든 파일에 반드시 필요
PARAMETER추론 매개변수 설정선택temperature, 컨텍스트 등을 조정할 때
TEMPLATE프롬프트 템플릿선택대화 형식을 직접 정의할 때
SYSTEM시스템 메시지선택역할과 행동을 설정할 때
ADAPTERLoRA 어댑터 로드선택모델을 미세 조정할 때
LICENSE라이선스 선언선택모델을 공개할 때
MESSAGE사전 설정 대화 기록선택few-shot 예시를 제공할 때

솔직히 일상적인 용도의 90%는 FROM, PARAMETER, SYSTEM 세 가지만으로 충분합니다. 나머지는 구체적인 필요가 생겼을 때 살펴봐도 늦지 않습니다.

FROM 지시어를 사용하는 세 가지 방법

FROM은 유일한 필수 지시어이며 세 가지 방식으로 작성할 수 있습니다.

방법 1: 모델명 사용(가장 일반적)

FROM llama3.2
FROM llama3.2:3b
FROM mistral:latest

Ollama가 지원하는 모델명을 그대로 사용하면 됩니다. 콜론 뒤에는 버전 태그가 오며, 생략하면 기본적으로 latest가 적용됩니다.

방법 2: 로컬 GGUF 파일 사용

FROM ./my-model.gguf

다른 곳에서 GGUF 형식의 모델 파일을 내려받았다면 파일을 직접 지정할 수 있습니다.

방법 3: Safetensors 디렉터리 사용

FROM ./my-safetensors-dir

자주 쓰는 방식은 아닙니다. 일반적으로 Hugging Face에서 모델 원본 형식을 내려받았을 때 사용합니다.

기본 구조를 살펴봤으니 이제 핵심인 PARAMETER 매개변수를 알아보겠습니다.

3. PARAMETER 매개변수 자세히 알아보기

이 부분은 이 글에서 가장 실용적인 내용입니다. 직접 매개변수를 조정하며 겪은 시행착오를 정리해 바로 참고할 수 있는 설정표로 만들었습니다.

먼저 전체 매개변수 목록을 살펴보겠습니다.

매개변수기본값유형용도조정 방법
temperature0.8float무작위성 제어, 높을수록 더 자유로운 출력코드 0.3, 창작 1.0
num_ctx2048int컨텍스트 창 크기긴 문서는 4096~8192
top_k40int확률이 가장 높은 K개 토큰 중에서만 선택출력이 너무 산만하지 않다면 그대로 유지
top_p0.9floatnucleus sampling으로 다양성 제어temperature와 함께 사용
min_p0.0float확률이 너무 낮은 토큰 필터링품질 높은 출력에는 0.05
seed0int무작위 시드 고정, 출력 재현테스트할 때 42 또는 고정값 사용
stop없음string해당 문자열을 만나면 생성 중지stop을 여러 개 중첩 가능
num_predict-1int최대 출력 길이, -1은 제한 없음출력을 제한하려면 100~500
repeat_penalty1.1float반복 내용에 페널티 부여긴 글을 생성할 때 1.5까지 상향
repeat_last_n64int최근 N개 토큰의 반복 여부 확인repeat_penalty와 함께 사용

이제 가장 중요한 매개변수 몇 가지를 자세히 살펴보겠습니다.

temperature: 창의성 vs 안정성

가장 이해하기 쉬운 매개변수입니다. temperature가 1.0처럼 높으면 모델은 확률이 낮더라도 더 창의적인 토큰을 선택합니다. 반대로 0.1처럼 낮으면 보수적으로 확률이 가장 높은 토큰만 선택해 출력이 더 안정적입니다.

llama3.2가 같은 질문에 답할 때 temperature에 따라 어떻게 달라지는지 테스트해 봤습니다.

질문: Python에서 파일을 읽는 방법은?

  • temperature 0.1: 교과서처럼 가장 표준적인 답만 출력
  • temperature 0.5: ‘인코딩에 주의하세요’ 같은 실용적인 팁을 추가
  • temperature 0.8: 상황에 따른 여러 방법을 설명하거나 예시까지 제시
  • temperature 1.0: 매우 다양한 답을 내놓지만 때로는 주제에서 벗어남

제 경험은 다음과 같습니다:

  • 코드 작성, 기술 질의응답: 안정성이 중요하므로 약 0.3
  • 창작, 브레인스토밍: 뜻밖의 결과가 필요하므로 0.8~1.0
  • JSON 출력, 고정 형식: 정확성이 중요하므로 0.1~0.2

num_ctx: 컨텍스트 창

이 매개변수는 모델이 얼마나 많은 내용을 ‘기억’할 수 있는지 결정합니다. 기본값은 2048 tokens이며, 중국어 기준으로는 대략 1,500~2,000자에 해당합니다.

긴 글을 읽고 요약하게 하려면 2048로 부족할 수 있습니다. 대화를 오래 나눴는데 모델이 갑자기 앞부분을 잊는다면 num_ctx가 너무 작을 가능성이 큽니다.

중요한 점: num_ctx를 높이면 더 많은 메모리를 사용합니다. llama3.2로 테스트했을 때 num_ctx를 2048에서 8192로 올리자 메모리 사용량이 두 배 이상 증가했습니다. 컴퓨터 메모리가 8GB라면 4096 정도가 적당합니다.

제 경험은 다음과 같습니다:

  • 짧은 대화, 간단한 질의응답: 기본값 2048로 충분
  • 코드 리뷰, 기술 토론: 4096이 비교적 여유로움
  • 긴 문서 처리, 소설 쓰기: 메모리가 충분하다면 8192

stop: 중지 시퀀스

이 매개변수는 매우 유용합니다. 모델에 ‘이 문자열을 보면 생성을 멈추라’고 알려 줍니다.

예를 들어 모델에 JSON을 출력하게 할 때 불필요한 설명이 뒤따르는 것을 막고 싶다면 다음처럼 설정합니다.

PARAMETER stop "\n\n"
PARAMETER stop "```"

모델은 줄바꿈 두 번이나 코드 블록 기호를 만나면 생성을 중지하므로 출력이 더 깔끔해집니다.

stop을 여러 개 중첩할 수 있다는 사실은 의외로 잘 알려져 있지 않습니다.

repeat_penalty: 군더더기 방지

모델에는 같은 말을 반복하는 경향이 있습니다. repeat_penalty는 반복 내용에 페널티를 부여하는 매개변수입니다.

기본값은 1.1이지만 제게는 부족했습니다. 긴 글을 쓰게 할 때는 보통 1.3~1.5로 설정합니다. 그러면 ‘앞서 말했듯이’, ‘요약하자면’ 같은 군더더기가 효과적으로 줄어듭니다.

용도별 매개변수 비교표

자주 쓰는 네 가지 용도에 맞는 설정을 정리했습니다. 그대로 사용해도 됩니다.

용도temperaturenum_ctx기타 매개변수 제안
코드 도우미0.34096stop ”```”, seed 42(재현하기 쉬움)
창작1.02048top_p 0.95, repeat_penalty 1.5
기술 질의응답0.54096min_p 0.05(품질 낮은 토큰 필터링)
JSON 출력0.12048stop “\n\n”, stop ”```”

여기까지 읽었다면 각 매개변수의 개념을 이해했을 겁니다. 이제 실전으로 넘어가 바로 사용할 수 있는 Modelfile 템플릿 네 개를 살펴보겠습니다.

4. 실전 사례: 완성형 Modelfile 4개

이론은 충분히 설명했으니 바로 코드를 보겠습니다. 네 가지 템플릿을 모두 직접 테스트했으며, 복사해 바로 실행할 수 있습니다.

사례 1: 역할극 — 저팔계 도우미

저팔계의 말투를 흉내 내도록 만든 재미있는 모델입니다.

# 저팔계 도우미 Modelfile
FROM llama3.2

SYSTEM """당신은 서유기의 저팔계이며, 유머러스하고 소탈하게 말해야 합니다.
질문에 답할 때:
- 가끔 스승님이 잔소리가 많다고 투덜거립니다
- 음식 이야기가 나오면 매우 신나 합니다
- 자신을 '나 저팔계'라고 부릅니다
- 어려움을 만나면 '그만두고 흩어지자'고 말합니다"""

PARAMETER temperature 0.8
PARAMETER num_ctx 2048

이렇게 설정한 이유:

temperature를 0.8로 설정하면 저팔계의 말투에 더 뚜렷한 ‘성격’이 생기고 너무 경직되지 않습니다. SYSTEM에는 음식 이야기에 신나 하기, 자신을 ‘나 저팔계’라고 부르기처럼 구체적인 행동 규칙을 작성했습니다. 이런 세부 설정이 캐릭터를 더 생생하게 만듭니다.

사용 방법은 다음과 같습니다.

ollama create pig-bajie -f Modelfile
ollama run pig-bajie

‘프로그래밍을 잘 배우려면 어떻게 해야 해?‘라고 물어보고 어떻게 답하는지 확인해 보세요.

사례 2: 전문 도우미 — Python 코드 리뷰

제가 평소 업무에서 사용하는 코드 리뷰 전용 설정입니다.

# Python 코드 리뷰 도우미 Modelfile
FROM llama3.2:3b

SYSTEM """당신은 숙련된 Python 개발자입니다. 코드를 검토할 때 다음 사항에 집중하세요:
1. 타입 안전성 — 잠재적인 타입 오류가 있는가
2. 예외 처리 — 경계 조건을 처리했는가
3. 성능 병목 — 불필요한 반복문이나 중복 계산이 있는가
4. 보안 위험 — 민감한 데이터가 노출되는가

답변 형식:
문제 → 영향 → 제안 → 코드 예시"""

PARAMETER temperature 0.3
PARAMETER num_ctx 8192
PARAMETER seed 42

이렇게 설정한 이유:

temperature 0.3은 출력을 안정적으로 유지합니다. 코드 리뷰에는 지나친 ‘창의력’이 필요하지 않습니다. 코드 파일이 길 수 있으므로 num_ctx는 8192로 설정했습니다. seed 42는 출력을 재현하기 위한 값입니다. 같은 질문에 같은 제안을 받으면 테스트 결과를 비교하기 쉽습니다.

실제로 수백 줄짜리 Python 코드를 입력하면 ‘문제 → 영향 → 제안 → 예시’ 형식으로 명확한 리뷰 보고서를 제공합니다.

사례 3: 구조화된 출력 — JSON 형식

모델의 출력을 다른 프로그램에 전달해야 한다면 JSON 형식이 가장 편리합니다.

# JSON 출력 도우미 Modelfile
FROM llama3.2

SYSTEM """출력은 반드시 유효한 JSON 형식이어야 합니다.
분석 결과 형식:
{"result": "분석 내용", "confidence": 0-100, "tags": ["태그1", "태그2"]}

다른 내용이나 코드 블록 표시는 출력하지 마세요."""

PARAMETER temperature 0.1
PARAMETER num_ctx 2048
PARAMETER stop "\n\n"
PARAMETER stop "```"

MESSAGE user 이 코드의 보안 위험을 분석해 주세요
MESSAGE assistant {"result": "사용자 입력을 필터링하지 않아 SQL 인젝션 위험이 있습니다", "confidence": 85, "tags": ["보안", "SQL"]}

이렇게 설정한 이유:

JSON 형식에는 작은 오류도 허용되지 않으므로 가장 안정적인 출력을 위해 temperature를 0.1로 설정했습니다. stop 매개변수는 줄바꿈과 코드 블록 기호를 차단해 모델이 불필요한 내용을 출력하지 않도록 합니다. MESSAGE 부분은 few-shot 예시입니다. 모델에 ‘이런 형식으로 출력하라’고 알려 줍니다.

저는 이 설정을 자동화 과정에서 사용합니다. 오류 로그를 모델에 전달하면 구조화된 분석 결과를 출력하고 프로그램이 이를 자동으로 처리합니다.

사례 4: 긴 컨텍스트 — 문서 요약

긴 글을 처리하려면 충분히 큰 컨텍스트 창이 필요합니다.

# 문서 요약 도우미 Modelfile
FROM llama3.2

SYSTEM """당신은 문서 요약 전문가입니다. 출력 요구 사항:
- 핵심 항목은 최대 5개
- 각 항목은 50자 이내
- 핵심 관점을 먼저 추출한 뒤 세부 내용을 보충
- 한국어로 출력"""

PARAMETER temperature 0.5
PARAMETER num_ctx 8192
PARAMETER num_predict 300

이렇게 설정한 이유:

temperature는 0.5로 설정했습니다. 요약에는 안정성이 필요하지만 너무 경직되어서도 안 됩니다. 값이 지나치게 낮으면 요약이 단순한 나열처럼 보입니다. num_ctx 8192는 긴 문서를 처리할 수 있게 하고, num_predict 300은 출력 길이를 제한합니다. 요약이 원문보다 길어져서는 안 되기 때문입니다.

이 설정으로 기술 글을 처리해 봤습니다. 3,000자 분량의 글을 입력하면 각 50자 이내인 핵심 항목 다섯 개로 정리해 줘서 훨씬 빠르게 읽을 수 있었습니다.

정리

이 네 가지 템플릿은 일반적인 요구를 대부분 다룹니다. 필요에 따라 SYSTEM 내용을 수정하거나 매개변수를 조정하세요. Modelfile을 수정한 뒤 ollama create를 다시 실행하면 되므로 튜닝 비용도 낮습니다.

5. TEMPLATE과 MESSAGE 심화 활용

앞의 사례에서는 TEMPLATE을 사용하지 않았습니다. 대화 형식을 세밀하게 제어할 때만 필요한 ‘심화 기능’이기 때문입니다.

TEMPLATE의 Go template 문법

Ollama는 Go의 template 문법을 사용하며 핵심 변수는 세 가지입니다.

  • {{ .System }} — SYSTEM 내용
  • {{ .Prompt }} — 사용자 입력
  • {{ .Response }} — 모델 출력(출력 형식 정의에 사용)

간단한 예시는 다음과 같습니다.

FROM llama3.2

TEMPLATE """{{ .System }}

사용자 질문: {{ .Prompt }}

답변: {{ .Response }}"""

SYSTEM "당신은 기술 전문가입니다"

이 TEMPLATE은 먼저 SYSTEM 내용을 배치하고, 그다음 사용자 질문과 모델 답변이 이어지는 대화 구조를 정의합니다.

솔직히 대부분의 경우에는 TEMPLATE을 직접 정의할 필요가 없습니다. Ollama의 기본 템플릿만으로도 충분합니다. 그렇다면 언제 수정해야 할까요?

상황 1: 다른 도구와 연동할 때

Ollama를 특정 입력 형식을 요구하는 채팅 시스템에 연결한다면 TEMPLATE으로 형식을 맞출 수 있습니다.

상황 2: 특별한 대화 형식이 필요할 때

모든 문장의 시작에 [AI] 또는 [USER] 같은 접두사를 붙이고 싶다면 TEMPLATE으로 구현할 수 있습니다.

MESSAGE: 사전 설정 대화 기록

MESSAGE는 ‘모델에 예시 몇 개를 보여 주는’ 역할을 합니다. 앞의 JSON 출력 사례에서도 사용했습니다.

MESSAGE user 이 코드의 보안 위험을 분석해 주세요
MESSAGE assistant {"result": "SQL 인젝션 위험이 있습니다", "confidence": 85}

이는 모델에 ‘사용자가 이런 질문을 하면 이렇게 답해야 한다’고 알려 주는 것으로, few-shot 학습 개념에 해당합니다.

여러 대화 기록을 미리 설정할 수도 있습니다.

MESSAGE user 안녕하세요
MESSAGE assistant 안녕하세요. 무엇을 도와드릴까요?
MESSAGE user 날씨가 어떤가요
MESSAGE assistant 실시간 날씨는 알 수 없습니다. 날씨 앱을 확인해 보세요.

모델은 시작할 때 이 대화들을 ‘기억’하고 이후의 새 대화에서도 같은 스타일을 이어 갑니다.

모델의 Modelfile을 확인하는 방법

특정 모델의 Modelfile이 어떻게 작성되어 있는지 확인하려면 다음 명령을 사용합니다.

ollama show --modelfile llama3.2

모델의 모든 기본 설정이 포함되어 있어 출력이 매우 깁니다. 내용을 복사해 수정하면 커스텀 버전을 만들 수 있습니다.

이 명령은 특히 유용합니다. 다른 사람이 공유한 커스텀 버전처럼 성능이 좋은 모델을 발견했다면 ollama show로 Modelfile을 내보내 설정 방식을 배울 수 있습니다.

6. 자주 겪는 문제와 주의 사항

매개변수를 조정하다 보면 시행착오를 피하기 어렵습니다. 제가 겪은 대표적인 문제를 정리해 같은 실수를 줄일 수 있게 했습니다.

문제 1: temperature가 너무 낮아 교과서 같은 응답이 나옴

출력이 안정적이라는 이유로 temperature는 낮을수록 좋다고 생각하는 사람이 있습니다. 저도 처음에는 그렇게 생각해 코드 도우미의 temperature를 0.05로 설정했습니다.

결과는 어땠을까요? 모델은 표준 답안을 외우듯 질문에 답했고 유연성이 전혀 없었습니다. ‘Python에서 파일을 읽는 방법’을 물으면 세 가지 방법을 알려 주지만 모두 교과서식 표준 코드일 뿐 실용적인 팁은 하나도 없었습니다.

제가 얻은 교훈: temperature는 낮을수록 좋은 값이 아닙니다. 코드 리뷰에는 0.3이면 충분하며, 0.2보다 낮으면 응답이 경직됩니다. JSON처럼 정확한 출력이 필요하다면 낮게 설정해야 하지만 일상적인 대화에는 그럴 필요가 없습니다.

문제 2: num_ctx가 너무 커 메모리가 부족해짐

한 번은 매우 긴 문서를 처리하고 싶어 num_ctx를 16384로 설정했습니다. 몇 분 동안 실행한 뒤 시스템이 swap을 과도하게 사용하기 시작했고 컴퓨터 전체가 거의 멈췄습니다.

제 컴퓨터의 메모리는 16GB뿐입니다. llama3.2:3b 자체가 약 2GB를 사용하고, num_ctx를 2048에서 16384로 올리자 메모리 사용량이 8GB 이상으로 급증했습니다. 여기에 다른 프로그램까지 실행하면 감당하기 어려웠습니다.

교훈: num_ctx는 무작정 높이면 안 됩니다. 메모리 용량에 맞춰 설정하세요.

  • 메모리 8GB: num_ctx 최대 4096
  • 메모리 16GB: num_ctx 8192까지
  • 메모리 32GB 이상: 16384를 시도할 수 있음

문제 3: SYSTEM과 MESSAGE를 혼동함

두 지시어의 역할이 달라 혼동하기 쉽습니다.

  • SYSTEM: 항상 적용되는 역할 설정으로 모든 대화에 포함됨
  • MESSAGE: few-shot 예시로 사용하는 사전 설정 대화 기록

예를 들어 모델을 코드 리뷰 전문가로 만들고 싶다면 SYSTEM에는 역할 정의를, MESSAGE에는 몇 가지 질의응답 예시를 작성합니다.

많은 사람이 SYSTEM만 작성하고 MESSAGE는 사용하지 않습니다. 그러면 모델은 ‘자신이 코드 리뷰 전문가라는 사실’은 알지만 구체적인 질문에 어떤 형식으로 답해야 할지는 모를 수 있습니다. MESSAGE 예시를 몇 개 추가하면 출력 품질이 확실히 좋아집니다.

문제 4: 모델 생성 후 설정을 업데이트하는 방법

Modelfile로 만든 모델의 설정을 바꾸려면 어떻게 해야 할까요?

간단합니다. 같은 이름으로 ollama create를 다시 실행해 덮어쓰면 됩니다.

# 처음 생성
ollama create my-coder -f Modelfile

# 설정을 바꾸려면 Modelfile을 수정한 뒤 다시 실행
ollama create my-coder -f Modelfile

Ollama가 같은 이름의 모델을 바로 덮어쓰므로 먼저 삭제할 필요가 없습니다. 기존 모델을 덮어쓰고 싶지 않다면 이름을 바꾸면 됩니다.

ollama create my-coder-v2 -f Modelfile

문제 5: 다른 사람의 Modelfile을 재현하는 방법

다른 사람이 공유한 커스텀 모델의 성능이 좋아 설정 방법을 배우고 싶다면 다음과 같이 진행합니다.

# 먼저 해당 모델 가져오기
ollama pull someone-elses-model

# Modelfile 내보내기
ollama show --modelfile someone-elses-model > learned-modelfile

# 확인하고 학습한 뒤 수정하기
cat learned-modelfile

저도 이 명령을 자주 사용하며 커뮤니티의 커스텀 모델에서 많은 매개변수 튜닝 방법을 배웠습니다.

관련 글

마무리

지금까지 설명한 Modelfile의 핵심은 한 문장으로 정리할 수 있습니다. 설정을 고정해 매번 수동으로 조정하지 않도록 하는 것입니다.

지금 바로 해 볼 수 있는 세 가지를 소개합니다.

1. 역할극 모델 만들기

저팔계 도우미 템플릿을 사용해 보거나 도라에몽, 아이언맨처럼 좋아하는 캐릭터로 바꿔 보세요. 몇 차례 대화를 나누며 temperature가 출력 스타일에 어떤 영향을 주는지 확인해 보세요.

2. 매개변수별 출력 비교하기

같은 질문을 temperature 0.3과 0.8로 각각 실행해 출력이 어떻게 다른지 살펴보세요. 저도 이 실험을 여러 번 했고 매번 새로운 차이를 발견했습니다.

3. 자주 사용하는 용도 하나 고르기

코드 리뷰, 문서 요약, 창작 중 일상적으로 사용할 작업 하나를 고른 뒤 위 템플릿을 필요한 형태로 수정하세요. 몇 번 튜닝하면 나만의 커스텀 모델을 갖게 됩니다.

다음 글에서는 Ollama API 연동을 다룹니다. 로컬 모델을 프로그램에 연결하고 OpenAI 호환 인터페이스로 호출하는 방법입니다. Modelfile을 제대로 설정하면 API 호출도 더 안정적입니다. 코드에서 매개변수를 전달할 필요 없이 커스텀 모델을 바로 사용하면 됩니다.

궁금한 점이 있으면 댓글로 남겨 주세요. 제가 겪은 시행착오가 여러분의 실수를 몇 가지 줄이는 데 도움이 될 수 있습니다.

Ollama 커스텀 모델 만들기

Modelfile을 설정해 나만의 모델을 만드는 방법

⏱️ Estimated time: 10 min

  1. 1

    Step 1: Modelfile 파일 만들기

    Modelfile이라는 이름의 새 텍스트 파일을 만들고 기본 설정을 작성합니다:

    • FROM llama3.2(기반 모델 지정)
    • SYSTEM '시스템 프롬프트'(역할 정의)
    • PARAMETER temperature 0.3(temperature 설정)
  2. 2

    Step 2: 커스텀 모델 생성하기

    터미널에서 다음 생성 명령을 실행합니다:

    ```bash
    ollama create my-model -f Modelfile
    ```

    my-model은 모델에 붙일 이름이며 원하는 대로 바꿀 수 있습니다.
  3. 3

    Step 3: 실행하고 테스트하기

    생성한 모델을 바로 실행합니다:

    ```bash
    ollama run my-model
    ```

    질문 몇 개로 응답이 기대한 대로 나오는지 확인합니다.
  4. 4

    Step 4: 반복해서 최적화하기

    응답이 만족스럽지 않다면:

    • temperature 매개변수 조정(코드 0.3/창작 0.8)
    • SYSTEM 프롬프트 수정
    • MESSAGE 예시 추가

    수정한 뒤 `ollama create my-model -f Modelfile`을 다시 실행하면 기존 모델을 덮어쓸 수 있습니다.

FAQ

Modelfile과 매개변수를 직접 설정하는 방식은 무엇이 다른가요?
Modelfile은 설정을 고정해 한 번 모델을 만들면 계속 적용됩니다. 반면 `ollama run` 실행 시 매개변수를 직접 전달하는 방식은 매번 반복해야 하며, SYSTEM 프롬프트 같은 복잡한 설정을 저장할 수 없습니다.
temperature는 어느 정도로 설정해야 하나요?
용도에 맞춰 선택하세요:

• 코드 리뷰, 기술 질의응답: 약 0.3, 안정적인 출력
• 창작, 브레인스토밍: 0.8~1.0, 다양성 강화
• JSON 출력, 고정 형식: 0.1~0.2, 정확성 확보

0.2보다 낮으면 응답이 경직되고, 1.0보다 높으면 주제에서 벗어날 수 있습니다.
num_ctx를 높이면 메모리를 얼마나 사용하나요?
모델 크기와 num_ctx 값에 따라 다르지만 대략 다음과 같습니다:

• 메모리 8GB: num_ctx 최대 4096
• 메모리 16GB: num_ctx 8192까지
• 메모리 32GB 이상: 16384 시도 가능

실제 메모리 환경에 맞춰 값을 조금씩 높이며 테스트하는 것이 좋습니다.
기존 모델의 Modelfile은 어떻게 확인하나요?
`ollama show --modelfile 모델명` 명령으로 모델의 전체 Modelfile 설정을 내보낼 수 있어 학습하거나 수정하기 편합니다.
SYSTEM과 MESSAGE는 무엇이 다른가요?
두 지시어의 역할은 다릅니다:

• SYSTEM: 모델의 역할과 행동 규칙을 정의하며 모든 대화에 적용됩니다.
• MESSAGE: few-shot 예시로 사용할 대화 기록을 미리 설정합니다.

SYSTEM으로 역할을 정의하고 MESSAGE로 질의응답 예시를 몇 개 제공하면 좋습니다.
모델을 만든 뒤 매개변수를 수정하려면 어떻게 하나요?
Modelfile을 수정한 뒤 `ollama create 모델명 -f Modelfile`을 다시 실행하면 삭제하지 않고 같은 이름의 모델을 덮어쓸 수 있습니다. 기존 버전을 보존하려면 다른 모델명을 사용하세요.

2분 읽기 · 게시일: 2026년 4월 5일 · 수정일: 2026년 9월 4일

댓글

GitHub로 로그인하여 댓글을 남기세요

Easton BlogEaston Blog