End-to-end 로 뭘 할 거야
이 레슨 끝에 너는 MLX 안에 진짜, 돌아가는, 완전한 training loop 가질 거 — 작은 2-layer MLP 정의, synthetic regression dataset (line + noise) 생성, SGD 로 모델 학습, loss 떨어지는 거 봐, 추론 돌려. 약 30 줄의 코드, 다 production-shape, toy 아님.
핵심은 흥미로운 모델 배우는 게 아냐 — MLX training loop 의 모든 관절이 딸깍 맞물리는 걸 느끼는 것. 모든 후속 트랙이 네가 이걸 한 번 느꼈다고 가정.
조각들
nn.Module— 어떤 모델이든 base class. Subclass 하고, submodule 가진__init__와 forward pass 가진__call__정의. 별도forwardmethod 없음 — Python 의__call__로 충분.nn.Linear,nn.relu— 우리에게 필요한 layer type 과 activation.mlx.optimizers.SGD— 가장 단순한 optimizer..update(model, grads)method 가 gradient 를 in place 로 적용.nn.value_and_grad(model, loss_fn)— 한 호출에 모델 parameter 에 대한 loss 와 gradient 둘 다 받는 canonical 패턴.mx.eval(model.parameters(), optimizer.state)— 각 step 끝에 업데이트된 weight 와 optimizer state materialize. MLX 가 step 을 fuse 하게 해주는 lazy-eval 경계.
전체 loop
아래 코드 블록이 training pipeline 전체. 모양 한 번 읽어 — 얼마나 짧은지 봐 — 그리고 돌려. Loss 숫자 떨어지는 거 봐. 마지막 추론 호출이 진짜 target (2.0 × 1.0 + 0.5 = 2.5) 의 외칠 수 있는 거리 안의 값 돌려주는 거 알아채.
여기서 가져갈 것
모양이 진짜라서 toy 가 아냐. Track 4 의 70B 모델 fine-tune 도 정확히 이 골격 쓸 거 — model subclass, nn.value_and_grad, optimizer.update, 경계의 mx.eval. 학습하는 것에 따라 loop 의 복잡성 scale. 모양 은 안 그래.