Skip to content
KyuHyuk Blog

Mac mini에 로컬 AI 구축하기: mlx-dspark와 Claude Code 설정

2024년 12월, 로컬 AI를 직접 경험해 보고 싶어서 RAM 64GB 옵션의 M4 Pro Mac mini를 구매했습니다.
2026년 9월 현재 반도체 가격 상승세를 보면, 다시는 이 가격에 구하기 힘들지 않을까 싶습니다.😢
My Mac mini Specification

그동안 다양한 프로그램들(llama.cpp, oMLX, Unsloth Studio, mlx-dspark)과 모델을 직접 사용해 보며 정리한, 실사용에 가장 만족스러웠던 최적의 설정값을 공유하고 기록해 두고자 이 글을 작성하게 되었습니다.

mlx-dspark 설치

mlx-dspark는 DeepSeek에서 공개한 추측 디코딩(Speculative Decoding) 프레임워크인 DSpark를 Apple Silicon 전용 MLX 프레임워크와 결합해 최적화한 프로그램입니다.

MLX란?
Apple M1~M4 등 Apple Silicon 환경에서 머신러닝 연산을 효율적으로 처리하도록 돕는 프레임워크입니다. NVIDIA 환경의 CUDA처럼 GPU 자원을 적극적으로 활용할 수 있게 해줍니다.

mlx-dspark의 README.md (The Mac App)을 참고해 설치할 수 있습니다.
brew 명령어를 사용하므로 Homebrew가 미리 설치되어 있어야 합니다.

brew tap ARahim3/mlx-dspark https://github.com/ARahim3/mlx-dspark
brew trust arahim3/mlx-dspark
brew install --cask mlx-dspark
xattr -dr com.apple.quarantine /Applications/mlx-dspark.app

설치가 완료되면 mlx-dspark 앱이 생성됩니다.
Applications

mlx-dspark를 실행하면 아래 화면과 같이 초기 환경 설정을 자동으로 시작합니다.
mlx-dspark

잠시 후 모델 선택 화면이 나오면 Qwen3.6-35B-A3B-4bit를 선택합니다.
다른 모델을 선택해도 문제없지만, 목록 중 생성이 빠르면서도 답변 퀄리티가 가장 뛰어났던 모델이었기 때문에 권장합니다.
mlx-dspark Select Model

모델 다운로드 및 로드가 완료되면 아래와 같은 실행 화면이 표시됩니다.
mlx-dspark Lab

Claude Code 설치 및 설정

터미널에서 아래 명령어를 실행하여 Claude Code를 설치합니다.

curl -fsSL https://claude.ai/install.sh | bash

설치가 완료되면 mlx-dspark claude --url http://127.0.0.1:8484 명령어를 통해 바로 Claude Code를 터미널에서 사용할 수 있습니다.

만약 Visual Studio Code 환경에서 연동하여 사용하고 싶다면 아래 추가 설정을 진행해 주세요.

1. Claude Code 설정 파일 수정

Base URL과 기본 모델을 지정하기 위해 ~/.claude/settings.json 파일에 아래 내용을 작성합니다.

{
  "$schema": "https://json.schemastore.org/claude-code-settings.json",
  "env": {
    "ANTHROPIC_BASE_URL": "http://127.0.0.1:8484",
    "ANTHROPIC_AUTH_TOKEN": "If you have set an API Key, please fill it in.",
    "ANTHROPIC_DEFAULT_OPUS_MODEL": "Qwen3.6-35B-A3B-Dspark-v1",
    "ANTHROPIC_DEFAULT_SONNET_MODEL": "Qwen3.6-35B-A3B-Dspark-v1",
    "ANTHROPIC_DEFAULT_HAIKU_MODEL": "Qwen3.6-35B-A3B-Dspark-v1",
    "API_TIMEOUT_MS": "3000000",
    "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1"
  },
  "permissions": {
    "deny": [
      "LSP"
    ]
  },
  "model": "opus",
  "theme": "dark"
}~/.claude/settings.json

2. VS Code 환경 변수 설정

