C.W.K.
Stream
REFERENCE

Ollama 환경 변수

Ollama 프로젝트 · ggml 라이브러리 · Apple Silicon 현장 검증

Version drift, ghost vars, Ollama가 실제 읽는 25개 변수, 그리고 모든 릴리스를 견디는 검증 습관. v0.20.7 (2026-04-17) 스냅샷.

Dated 스냅샷 — 여기 있는 게 안 동작하면 이 가이드보다 ollama serve 시작 dump를 믿어.

Ollama 환경 변수 — 필드 가이드

빠르게 움직이는 OSS 프로젝트의 version drift를 따라잡는 현장 레퍼런스

Ollama v0.20.7 (2026-04-17) 기준 검증. Ollama는 릴리스 사이에 환경 변수를 rename하고 remove하고 조용히 드롭해. OLLAMA_NUM_CTX, OLLAMA_NUM_GPU, OLLAMA_MLX 같은 이름들은 옛날 버전에선 멀쩡히 동작했지만 지금 서버는 그냥 무시해 — deprecation 경고도 없고, 로그 라인도 없어. 이 가이드는 지금 이 순간 인식되는 게 뭔지에 대한 스냅샷이야. 그리고 시간 따라가려면 어떤 습관이 필요한지에 대한 얘기야.


§0 OSS 컨벤션 — 모든 OSS 문서에 적용되는 읽기 순서

이 페이지의 어떤 구체적 사실보다 먼저 익혀야 하는 메타 룰: 오픈 소스 문서는, 이 페이지 포함, 무조건 stale 돼. 그건 결함이 아니라 컨벤션이야.

이 가이드 날짜는 2026-04-17, Ollama v0.20.7이야. 아래 모든 주장은 "그 날짜, 그 빌드에선 사실"로 받아들여 — 영원한 경전이 아니야. 몇 달 뒤 뭔가 안 되면, 가장 먼저 할 일은 이 페이지가 거짓말한다고 가정하는 게 아니라 ollama serve 찍어서 dump 보고 envconfig/config.go의 최근 commit 보는 거야.

§1 TL;DR — 의미가 빠져나간 다섯 이름

블로그 포스트, Stack Overflow 답변, AI 어시스턴트 출력에서 본 Ollama 튜닝 변수들 중 몇 개는 옛날 버전에선 진짜 설정이었어. 근데 지금 서버 (v0.20.7)는 안 읽어. 프로젝트가 진화하면서 rename됐거나, 대체됐거나, 조용히 제거된 거. 그리고 Ollama는 만났을 때 deprecation 경고를 안 띄워.

이름 (더 이상 인식 안 됨)옛날에 했던 일 / 의도v0.20.7에서 동작하는 것
OLLAMA_NUM_CTX서버 전역 context lengthOLLAMA_CONTEXT_LENGTH (env) 또는 options.num_ctx (요청별)
OLLAMA_NUM_GPU서버 레벨에서 모든 layer를 GPU로 강제요청별 options.num_gpu 또는 Modelfile PARAMETER num_gpu (discrete GPU 한정)
OLLAMA_N_GPU_LAYERSllama.cpp 스타일 layer offload위와 동일
OLLAMA_MLXApple Silicon에서 MLX backend 토글 (preview 시절)현재 envconfig에 없음. Apple Silicon은 Metal backend로 ship; MLX-native 추론은 mlx-lm을 직접 돌려.
OLLAMA_MAX_CONTEXT서버 context 상한OLLAMA_CONTEXT_LENGTH

§2 Ghost Variables — 빠져나간 이름들

이 이름들은 많은 튜토리얼, 스크린샷, AI가 만든 config에 등장해. Ollama 역사 어느 시점에선 유효했거나 (또는 합리적 유추로 llama.cpp에서 가져온 거), 지금 서버는 안 읽어. Deprecation 경고도, 로그 라인도 없어 — 그냥 무력해.

