mx.array로 시작해
MLX 배열은 통합 메모리에 놓이는 자료형이 있는 N차원 버퍼야. Python 목록, NumPy 배열, 다른 MLX 배열로 만들 수 있고 shape, dtype, ndim을 제공해. NumPy 배열이나 PyTorch 텐서를 써봤다면 첫 30초는 똑같이 느껴질 거야.
차이는 작아 보여도 설계 전체를 드러내. 어디에도 device 인자가 없어. 다음 레슨에도, 그다음에도 계속 안 나올 거야.
자료형은 과학 전반보다 머신러닝에 맞췄어
NumPy는 범용 과학 계산 도구라 complex128, datetime64, 구조화 레코드처럼 아주 넓은 숫자 체계를 지원해. MLX의 자료형은 머신러닝 작업에 맞춰 좁혔어. mlx 0.31.x에서는 기본인 float32와 float16, bfloat16, int8 / int16 / int32 / int64, uint8 / uint16 / uint32 / uint64, bool, 몇 가지 복소수형을 지원해. 날짜형, 구조화 레코드, 확장 정밀도는 없어.
이건 결함보다 의도된 선택에 가까워. 지원 범위가 작으면 커널 코드가 단순해지고, 최적화할 갈래와 관리할 모서리 사례도 줄어. complex128이 꼭 필요하다면 MLX가 아닌 다른 도구가 맞을 가능성이 커.
배열은 처음부터 통합 메모리에 살아
모든 mx.array는 기본적으로 통합 메모리에 놓여. Apple Silicon에서 mx.default_device()는 Device(gpu, 0)를 돌려주지만, foundations.lesson2에서 봤듯 이 값은 다음 연산을 어느 장치가 맡을지 알려주는 표지야. 바이트가 사는 위치가 아니야. 바이트는 처음부터 끝까지 하나의 공유 메모리 풀에 있어.
자료형 승격은 한 번 더 확인해
int32_array + float32_array처럼 서로 다른 자료형을 섞으면 MLX는 대체로 NumPy와 같은 규칙으로 더 넓은 자료형으로 올려. 언제나 같지는 않아. 특히 실수형인 학습 가중치와 정수 색인을 섞을 때는 의도한 지점에서 .astype(mx.float32)를 명시하는 습관이 안전해. 암묵적 승격은 한 시간짜리 디버깅을 만나기 전까지만 편하거든.