本仓库包含论文的代码
From Training Exposure to Membership Evidence: A Controlled Study of OLMo 2
Ali Banaei, Muhammad Shahab Shahzad, Gerald Q. Maguire Jr., Marco Chiesa, Dejan Kostić
KTH Royal Institute of Technology. arXiv preprint (to appear).
我们重新运行了 OLMo 2 1B 官方的 500 亿 token 中期训练阶段,并在训练流中插入了一组文档,这些文档从匹配对中随机选取。AI2 发布的同一阶段运行作为对照组。两次运行以相同顺序读取相同的训练数据,唯一区别在于我们插入文档的位置。随后,两个模型都经过了 AI2 的后训练流程。每个文档在每个阶段都在两个模型下进行了评分,因此我们可以衡量对单个文档的训练使模型发生了多大变化,以及成员推断攻击能够检测到其中多少变化。
成员推断旨在判断给定文档是否属于模型的训练数据。这对于版权与数据溯源、训练数据透明度以及基准污染都很重要。大多数针对语言模型的成员推断攻击评估都是在事后收集成员和非成员,例如在训练截止日期之前和之后发布的文档。这样两组不仅在成员身份上不同,在主题、风格和日期上也不同。攻击可以通过检测这种分布偏移而成功。当攻击失败时,这并不能表明训练没有留下痕迹。
为了区分这些解释,我们需要一个成员身份已知、且其分配与文档的任何属性无关、并且不改变训练其余部分的设置。论文提出的问题是:当一个真实文档被一次性纳入一个成熟的训练配方时,模型会发生多大变化,以及现有攻击能够利用其中多少变化?
AI2's released stage-1 checkpoint (4T tokens)
|
+--------------------------+---------------------------+
| |
AI2's released seed-42 run our re-run of the same stage:
of the 50B-token stage same start, data and order;
(23,852 updates) 24,081 of 12,212,224 chunks replaced
| by copies of inserted documents
v v
control treated model
| |
v v
SFT -> DPO -> RLVR stage 1 -> RLVR stage 2 (same data, order and seeds for both)
除非另有说明,以下数字针对 4,832 对已验证未见且插入一次的文档,与对照进行比较。论文给出了置信区间和进一步的注意事项。
这些结果涉及一个 1B 参数模型、一个替换了 0.135% token 的中期训练阶段,以及我们所评估的攻击统计量。参考比值是在分析之前指定的;其他分析是后来添加的,属于探索性分析。
OLMo-Twin/
├── olmo_twin/ small shared package; paths.py resolves the data root
├── collection/ candidate documents and their search against the OLMo 2 training data
├── design/ matched pairs, coin flips, copy positions: the frozen design
├── training/
│ ├── midtrain/ AI2's inputs, the training stream with the inserted documents, the launcher
│ ├── checks/ checks of the finished run (data order, inserted copies, configuration)
│ └── posttrain/ SFT, DPO and RLVR with AI2's open-instruct, for both models
├── scoring/ per-token log-probabilities under every model and checkpoint
├── analysis/ membership statistics, attacks, trajectories, post-training analysis
├── figures/ the paper's tables, numbers and figures
├── env/ software environments (requirements files, Dockerfiles)
└── docs/ reproduction guide and data documentation
每个目录都有一个 README,详细描述其对应的步骤。 docs/REPRODUCING.md 按顺序列出各步骤,并说明每一步的输入和输出。docs/data.md 描述数据布局、计划中的数据发布以及许可证。 docs/paper_outputs.md 将论文中的每个图和表映射到生成它的命令。
分析、图表和检查均在 CPU 上运行。env/analysis/requirements.txt 中固定的版本需要 Python 3.12 或更高版本。
git clone https://github.com/ali-bana/OLMo-Twin.git
cd OLMo-Twin
python3 -m venv .venv && . .venv/bin/activate
pip install -r env/analysis/requirements.txt
pip install -e .
将仓库作为检出使用。你可以在不安装任何东西的情况下运行脚本,或以可编辑模式安装该包(pip install -e .)。不支持常规的 pip install .,因为该包会从自身位置推导出仓库根目录,并由此推导出默认数据根目录。文档集合、训练运行和评分使用其他环境;env/README.md 描述了这些环境,包括用于 GPU 镜像的 Dockerfile。
没有任何路径是硬编码的。每个脚本都在一个数据根目录下查找其输入和输出,解析顺序如下:
--out),前提是脚本提供了这些选项;OLMO_TWIN_DATA;data/(被 git 忽略;它可能是一个符号链接)。export OLMO_TWIN_DATA=/path/to/olmo-twin-data
python -m olmo_twin.paths # prints the resolved layout and which directories exist
数据根目录具有固定布局:bundle/ 用于存放冻结的设计,analysis/ 用于存放分析表,run/ 用于存放分数和检查点,assets/ 用于存放 AI2 的公开输入,等等。Shell 脚本通过 eval "$(python3 -m olmo_twin.paths --shell)" 获取与 OLMO_TWIN_<NAME> 变量相同的路径(从仓库根目录运行,或在执行 pip install -e . 之后运行)。docs/data.md 列出了每个目录、写入该目录的步骤以及读取该目录的步骤。
在数据根目录中准备好数据发布版(一旦可用)的分析表和分数后,以下任一命令均可重新生成论文的表格、宏和图表:
bash figures/make_all.sh # from the analysis outputs -> $OLMO_TWIN_DATA/paper/
bash analysis/run_analysis.sh # re-runs the analysis first, then the tables and figures,
# Table 4 on all pairs and the RLVR results
两个脚本都会写入数据根目录,并就地覆盖先前的输出。
如果你想保留原始文件,请在数据发布副本上操作。
run_analysis.sh 会跳过需要文档文本或 token id 的步骤(并给出提示),这些内容并非为每个文档都重新分发。其他步骤则在已发布的数据上运行。
python -m pytest -p no:cacheprovider design/tests training/midtrain/tests
# collection/: in the collection environment (numba, beautifulsoup4, wikiextractor 3.0.8)
# with pytest added, one test file per process
for f in collection/tests/test_*.py; do python -m pytest -q -p no:cacheprovider "$f"; done
完整流程从文档收集一直运行到论文图表:收集、设计、中期训练、检查、后训练、评分、分析和图表。docs/REPRODUCING.md 描述了每个阶段、其输入和输出、命令,以及无法仅凭本仓库复现的部分。脚本中不包含调度器或集群命令。多节点启动器是普通的 torchrun、accelerate launch 和 ray 命令,它们从环境变量中获取节点排名和第一个节点的地址,因此可以由任何调度器或手动启动。
| 阶段 | 论文使用的计算资源 |
|---|---|
| 收集与重叠搜索 | CPU、网络访问、一个 GROBID 服务器;OLMo 2 训练语料库的本地副本(8.3 TiB);一个 GPU 用于嵌入搜索 |
| 中期训练 | 16 块 A100 80GB GPU(两个节点,每节点八块) |
| SFT、DPO | 每个模型 8 块 A100 80GB GPU |
| RLVR | 每个阶段和模型 16 块 A100 GPU(两个节点) |
| 评分 | 每个模型和检查点一块 GPU(在一个 A100 上每个模型约 46 分钟) |
| 分析、图表、检查 | CPU |