이름왜 사람들이 설정하는지v0.20.7 상태 / 오늘 쓸 것
OLLAMA_NUM_CTX"기본 context window 설정"Rename. Issue #14130 메인테이너 노트가 현재 config var 아님을 확인. OLLAMA_CONTEXT_LENGTH 사용.
OLLAMA_NUM_GPU"서버 레벨에서 모든 layer를 GPU로 강제"현재 envconfig에 없음. Layer count knob은 요청 시점에 살아 있음: API options.num_gpu 또는 Modelfile PARAMETER num_gpu.
OLLAMA_N_GPU_LAYERSllama.cpp의 n_gpu_layersOLLAMA_ prefix 붙인 형태Ollama env layer로 옮겨진 적 없음. 위와 동일한 fix.
OLLAMA_MLXMac에서 MLX backend 토글 (preview 시절 가정)현재 envconfig에 없음. Apple Silicon은 오늘 Metal backend로 동작; backend switch는 노출 안 됨. MLX-native 추론은 mlx-lm 직접 사용.
OLLAMA_MAX_CONTEXT"context length 하드 캡"메인테이너 노트: 현재 config var 아님. OLLAMA_CONTEXT_LENGTH 사용.
OLLAMA_GPU_LAYERS섞인 튜토리얼에서 보이는 변형 명명Env config에 없음. OLLAMA_NUM_GPU와 동일한 fix.
OLLAMA_CACHE_SIZE"KV cache 메모리 제한"Env config에 없음. 현재 메모리 knob은 OLLAMA_KV_CACHE_TYPE=q8_0 (cache 양자화).
OLLAMA_MEMORY_MODE여러 튜토리얼의 일반적 "메모리 튜닝" 제안Env config에 없음.

보너스 — GGML_METAL_RESIDENCY_KEEP_ALIVE_S (OLLAMA_ 안 붙은 env가 동작하는 케이스)

Ghost vars는 서버가 안 읽는 OLLAMA_* prefix 이름들이야. 그 거울상이 더 흥미로워: OLLAMA_* prefix 없는데도 일반 POSIX 상속 덕분에 효과가 살아있는 env — 그리고 어떤 공식 Ollama 문서에도 언급 없음.

§3 공식 25개 변수

Ollama v0.20.7의 envconfig/config.go에서 추출. 서버가 실제 파싱하는 OLLAMA_* env vars는 이게 전부.

  • OLLAMA_AUTH
  • OLLAMA_CONTEXT_LENGTH
  • OLLAMA_DEBUG
  • OLLAMA_DEBUG_LOG_REQUESTS
  • OLLAMA_EDITOR
  • OLLAMA_FLASH_ATTENTION
  • OLLAMA_GPU_OVERHEAD
  • OLLAMA_HOST
  • OLLAMA_KEEP_ALIVE
  • OLLAMA_KV_CACHE_TYPE
  • OLLAMA_LLM_LIBRARY
  • OLLAMA_LOAD_TIMEOUT
  • OLLAMA_MAX_LOADED_MODELS
  • OLLAMA_MAX_QUEUE
  • OLLAMA_MODELS
  • OLLAMA_MULTIUSER_CACHE
  • OLLAMA_NEW_ENGINE
  • OLLAMA_NOHISTORY
  • OLLAMA_NOPRUNE
  • OLLAMA_NO_CLOUD
  • OLLAMA_NUM_PARALLEL
  • OLLAMA_ORIGINS
  • OLLAMA_REMOTES
  • OLLAMA_SCHED_SPREAD
  • OLLAMA_VULKAN

위에 안 나오는 OLLAMA_ prefix 다른 이름은 이 버전이 안 읽는 거야. 좋은 소식: 프로덕션에서 손이 가는 이름들은 다 여기 있어 — flash attention, KV cache type, keep-alive, host, parallel requests, max loaded models.

이 리스트는 v0.20.7 스냅샷이야. 미래 릴리스는 추가하고 제거해. 어떤 문서도 — 이 페이지 포함 — 무한히 믿지 말고, 로컬 ollama serve 시작 dump에 대조해서 재검증해.

§4 Context Length — 3-Tier 우선순위

