Mac Mini 24GB에서 Qwen3.5 27B 로컬 LLM 최적화 (Ollama + Codex CLI)


최근 로컬 환경에서 대형 언어 모델을 직접 실행하는 사례가 많아지고 있다. 특히 Apple Silicon 환경에서는 unified memory 구조 덕분에 생각보다 큰 모델도 실행할 수 있다.

이번 글에서는 Mac Mini 24GB 환경에서 Qwen3.5 27B 양자화 모델을 안정적으로 실행하기 위해 진행한 최적화 과정을 정리한다.

목표는 다음과 같다.

  • 27B 모델을 swap 폭발 없이 안정적으로 실행
  • 로컬 LLM을 개발 워크플로우에서 활용
  • Codex CLI와 연결하여 코드 작업에 사용

시스템 환경

Machine: Mac Mini (Apple Silicon M4)
RAM: 24GB unified memory
OS: macOS
Inference Engine: Ollama
Primary Model: Qwen3.5 27B (Q4_K_M quantization)
Context Length: 32K

로컬 모델 실행 구조:

Codex CLI

OpenAI API compatible endpoint

Ollama

Qwen3.5 27B (local)

Qwen3.5 27B 모델 선택

Mac 24GB 환경에서는 모델 크기 선택이 매우 중요하다.

모델 크기안정성
7B매우 안정
13B안정
20B안정
27B한계 근처
35B사실상 불가능

선택한 모델: qwen3.5:27b (Q4_K_M 양자화)

예상 메모리 사용량:

Model weights  ≈ 17GB
KV cache       ≈ 1.5~2GB
macOS + system ≈ 3~4GB
────────────────────────
합계           ≈ 22~23GB

즉, 24GB 시스템에서는 거의 한계에 가까운 구성이다.


Ollama 설치 및 모델 다운로드

brew install ollama
ollama pull qwen3.5:27b

32K Context 커스텀 모델 생성

기본 모델 설정을 목적에 맞게 커스터마이징하기 위해 Modelfile을 사용해 별도 모델을 생성했다.

Modelfile:

FROM qwen3.5:27b

PARAMETER num_ctx 32768

모델 생성:

ollama create qwen3.5-27b-q4km-32k -f Modelfile

생성 확인:

ollama list

Ollama 메모리 최적화

Mac 24GB 환경에서 안정적으로 실행하려면 환경 변수 설정이 중요하다.

OLLAMA_FLASH_ATTENTION=1
OLLAMA_KV_CACHE_TYPE=q8_0
OLLAMA_NUM_PARALLEL=1
OLLAMA_MAX_LOADED_MODELS=1
OLLAMA_KEEP_ALIVE=10m
OLLAMA_HOST=127.0.0.1:11434
옵션설명
FLASH_ATTENTION=1Apple Silicon에서 attention 성능 개선
KV_CACHE_TYPE=q8_0KV cache 메모리 효율 개선
NUM_PARALLEL=1병렬 추론으로 인한 메모리 스파이크 방지
MAX_LOADED_MODELS=1모델 중복 로드 방지
KEEP_ALIVE=10midle 시 모델 unload
HOST=127.0.0.1로컬 접근만 허용

macOS 메모리 상태 확인

대형 모델을 실행할 때는 메모리 상태를 수시로 확인하는 게 좋다.

sudo memory_pressure

테스트 중 메모리 상태:

System-wide memory free percentage: 17~22%

이 범위에서는 시스템이 안정적으로 유지된다.


Codex CLI와 로컬 Ollama 연결

로컬 모델을 코드 작업에 사용하기 위해 Codex CLI와 Ollama를 연결했다.

처음에는 다음 명령어를 시도했다.

ollama launch codex --model qwen3.5-27b-q4km-32k

실패. 이유는 qwen3.5-27b-q4km-32k가 Ollama registry 모델이 아니라 로컬에서 생성한 custom model이기 때문이다.

해결 방법

Codex CLI는 OpenAI API 호환 endpoint를 지원한다. Ollama도 동일한 형식의 endpoint를 제공하므로 다음과 같이 연결할 수 있다.

OPENAI_API_KEY=ollama \
OPENAI_BASE_URL=http://127.0.0.1:11434/v1 \
codex -m qwen3.5-27b-q4km-32k

흐름:

Codex CLI → OpenAI API → Ollama (localhost:11434) → Qwen3.5 27B

실제 테스트 결과

작업결과
긴 코드 분석안정적
장문 reasoning (10k+ 토큰)가능
한국어 장문 생성자연스러움
메모리 사용량한계 근처 유지

운영 팁

Mac 24GB에서 27B 모델을 안정적으로 운영하려면 다음을 지켜야 한다.

병렬 추론 금지

OLLAMA_NUM_PARALLEL=1

Context 길이 관리 32K를 초과하면 swap 위험이 높아진다.

모델 idle unload

OLLAMA_KEEP_ALIVE=10m

결론

Mac Mini 24GB 환경에서 Qwen3.5 27B는 KV cache 최적화, 병렬 추론 제한, context 길이 관리 조건을 지키면 안정적으로 실행할 수 있다.

다만 응답 생성에 상당한 시간이 소요되기 때문에, 배치 처리나 야간 자동화처럼 대기 시간이 문제되지 않는 작업에 한해 실용적이다. 실시간 대화나 빠른 응답이 필요한 용도라면 7B~9B 모델을 사용하는 게 현실적이다.