MLX가 뭐고, 내 Mac에서 처음 돌려 보기
목차
오늘 배울 것
- MLX가 무엇인지 한 문장으로 말할 수 있다.
- 내 Mac에 MLX를 설치한다.
- MLX로 첫 계산을 해 본다.
MLX를 한 문장으로
MLX는 Apple 실리콘 Mac에서 숫자 계산을 빠르게 해 주는 Python 도구다.
Apple의 머신러닝 연구팀이 만들었고, 누구나 무료로 쓸 수 있다.
“머신러닝 도구”라고 하면 어렵게 들린다. 그런데 머신러닝의 속을 열어 보면 대부분 엄청나게 많은 숫자 계산이다.
- 사진은 픽셀마다 색깔 숫자가 적힌 큰 표다.
- 문장도 단어마다 번호를 붙이면 숫자 목록이 된다.
- 모델을 학습시킨다는 것은 이 숫자들을 곱하고 더하는 일을 아주 많이 반복하는 것이다.
그래서 머신러닝 도구의 핵심 일은 “큰 숫자 묶음을 빨리 계산하기”다. MLX는 이 일을 Mac에서 잘하도록 만든 도구다.
NumPy를 써 봤다면 “Mac GPU에서 돌아가는 NumPy”라고 생각해도 처음에는 충분하다. 사용법이 많이 닮았다.
왜 하필 MLX일까
머신러닝 도구는 PyTorch처럼 유명한 것이 이미 많다. 그래도 Mac에서 MLX를 쓰는 이유는 처음부터 Apple 실리콘(M1, M2, M3, M4 칩)에 맞춰 만들었기 때문이다.
특징을 세 가지만 기억하면 된다. 하나씩 이 시리즈에서 자세히 다룬다.
| 특징 | 쉽게 말하면 | 자세히 |
|---|---|---|
| NumPy와 비슷한 사용법 | 이미 아는 방식으로 쓸 수 있다 | 2편 |
| 계산을 미뤘다가 한 번에 한다 | 필요할 때까지 계산하지 않는다 | 3편 |
| CPU와 GPU가 같은 메모리를 쓴다 | 데이터를 옮기느라 기다리지 않는다 | 4편 |
세 번째가 특히 중요하다. 그래픽카드가 따로 달린 컴퓨터에서는 CPU용 메모리와 GPU용 메모리가 따로 있어서, GPU로 계산하려면 데이터를 복사해서 옮겨야 한다. Apple 실리콘은 CPU와 GPU가 같은 메모리를 함께 쓴다. 두 사람이 각자 책상을 쓰면서 서류를 주고받는 대신, 큰 책상 하나를 같이 쓰는 것과 같다. MLX는 이 구조를 그대로 활용한다.
준비물 확인
MLX를 쓰려면 세 가지가 필요하다.
- Apple 실리콘 Mac (M1 이상)
- macOS 14 이상
- Python 3.10 이상 (Apple 실리콘용으로 설치된 Python)
터미널에서 하나씩 확인해 보자.
# 1. 칩 확인: "Apple M1" 같은 글자가 나오면 된다
sysctl -n machdep.cpu.brand_string
# 2. macOS 버전 확인: 14 이상이면 된다
sw_vers -productVersion
# 3. Python 버전 확인: 3.10 이상이어야 한다
python3 --version
이 글을 쓴 Mac(macOS 15.6)에 기본으로 들어 있는 python3는 3.9.6이었다. 이 Python으로 pip install mlx를 하자 오류 없이 예전 버전(0.29.3)이 설치됐다. 최신 버전은 0.32.4다. 버전이 3.10보다 낮다면 아래 방법으로 새 Python을 쓰자.
설치하기
여기서는 uv라는 도구를 쓴다. uv는 Python 버전과 패키지를 대신 챙겨 주는 도구다. Mac에 깔린 Python 버전을 신경 쓰지 않아도 된다.
# uv 설치 (한 번만 하면 된다)
brew install uv
# 공부용 폴더 만들기
mkdir mlx-study && cd mlx-study
# Python 3.12로 가상환경 만들기
uv venv -p 3.12
# 가상환경 켜기
source .venv/bin/activate
# MLX 설치
uv pip install mlx
“가상환경”이라는 말이 나왔다. 가상환경은 이 폴더 전용 Python 상자다. 여기에 설치한 패키지는 이 상자 안에만 있어서, 다른 프로젝트를 망가뜨리지 않는다. 터미널을 새로 열면 source .venv/bin/activate를 다시 해야 상자 안으로 들어간다.
설치가 잘 됐는지 확인하자.
python -c "import mlx.core as mx; print(mx.__version__)"
0.32.4처럼 버전 숫자가 나오면 성공이다.
첫 계산 해 보기
first.py 파일을 만들고 아래 코드를 붙여 넣는다.
import mlx.core as mx
a = mx.array([1, 2, 3])
b = mx.array([10, 20, 30])
print(a + b)
print(a * 2)
실행하면 이렇게 나온다.
python first.py
array([11, 22, 33], dtype=int32)
array([2, 4, 6], dtype=int32)
한 줄씩 보자.
import mlx.core as mx: MLX의 핵심 기능을mx라는 짧은 이름으로 불러온다. 앞으로 거의 모든 코드가 이 줄로 시작한다.mx.array([1, 2, 3]): 숫자 세 개를 MLX 배열에 담는다. 배열은 숫자를 줄 세워 담은 그릇이다.a + b: 같은 자리에 있는 숫자끼리 더한다. 1+10, 2+20, 3+30.a * 2: 모든 숫자에 2를 곱한다.for문을 쓰지 않아도 된다.
결과 끝에 붙은 dtype=int32는 “이 배열에는 정수가 들어 있다”는 표시다. 2편에서 자세히 본다.
Python 리스트로 [1, 2, 3] + [10, 20, 30]을 하면 더해지지 않고 [1, 2, 3, 10, 20, 30]처럼 이어 붙여진다. MLX 배열은 같은 자리끼리 계산한다. 이 차이가 숫자 계산 도구를 쓰는 첫 번째 이유다.
조금 더: 표 모양 숫자 계산
머신러닝에서는 숫자 한 줄보다 표 모양(행렬)을 훨씬 많이 쓴다. 표 두 개를 곱하는 것도 한 줄이면 된다.
import mlx.core as mx
m = mx.array([[1.0, 2.0],
[3.0, 4.0]])
print(m @ m)
array([[7, 10],
[15, 22]], dtype=float32)
@는 행렬 곱이다. 지금은 계산 방법을 몰라도 된다. “머신러닝 모델 안에서 아주 자주 쓰이는 계산”이라는 것만 기억하자.
지금 GPU에서 돌고 있을까?
import mlx.core as mx
print(mx.default_device())
Device(gpu, 0)
gpu라고 나오면 MLX가 따로 설정하지 않아도 기본으로 GPU를 쓰고 있다는 뜻이다.
정리
- MLX는 Apple 실리콘 Mac에서 숫자 계산을 빠르게 해 주는 Python 도구다.
- 머신러닝은 결국 큰 숫자 묶음의 계산이고, MLX는 그 계산을 Mac GPU에서 한다.
- Python 3.10 이상이 필요하다. Python 3.9로 설치했더니 오류 없이 예전 버전이 깔렸다.
mx.array로 숫자를 담고,+,*,@로 계산한다.- 기본 계산 장치는 GPU다.
다음 편
다음 편에서는 오늘 잠깐 본 배열을 제대로 다룬다. 배열의 모양(shape)과 숫자 종류(dtype), 원하는 부분만 꺼내는 방법을 배운다.