가장 오해받는 Ollama 설정이야. v0.15.5+부터, 서버는 3-tier 우선순위 체인으로 context length를 골라. 이걸 이해하면 'context가 왜 이상해?' 혼란의 90%가 사라져.

3 tier (높은 우선순위가 이김)

  1. API 요청 — 요청 body의 options.num_ctx. 아래 모두를 이김.
  2. 서버 env var — 서버 시작 시 OLLAMA_CONTEXT_LENGTH. VRAM auto를 이김.
  3. VRAM auto-detect — 가용 VRAM 기반 서버 디폴트.
가용 VRAM디폴트 num_ctx
< 24 GiB4,096 토큰
24 – 48 GiB32,768 토큰 (32K)
≥ 48 GiB262,144 토큰 (256K)

§5 num_gpu vs OLLAMA_NUM_GPU

이름 충돌이 끝없는 혼란을 만들어. 전체 그림:

위치이름스코프존재?
서버 env varOLLAMA_NUM_GPU서버 디폴트가 됐을 것❌ 현재 envconfig/config.go에 없음. 아래 요청별 경로 사용.
API 요청options.num_gpu요청별api/types.go에 정의.
ModelfilePARAMETER num_gpu모델별✅ 유효.

실제로 뭘 하는 건지

Discrete-GPU 시스템 (NVIDIA / AMD)에서 num_gpu는 모델 layer를 GPU에 몇 개 offload할지 제어해. 999로 두면 Ollama가 모든 layer를 GPU에 (또는 들어가는 만큼) 올려. 낮추면 layer가 시스템 RAM으로 밀려나.

요청별 예제 (discrete GPU)

import httpx

httpx.post("http://localhost:11434/api/chat", json={
    "model": "llama3.1:70b",
    "messages": [{"role": "user", "content": "Hi"}],
    "options": {
        "num_gpu": 999,        # 모든 layer를 GPU로
        "num_ctx": 8192,       # 이 요청 한정 context
    },
})

§6 Outdated Tutorials, 업데이트

아래 각각은 Ollama 역사 어느 시점엔 좋은 조언이었어. 프로젝트가 움직였고, 조언은 안 움직였어. 누구 잘못도 아니야 — stale 된 스냅샷일 뿐.

§7 macOS 서버 정확한 Config

A. shell에서 Homebrew ollama serve

export OLLAMA_HOST=0.0.0.0:11434
export OLLAMA_CONTEXT_LENGTH=131072      # 명시적 128K (생략 시 VRAM-auto)
export OLLAMA_FLASH_ATTENTION=1
export OLLAMA_KV_CACHE_TYPE=q8_0
export OLLAMA_KEEP_ALIVE=-1              # 절대 unload 안 함
export OLLAMA_NUM_PARALLEL=2             # 동시 요청 수
export OLLAMA_MAX_LOADED_MODELS=3

# Bonus (Apple Silicon, §2 보너스 참고): OLLAMA_* var 아니지만
# fork/exec로 Metal runner에 상속됨. 디폴트 180s는 idle 후 첫
# 토큰 latency 처참함. 86400 = 24h 동안 버퍼 따뜻하게.
export GGML_METAL_RESIDENCY_KEEP_ALIVE_S=86400

ollama serve

B. LaunchAgent plist (로그인 시 auto-start)

<key>EnvironmentVariables</key>
<dict>
  <key>OLLAMA_HOST</key>                          <string>0.0.0.0:11434</string>
  <key>OLLAMA_CONTEXT_LENGTH</key>                <string>131072</string>  <!-- OLLAMA_NUM_CTX 아님 -->
  <key>OLLAMA_FLASH_ATTENTION</key>               <string>1</string>
  <key>OLLAMA_KV_CACHE_TYPE</key>                 <string>q8_0</string>
  <key>OLLAMA_KEEP_ALIVE</key>                    <string>-1</string>
  <key>GGML_METAL_RESIDENCY_KEEP_ALIVE_S</key>    <string>86400</string>  <!-- ggml-layer (§2 보너스) -->
