GitHub에서 Python 저장소로 소개된 Marin은 파운데이션 모델을 연구하고 개발하기 위한 프레임워크다. 현재 저장소의 설명만 보면 흔한 학습 코드 모음처럼 보일 수 있지만, README를 따라가면 관심사가 더 넓다는 것을 알 수 있다. 데이터 큐레이션과 변환, 필터링, 토큰화부터 사전학습, 후학습, 평가까지 모델이 만들어지는 전 과정을 하나의 연구 시스템으로 묶는다.
작은 TinyStories 예제가 이 구조를 잘 보여준다. tokenized(...)는 데이터 토큰화를 lazy handle로 선언하고, train_lm(...)은 토큰화 결과에 의존하는 학습 단계를 만든다. 실행 시점에는 lower(...)가 정의된 그래프를 실행 가능한 형태로 바꾸고 StepRunner가 위상 순서에 따라 처리한다. 데이터를 준비한 뒤 학습한다는 단순한 순서를 코드에 명시하는 방식이다. Makefile의 의존성 그래프를 대규모 모델 실험에 가져온 셈이다.
이 설계는 실험이 커질수록 힘을 발휘한다. Marin은 Nemotron-CC, StarCoderData, ProofPile 2를 이용한 학습 혼합을 결정론적으로 재현하는 파이프라인을 공개했다. Delphi scaling suite에는 실행별 체크포인트와 figure마다 설정을 다시 확인할 수 있는 plot-ready 데이터가 포함돼 있다. CompletedAdamHParams 같은 레시피 코드도 포크할 수 있는 형태로 제공한다. 결과 숫자만 보여주는 대신, 그 숫자가 나온 입력과 설정을 함께 남긴다.
대신 진입 비용은 있다. 작은 모델 하나를 빨리 학습하는 목적이라면 단일 스크립트가 더 간단하다. Marin에서는 데이터 버전, 단계 간 의존성, 클러스터 자원, 평가 결과를 함께 다뤄야 한다. 하지만 수많은 실행을 비교하거나 여러 연구자가 같은 그래프를 이어서 사용해야 한다면, 이 복잡성은 관리 대상이지 피해야 할 장벽만은 아니다.
현재 Marin이 겨냥하는 작업은 5e24 model-FLOPs, 총 5000억 개가 넘는 파라미터를 가진 mixture-of-experts 모델의 사전학습과 후학습이다. 이 규모에서 중요한 것은 학습이 한 번 성공했는지가 아니다. 어떤 데이터 혼합과 레시피, 자원 설정을 사용했고, 실패한 실험에서 무엇을 배웠는지 다시 확인할 수 있어야 한다. Marin의 open development는 이 연구 기록을 문서에만 두지 않고 실행 구조에 연결한다.
그래서 이 저장소의 사용법을 볼 때는 모델 클래스보다 파이프라인의 경계를 먼저 보는 편이 좋다. 데이터 준비를 독립 단계로 만들 수 있는지, 실행 결과와 설정을 연결해 보존할 수 있는지, 같은 흐름을 GPU와 TPU 환경으로 확장할 수 있는지다. Marin은 모델 파일을 배포하는 데서 끝나지 않고 모델이 만들어진 과정을 함께 공개하려는 프로젝트다.