~/.claude/settings.json에 CLAUDE_CODE_AUTO_COMPACT_WINDOW나 CLAUDE_AUTOCOMPACT_PCT_OVERRIDE를 설정하더라도 VS Code 확장 프로그램에서는 정상 적용되지 않는 이슈가 있습니다. VS Code 연동 시 Context 크기와 Auto Compact 동작을 원활하게 제어하려면 아래 단계를 진행해야 합니다.

  1. VS Code에서 설정(Settings) → 확장(Extensions) → Claude Code → Environment Variables로 이동한 뒤 ‘settings.json에서 편집’을 클릭합니다.
    VScode Claude Code Setting
  2. claudeCode.environmentVariables 배열에 아래와 같이 환경 변수를 추가합니다.
"claudeCode.environmentVariables": [
  {
    "name": "CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY",
    "value": "1"
  },
  {
    "name": "CLAUDE_CODE_AUTO_MODE_SERVER",
    "value": "0"
  },
  {
    "name": "CLAUDE_CODE_DISABLE_ADVISOR_TOOL",
    "value": "1"
  },
  {
    "name": "CLAUDE_CODE_AUTO_COMPACT_WINDOW",
    "value": "128000"
  },
  {
    "name": "DISABLE_AUTOUPDATER",
    "value": "1"
  },
  {
    "name": "DISABLE_FEEDBACK_COMMAND",
    "value": "1"
  },
  {
    "name": "DISABLE_ERROR_REPORTING",
    "value": "1"
  },
  {
    "name": "CLAUDE_CODE_MAX_CONTEXT_TOKENS",
    "value": "100000"
  },
  {
    "name": "CLAUDE_CODE_MAX_OUTPUT_TOKENS",
    "value": "8192"
  },
  {
    "name": "CLAUDE_AUTOCOMPACT_PCT_OVERRIDE",
    "value": "50"
  },
  {
    "name": "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC",
    "value": "1"
  }
]

이제 VS Code 내에서 로컬 모델 기반의 Claude Code를 원활하게 사용할 수 있습니다.
VScode Claude Code - Claude Code

가장 빠르게 동작할 때는 80 ~ 90 tok/s 수준의 생성 속도를 보여주며, 컨텍스트가 길어져 속도가 떨어지더라도 최소 30 tok/s 이상을 일정하게 유지합니다. 개인 프로젝트나 코드 작성 용도로 활용하기에 충분한 성능이라고 판단됩니다.
mlx-dspark - Status

Performance Monitoring Script

http://localhost:8484/metrics를 통해 다양한 실시간 성능 지표 데이터를 얻을 수 있습니다.

PP(Prompt Processing)와 TG(Token Generation) 속도를 계산해 한눈에 확인하고 싶다면 아래 스크립트를 활용해 보세요.

#!/bin/sh
RESPONSE=$(curl -s http://localhost:8484/metrics)
if [ -z "$RESPONSE" ]; then
    echo "Error: Failed to fetch data."
    exit 1
fi

echo "$RESPONSE" | jq -r '
  .prompt_tokens as $pt |
  .completion_tokens as $ct |
  .mean_tokens_per_sec as $m_tps |
  .mean_decode_tokens_per_sec as $tg |
  (.prefix_cache.cached_tokens // 0) as $pc |

  # Calculate Cache Efficiency
  (($pt + $pc) as$total_p | if $total_p > 0 then ($pc / $total_p * 100) else 0 end) as$cache_eff |

  # Calculate Prompt Processing
  (if $m_tps > 0 then ($ct / $m_tps) else 0 end) as$total_time |
  (if $tg > 0 then ($ct / $tg) else 0 end) as$decode_time |
  ($total_time - $decode_time) as$prompt_time |
  (if $prompt_time > 0 then ($pt / $prompt_time) else 0 end) as$pp |

  # Definition of a function to round to two decimal places
  def to_2f: . * 100 | round / 100;

  # Print Results
  "Cache Efficiency                : \($cache_eff | to_2f)%\n" +
  "Prompt Processing (excl. cached): \($pp | to_2f) tok/s\n" +
  "Token Generation                : \($tg | to_2f) tok/s"
'mlx-dspark-metrics.sh

Share this post:

Previous Post
나만의 NXP LPC812 Board를 만들어보자!