M4(24GB)에서 구동되는 로컬 AI 모델 최적화기
이 글은 24GB 메모리를 탑재한 M4 맥북 프로에서 인터넷 없이 로컬 AI 모델을 구동하고 코딩 등의 작업에 활용하는 방법을 다루고 있습니다. 실험 끝에 Qwen 3.5-9B 모델을 발견했으며, SOTA(최고 수준) 모델에는 미치지 못하지만 기본적인 연구, 계획, 그리고 도구 활용이 가능해 유용합니다. 또한 Ollama, LM Studio 등의 환경 설정과 Pi, OpenCode 등 터미널 클라이언트의 구성 방법 및 추천 파라미터까지 상세히 공유하고 있습니다.
저는 로컬에서 AI 모델을 돌려보는 실험을 간헐적으로 해왔고, 마침 꽤 괜찮게 작동하는 세팅을 찾아냈습니다. SOTA(State-of-the-art, 최고 수준) 모델의 출력 수준에는 미치지 못하지만, 로컬 모델이 기본 작업, 리서치, 기획 등을 수행할 수 있다는 사실의 흥분감이 그 단점을 충분히 상쇄합니다! 인터넷 연결이 전혀 필요 없죠! 아주 작은 부분이나마 미국 거대 빅테크 기업들에 대한 의존도를 줄일 수 있는 방법이라는 점도 빼놓을 수 없습니다.
하지만 솔직히 말하자면, 이걸 세팅하는 과정은 결코 쉽지 않았습니다. 먼저 모델을 어떤 프로그램으로 구동할지 선택해야 합니다: Ollama, llama.cpp, 또는 LM Studio 중에서요. 각각 고유의 특성과 한계가 있으며, 지원하는 모델도 모두 다릅니다. 당연히 사용할 모델도 직접 골라야 합니다. 메모리에 들어오면서도 일렉트론(Electron) 기반 앱들을 충분히 돌릴 여유 공간이 남고, 최소 64K 이상, 이상적으로는 128K 이상의 컨텍스트 윈도우(Context window)를 제공하는 가장 좋은 모델을 원하니까요.
가장 최근에는 Qwen 3.6 Q3, GPT-OSS 20B, Devstral Small 24B 등을 시도해봤습니다. 이 모델들은 기술적으로는 메모리에 들어오지만 실제로 사용하기는 불가능했고, Gemma 4B는 잘 돌아가지만 도구 사용(Tool use) 기능에서 큰 어려움을 겪었습니다. 그리고 살펴봐야 할 수많은 설정 옵션들이 존재합니다. 익숙한 'temperature(온도)' 같은 것부터 'K Cache Quantization Type' 같은 생소한 옵션까지 말이죠. 이런 도구들 대부분은 기본 권장 설정을 제공하지만, '사고(Thinking) 모드'를 활성화하느냐의 여부에 따라 적절한 옵션이 달라질 수 있습니다!
제가 작동에 성공한 최고의 모델은 Qwen 3.5-9B(4-bit 양자화, q4_k_s, HuggingFace 링크)입니다. LM Studio 환경에서 초당 약 40 토큰이라는 준수한 속도로 작동하며, 사고 모드 활성화, 성공적인 도구 사용, 그리고 128K 컨텍스트 윈도우까지 모두 지원합니다. SOTA 모델과 비교하면 더 쉽게 주의를 잃거나, 가끔 무한 루프에 빠지거나, 질문을 오해하기도 합니다. 하지만 다른 많은 앱들을 띄워놓은 24GB 맥북 프로 환경에서 굴러간다는 사실이 놀라울 정도로 훌륭합니다!
사고 모드와 코딩 작업을 위한 추천 설정은 다음과 같습니다: 정확한 코딩 작업(예: 웹 개발)을 위한 사고 모드 설정: temperature=0.6, top_p=0.95, top_k=20, min_p=0.0, presence_penalty=0.0, repetition_penalty=1.0
사고 모드를 활성화하려면 모델을 선택한 뒤 설정(Configuration)으로 들어가서, Inference 탭의 맨 아래로 스크롤해 Prompt Template에 {% set enable_thinking = true %}를 추가해야 했습니다.
저는 이 모델을 'Pi'와 'OpenCode'라는 두 가지 인터페이스를 통해 사용해왔습니다. 아직 어떤 것을 더 선호하는지 확실히 정하지는 못했습니다. Pi가 반응 속도는 조금 더 빠른 느낌이지만, 자체적으로 구조를 짜고 모든 것을 커스터마이징할 수 있다는 아이디어 자체는 마음에 들어도 기본값(Default) 설정이 좀 더 합리적이였으면 좋겠다는 생각이 듭니다. 실제 프로젝트 작업 시간보다 Pi 설정을 완벽하게 다듬는 데 더 많은 시간을 쏟게 될 수도 있습니다!
[Pi 설정 방법] ~/.pi/agent/models.json 파일의 내용은 다음과 같습니다: { "providers": { "lmstudio": { "baseUrl": "http://localhost:1234/v1", "api": "openai-completions", "apiKey": "lm-studio", "models": [ { "id": "qwen3.5-9b@q4_k_s", "reasoning": true, "compat": { "thinkingFormat": "qwen-chat-template" } } ] } } }
그리고 방해가 되는 '사고 과정' 출력을 숨기려면, ~/.pi/agent/settings.json 파일에 "hideThinkingBlock": true 를 추가하면 됩니다.
[OpenCode 설정 방법] ~/.config/opencode/opencode.json 파일의 내용은 다음과 같습니다: { "$schema": "https://opencode.ai/config.json", "provider": { "lmstudio": { "npm": "@ai-sdk/openai-compatible", "name": "LM Studio (local)", "options": { "baseURL": "http://127.0.0.1:1234/v1" }, "models": { "qwen3.5-9b@q4_k_s": { "name": "Qwen 3.5 9B Q4_K_S", "tools": true, "context_length": 131072, "max_tokens": 32768 } } } }, "model": "lmstudio/qwen3.5-9b@q4_k_s" }
[SOTA 모델과의 비교] Qwen 3.5 9B(Q4) 같은 모델은 SOTA 모델들처럼 오랜 시간에 걸쳐 독립적으로 복잡한 문제를 해결하는 능력과는 거리가 멉니다. 한 번에 전체 앱을 만들어 달라고 요청하는 것은 의미가 없으며, 그냥 노트북이 뜨거워져 허벅지만 데일 뿐 아무런 결과도 얻지 못할 것입니다. (역주: 원문이 'What does'에서 끊겼으나, 문맥상 작은 단위의 업무에 활용하는 것이 적합하다는 의미로 마무리됩니다.)