Tutorial MLX: Framework Machine Learning Apple untuk Apple Silicon
MLX adalah framework machine learning open-source dari Apple yang dirancang khusus untuk Apple Silicon (M1, M2, M3, M4). Framework ini menawarkan API yang familiar bagi pengguna NumPy dan PyTorch, dengan performa yang dioptimalkan untuk chip Apple. MLX menjadi pilihan utama bagi developer yang ingin menjalankan model ML secara lokal di perangkat Mac tanpa memerlukan GPU NVIDIA.
Dalam tutorial ini, kita akan mempelajari cara instalasi, penggunaan dasar, fine-tuning model LLM, inferensi model, dan best practices untuk memaksimalkan performa MLX di perangkat Apple Silicon.
Mengapa MLX?
Sebelum memulai, mari kita pahami mengapa MLX layak dipelajari:
Instalasi
Prasyarat
- macOS 13.5 atau lebih baru
- Apple Silicon (M1/M2/M3/M4)
- Python 3.9 atau lebih baru
Instalasi MLX Core
pip install mlx
Instalasi MLX-LM (untuk Language Models)
pip install mlx-lm
Instalasi MLX-VLM (untuk Vision-Language Models)
pip install mlx-vlm
Instalasi dari Source (Opsional)
git clone https://github.com/ml-explore/mlx.git
cd mlx
pip install -e .
Verifikasi Instalasi
import mlx.core as mx
import mlx.nn as nn
print(f"MLX version: {mx.version}")
print(f"Default device: {mx.defaultdevice()}")
Test sederhana
a = mx.array([1, 2, 3, 4, 5])
print(f"Array: {a}")
print(f"Sum: {mx.sum(a)}")
Output yang diharapkan:
MLX version: 0.x.x
Default device: Device(gpu, 0)
Array: array([1, 2, 3, 4, 5], dtype=int32)
Sum: array(15, dtype=int32)
Penggunaan Dasar
Operasi Array
MLX array sangat mirip dengan NumPy, tetapi dioptimalkan untuk Apple Silicon:
import mlx.core as mx
Membuat array
a = mx.array([1.0, 2.0, 3.0, 4.0])
b = mx.ones((3, 4))
c = mx.zeros((2, 3))
d = mx.random.normal((5, 5))
print(f"Shape of b: {b.shape}")
print(f"Dtype of a: {a.dtype}")
Operasi matematika
x = mx.array([[1, 2], [3, 4]], dtype=mx.float32)
y = mx.array([[5, 6], [7, 8]], dtype=mx.float32)
Element-wise operations
print(f"Addition: {x + y}")
print(f"Multiplication: {x y}")
Matrix multiplication
print(f"MatMul: {x @ y}")
Reduction operations
print(f"Sum: {mx.sum(x)}")
print(f"Mean: {mx.mean(x)}")
print(f"Max: {mx.max(x)}")
Lazy Evaluation
Salah satu fitur unik MLX adalah lazy evaluation. Komputasi tidak langsung dieksekusi sampai hasilnya dibutuhkan:
import mlx.core as mx
a = mx.ones((1000, 1000))
b = mx.ones((1000, 1000))
Operasi ini belum dieksekusi
c = a + b
d = c 2
Evaluasi terjadi saat kita membutuhkan hasilnya
mx.eval(d)
print(d)
Atau saat kita mengkonversi ke Python/NumPy
result = d.tolist()
Kontrol Device
import mlx.core as mx
Cek device default
print(f"Default device: {mx.defaultdevice()}")
Jalankan di CPU
mx.setdefaultdevice(mx.cpu)
a = mx.ones((100, 100))
print(f"Device: {mx.defaultdevice()}")
Kembali ke GPU
mx.setdefaultdevice(mx.gpu)
b = mx.ones((100, 100))
print(f"Device: {mx.defaultdevice()}")