今天在 GitHub Trending 上看到一个有意思的项目:Marin,一个专注于大语言模型训练全流程的开源平台,其核心价值是「开放开发」——完整记录从原始数据到最终模型的每一步,包括失败的实验。
一、项目概述
Marin 是由 Stanford CRFM 和 Open Athena 共同发起的研究项目,旨在构建一个完整的 Foundation Model(基础模型)研发平台。它覆盖了大语言模型训练的完整生命周期:
- 数据管理:数据清洗、转换、过滤、分词
- 模型训练:预训练、后训练
- 评估体系:模型性能评估
核心特性
- 开放开发理念:每一步实验、决策、失败都完整记录,透明公开
- 全流程覆盖:从原始数据到最终模型,一站式解决方案
- 分布式训练:支持大规模 GPU/TPU 集群,甚至多切片 TPU
- 多模态扩展:除文本模型外,还支持音频-文本、DNA、蛋白质模型
当前重点
- MoE 前沿模型:正在训练 5e24 FLOPs、500B+ 总参数的混合专家模型
- Delphi 缩放套件:从 3e18 到 1e23 FLOPs 的模型缩放配方和缩放定律研究
二、技术原理
架构设计
Marin 的核心设计理念是 Makefile 式的实验编排。每个实验被定义为一组可依赖的步骤,按拓扑顺序执行:
# 1. 数据分词步骤(延迟加载,不立即下载)
tinystories_tokenized = tokenized(
name="tokenized/tinystories",
source="roneneldan/TinyStories",
tokenizer=marin_tokenizer,
sample_count=1000,
)
# 2. 模型训练步骤(依赖分词步骤)
nano_tinystories_model = train_lm(
name="checkpoints/marin-nano-tinystories",
version="v1",
model=llama_nano,
optimizer=AdamConfig(learning_rate=6e-4, weight_decay=0.1),
datasets={tinystories_tokenized: 1.0}, # 依赖关系
batch_size=4,
seq_len=2048,
num_train_steps=100,
)
# 3. 执行器运行所有步骤
StepRunner().run([lower(nano_tinystories_model)])
核心技术栈
| 组件 | 技术选型 | 说明 |
|---|---|---|
| 训练框架 | Levanter | 基于 JAX/Equinox,支持 TPU/GPU |
| 分布式调度 | Ray + Fray | 异构集群作业调度 |
| 分词器 | Marin Tokenizer | 自研分词器 |
| 数据处理 | HuggingFace Datasets | 标准数据格式 |
| 模型架构 | Llama 系列、MoE | 主流架构实现 |
混合专家模型(MoE)技术
Marin 当前重点研究的 MoE 模型采用 Quantile Balancing 技术保持专家负载均衡:
# MoE 专家负载均衡核心逻辑(伪代码)
class QuantileBalancer:
def balance_experts(self, router_logits):
# 使用分位数平衡而非传统辅助损失
expert_load = self.compute_quantile(router_logits)
balanced_routing = self.adjust_routing(expert_load)
return balanced_routing
缩放定律研究
Delphi 项目探索了 从 300 倍外推缩放定律:
# CompletedAdamHParams 缩放配方类
class CompletedAdamHParams:
"""将计算预算映射到模型配置的缩放配方"""
def compute_config(self, compute_budget: float) -> ModelConfig:
# 基于 Chinchilla 最优缩放定律
# 支持从 3e18 到 1e23 FLOPs 的连续缩放
...
数据流水线
数据管道支持确定性复现:
# Nemotron-CC + StarCoderData + ProofPile 2 混合数据集
training_mixture = mix_datasets(
sources=[
("Nemotron-CC", 0.7),
("StarCoderData", 0.2),
("ProofPile-2", 0.1),
],
deterministic=True, # 可确定性复现
)
三、安装与快速开始
环境要求
- Python >= 3.12
- uv 包管理器(推荐)
- GCP 账户(用于 TPU 训练)
- HuggingFace Token
安装步骤
# 克隆仓库
git clone https://github.com/marin-community/marin.git
cd marin
# 使用 uv 安装依赖
uv sync --extra cpu
# 登录 HuggingFace
huggingface-cli login
# 配置 GCP(用于 TPU 训练)
gcloud config set project hai-gcp-models
开发环境配置
# 完整开发环境设置
make dev_setup # 自动安装 uv、gcloud、node、pre-commit
# 或手动安装
make install_uv
make install_gcloud
make setup_pre_commit
最简运行示例
训练一个 TinyStories 上的微型模型:
from marin.execution.step_runner import StepRunner
from marin.execution.lazy import lower
from marin.experiment.data import tokenized
from marin.experiment.train import train_lm
from experiments.llama import llama_nano
from experiments.marin_tokenizer import marin_tokenizer
# 分词数据
tinystories_tokenized = tokenized(
name="tokenized/tinystories",
source="roneneldan/TinyStories",
tokenizer=marin_tokenizer,
sample_count=1000,
)
# 训练模型
nano_model = train_lm(
name="checkpoints/marin-nano-tinystories",
version="v1",
model=llama_nano,
datasets={tinystories_tokenized: 1.0},
batch_size=4,
num_train_steps=100,
)
# 运行
if __name__ == "__main__":
StepRunner().run([lower(nano_model)])
四、使用方法与实战
训练更大的模型
扩展到 DCLM 1B 模型训练:
# 使用 DCLM 数据集训练 1B 参数模型
dclm_1b_model = train_lm(
name="checkpoints/dclm-1b",
model=llama_1b,
datasets={dclm_tokenized: 1.0},
batch_size=256,
num_train_steps=100000,
resources=ResourceConfig.with_tpu(), # 使用 TPU
)
混合数据集训练
# 多数据源混合训练
mixture_model = train_lm(
name="checkpoints/mixture-model",
datasets={
tokenized_nemotron: 0.6,
tokenized_starcoder: 0.3,
tokenized_proofpile: 0.1,
},
...
)
查看实验报告
Marin 提供完整的实验回顾:
- Marin 8B 回顾:超越 Llama 3.1 8B 的训练经验
- Marin 32B 回顾:更大规模模型的训练心得
- Delphi 缩放定律:如何用小模型预测大模型
使用 Delphi 缩放套件
# 下载 Delphi 模型检查点
# https://huggingface.co/collections/marin-community/delphi-xxx
# 使用缩放配方
from experiments.scaling_law_sweeps.completed_adamh import CompletedAdamHParams
recipe = CompletedAdamHParams()
config = recipe.compute_config(compute_budget=1e22)
五、常见问题与解决方案
安装问题
Q: uv 安装失败?
# 手动安装 uv
curl -LsSf https://astral.sh/uv/install.sh | sh
source ~/.cargo/env
Q: GCP 配置错误?
确保已安装 gcloud CLI 并有项目访问权限:
gcloud auth login
gcloud config set project hai-gcp-models
运行时问题
Q: HuggingFace 数据集下载失败?
# 设置环境变量
export HF_TOKEN=your_token_here
huggingface-cli login
Q: TPU 资源不足?
申请 Google TPU Research Cloud (TRC) 免费资源。
性能优化
Q: 训练速度慢?
参考 Marin 的性能优化经验:
- 集群调度优化:使用 Iris 进行异构集群调度
- 吞吐量提升:优化预训练效率
代码规范
Q: 代码格式检查失败?
# 自动修复
make fix
# 完整检查
make check
六、总结
Marin 是一个真正践行「开放开发」理念的大模型训练平台。它不仅开源了代码和模型,更重要的是开源了完整的训练过程知识——包括失败的实验。对于想要深入理解大语言模型训练全流程的研究者和工程师来说,Marin 提供了一个不可多得的学习平台。
核心价值总结:
- 完整流程:数据→训练→评估,一站式解决方案
- 透明开放:每一步决策和失败都记录在案
- 工业级规模:支持 500B+ 参数 MoE 模型训练
- 丰富资源:Delphi 缩放套件、检查点、训练配方全部开放
适用人群:
- 大模型研究人员
- AI 基础设施工程师
- 对 LLM 训练感兴趣的开发者
项目地址:https://github.com/marin-community/marin
官方文档:https://marin.readthedocs.io