본문 바로가기
C.W.K.
Stream
Lesson 03 of 06 · published

어떤 Mac에서 MLX를 제대로 쓸 수 있나

~10 min · hardware, apple-silicon, macos

Level 0호기심
0 XP0/51 lessons0/15 achievements
0/100 XP to next level100 XP to go0% complete

먼저 하드웨어부터 솔직하게 보자

MLX는 모든 M 시리즈 Mac에서 돌아가. 기술적으로는 그게 답이야. 하지만 "돌아간다"는 말은 범위가 너무 넓어. 이 퀘스트의 51개 레슨을 따라가는 것과 70B 모델을 파인튜닝해 책상 위에서 서빙하는 건 전혀 다른 경험이거든. 프레임워크는 같아도 쓸 수 있는 규모가 달라져.

여기서는 실제 호환성 지도를 그릴 거야. 최소 조건이 무엇인지, 메모리 사양별로 어디까지 가능한지, 터미널 명령 몇 줄로 지금 가진 기계를 확인하는 법을 다뤄.

최소 조건

  • Apple Silicon Mac — M 시리즈 칩이면 돼. Intel Mac은 안 돼. MLX에 Linux용 부분적 CUDA 백엔드도 생겼지만 그건 별개고, Mac에서는 M 시리즈 전용이야.
  • macOS 14.0 (Sonoma) 이상 — 이전 버전에는 MLX가 기대하는 Metal 기능이 없어. macOS 15 (Sequoia)랑 macOS 26 (Tahoe)도 괜찮아. Sequoia 다음부터 Apple이 연도 기준 번호로 바꿔서 Tahoe는 16이 아니라 26이야.
  • Python 3.10 이상 — ARM으로 직접 실행해야 해. Rosetta의 x86 흉내 내기 환경에서는 안 돼. 다음 트랙 첫 레슨에서 확인 과정을 밟을 거야.

조건 하나라도 어기면 친절한 MLX 오류가 나오는 게 아니야. 알아보기 힘든 pip install 오류가 나거나, 더 나쁘면 설치는 끝난 뒤 첫 import에서 세그멘테이션 오류가 터져. 아래 세 명령이 이 세 가지 실패를 한꺼번에 걸러줘.

2분 호환성 확인

아무 터미널에서나 실행해. 예상 출력은 내 사무실 Mac인 M3 Ultra Studio 기준이야. 숫자는 달라도 괜찮지만 출력의 형태는 같아야 해.

메모리별로 어디까지 가능한가

2026-05 기준의 대략적인 지도야. 가장 중요한 값은 통합 메모리 크기야. 모델이 바로 거기에 들어가니까. 실제로 들어맞는지는 양자화 방식과 KV 캐시 크기에도 달려 있어. 레슨 4에서 냅킨 계산으로 확인할 거야.

  • 8 GB MacBook Air (기본형 M 시리즈) — 3B–4B 매개변수의 Q4 같은 작은 모델만 가능해. 퀘스트 자료는 돌아가지만 트랙 3의 mlx-lm 실험에는 더 작은 모델이 필요해.
  • 16 GB — 7B Q4는 여유가 있고 7B fp16은 빠듯해. 70B는 불가능해. 이 퀘스트 대부분은 무리 없이 돌아가.
  • 32 GB — 7B fp16과 13B Q4가 들어가. LoRA로 7B 파인튜닝도 가능해.
  • 64 GB — 13B fp16이 들어가고, 70B Q4는 간신히 들어가. 트랙 5의 처음부터 끝까지 이어지는 파인튜닝 실습도 편하게 할 수 있어.
  • 96 GB — 70B Q4가 숨 쉴 여유까지 생기는 첫 구간이야.
  • 128 GB — 70B Q4에는 넉넉하지만 fp16은 안 들어가. 70B를 가중치당 2바이트로 잡으면 약 140 GB고, KV 캐시는 아직 한 블록도 안 잡은 상태야.
  • 192 GB — 180B급 Q4가 들어가. 추론에서는 NVIDIA GPU 8개짜리 랙과 경쟁할 수 있어.
  • 512 GB (M3 Ultra Studio) — 부가 메모리까지 포함해 405B Q4가 들어가. 최전선급 모델을 어디서 돌릴 수 있는지에 대한 답이 바뀌는 구간이야. 레슨 4에서 직접 계산해볼 거야.

Rosetta 함정, 미리 보기

Python이 Rosetta의 x86 환경에서 돌고 있으면 MLX pip install이 조용히 끝날 수도 있어. 의존성 가운데 x86 휠이 있는 패키지가 있어서 그래. 그러고는 첫 import에서 세그멘테이션 오류나 "no matching wheel"을 만나게 돼. 다음 트랙 첫 레슨에서 자세히 다루고, 여기서는 uname -marm64를 출력해야 한다는 것만 단단히 잡아둬.

Code

2분 호환성 체크 (아무 터미널에서)·bash
# 1. What chip and how much unified memory?
system_profiler SPHardwareDataType | grep -E "Chip|Memory"
# Sample (M3 Ultra Studio):
#   Chip: Apple M3 Ultra
#   Memory: 512 GB

# 2. Native ARM, not Rosetta?
uname -m
# Must print: arm64

sysctl -n hw.optional.arm64
# Must print: 1

# 3. macOS version (need ≥ 14.0)
sw_vers -productVersion
# Sample: 15.7.5  (anything 14.x, 15.x, 16.x is fine)
현재 메모리 압력 — MLX 작업 전의 좋은 기준선·bash
# How much of your unified memory is currently free?
# Multiply free pages by page size (16384 bytes on Apple Silicon).
vm_stat | awk '/Pages free/ {gsub("\\.", "", $3); print "Free pages :", $3}
                /Pages active/ {gsub("\\.", "", $3); print "Active pages:", $3}'

# Quick GB summary:
memory_pressure | head -3 || true

External links

Exercise

Mac에서 2분 호환성 확인을 실행하고 칩 이름, 통합 메모리 용량, macOS 버전을 적어둬. 이제 본문의 메모리별 목록에서 해당하는 줄을 찾아. 그보다 위 구간에 있어 돌리고 싶지만 들어가지 않는 모델 하나와, 현재 사양에서 넉넉히 들어가는 모델 하나를 골라봐. 트랙 3의 mlx-lm 실습에서 두 숫자를 모두 쓰게 될 거야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

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

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