</dict>

C. Ollama.app GUI gotcha

# 옵션 1: launchctl setenv (시스템 전역)
launchctl setenv OLLAMA_CONTEXT_LENGTH 131072
launchctl setenv OLLAMA_FLASH_ATTENTION 1
launchctl setenv OLLAMA_KV_CACHE_TYPE q8_0

# 그 다음 Ollama.app 종료하고 재실행

옵션 2: 최근 Ollama.app 빌드 안의 Settings UI 사용 — context-length 슬라이더와 성능 토글 몇 개 있음.

§8 Config 검증 — 유일한 ground truth

Ollama는 인식하는 모든 config를 서버 시작 시 dump해. 이게 ground truth야.

$ ollama serve

time=2026-04-17T10:32:15Z level=INFO source=routes.go:1742 \
  msg="server config" \
  env="map[OLLAMA_CONTEXT_LENGTH:131072 \
       OLLAMA_DEBUG:INFO \
       OLLAMA_FLASH_ATTENTION:true \
       OLLAMA_GPU_OVERHEAD:0 \
       OLLAMA_HOST:http://0.0.0.0:11434 \
       OLLAMA_KEEP_ALIVE:-1 \
       OLLAMA_KV_CACHE_TYPE:q8_0 \
       OLLAMA_MAX_LOADED_MODELS:3 \
       OLLAMA_NUM_PARALLEL:2 \
       …]"

디폴트 빠르게 확인하는 한 줄

# 서버 재시작, 첫 50줄 캡처
ollama serve 2>&1 | head -n 50 | grep -E "server config|total_vram|default_num_ctx"

한 번에 env var와 VRAM 기반 자동 감지 context 디폴트 둘 다 보여.

보너스: ggml-layer env 검증 (§2 보너스)

map[…] dump는 OLLAMA_* var만 커버해. GGML_METAL_RESIDENCY_KEEP_ALIVE_S 같은 non-Ollama env가 runner에 닿았는지 확인하려면 두 군데 봐:

# 1. 라이브 서버 프로세스에 env가 있는지?
ps eww $(pgrep -f 'ollama serve' | head -1) | tr ' ' '\n' | grep -E 'OLLAMA_|GGML_'

# 2. Runner가 모델 로드 시 실제 사용했는지?
grep -m1 'residency set collection' ~/Library/Logs/ollama.log
# 기대: ... (keep_alive = 86400 s)
# 디폴트:  ... (keep_alive = 180 s)

같은 원리가 일반화돼: Ollama가 링크하는 라이브러리 (ggml, Metal, CUDA)에서 온 env는 Ollama 자기 시작 dump에 안 나오지만 표준 POSIX fork/exec 상속으로 효과는 살아있을 수 있어. 라이브 프로세스에 ps eww 그리고 runner 자기 로그 라인이 확인할 유일한 방법이야.

§9 Sources

  • envconfig/config.go — 인식되는 env vars의 결정적 리스트
  • api/types.go — API 요청 옵션의 결정적 리스트 (num_ctx, num_gpu 등)
  • Issue #14130OLLAMA_NUM_GPU/OLLAMA_NUM_CTX/OLLAMA_MAX_CONTEXT가 config 변수 아님을 메인테이너가 확인
  • PR #8938OLLAMA_CONTEXT_LENGTH 도입 (2025년 2월)
  • docs.ollama.com/faq
  • docs.ollama.com/context-length
  • ggml-org/ggml — Metal backend를 소유하고 GGML_METAL_RESIDENCY_KEEP_ALIVE_S를 직접 읽는 임베디드 라이브러리
  • 현장 발견 (§2 보너스)GGML_METAL_RESIDENCY_KEEP_ALIVE_S 동작은 프로덕션 Apple Silicon fleet (Mac Studio M3 Ultra)의 runner 로그 인스펙션으로 학습됨. v0.20.7 기준 어떤 Ollama 쪽 소스에도 문서화 안 됨. 미래 릴리스에서 재검증.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.