Arxiv的代码库:2405.17767,基于GPT-Neo和Tinystories。
python依赖性可以在requirements.txt中找到。我们使用的目录结构是将数据集,模型检查点和分析工件放置在具有大量未使用空间的单个$SCRATCH目录中,而我们的脚本和CSV则保存在某些主目录中,因为它们并没有消耗太多空间。我们选择将分析工件(嵌入)存储在$SCRATCH/stats和型号检查点中,以$SCRATCH/TS (代表“小故事”)。
我们的一些脚本引用了启动Python环境的环境文件env-h ,定义了速记壳功能并导入家庭变量。
我们的代码库与为单个GPU运行配置的SLURM环境兼容,但是大多数脚本(其中大多数是batch的脚本)可以直接在外壳中运行。
要准备培训模型,请创建一个文件夹(可能是$SCRATCH ),然后将config.json复制到其中。根据需要调整该文件中的体系结构详细信息和超参数。
我们使用了一个相对标准的脚本来训练我们的CLM。该代码在run_clm.py中略微适应并格式化。该脚本由train.sh调用,该脚本提供了A100 GPU上培训模型的示例。
这是我们公开公开的示例205m型号:https://huggingface.co/rhubarbwu/tinystories-12x1024_10l
使用batch-train.sh ,但请注意在launch()函数声明之前和之内应设置的变量。
假设您已经为所需的体系结构设置了config.json ,则可以在batch-train.sh中添加一个简单的bash循环。这是我们为实验编写的循环,其中$SCRATCH是我们存储临时检查站的目录。
for SEED in {10..19} ; do
new_dir= $SCRATCH /TS/TinyStories-02x0768_01d $SEED
mkdir $new_dir
cp $SCRATCH /TS/TinyStories-02x0768_01d/config.json $new_dir
launch 02 0768 2 16 $SEED
done我们使用由Eleutherai开发的GPT-Neo。您也可以将我们的设置调整为GPT-Neox或任何其他因果建筑。
单独训练自己的LLM也很容易。只需谨慎使用完全相同的火车集配置(在我们的设置中,请注意小图的版本以及训练的预处理工人的数量)与均值和方差分析之间。
训练模型后,您可以执行评估,这将添加eval_results.json到该模型目录(或其中的检查点)。
python run_clm.py --model_name_or_path $MODEL_DIR --output_dir $CKPT_DIR --tokenizer_name EleutherAI/gpt-neo-125M --do_eval --per_device_eval_batch_size $BATCH_SIZE --cache_dir $SCRATCH --dataset_name $DATASET --dataloader_num_workers 2 --preprocessing_num_workers 2 --run_name $CKPT --trust_remote_code --model_ckpt_idx $IDX --report_to none以类似于train.sh和config.json的样式,您可以使用coll-clm.sh和batch-coll.sh执行嵌入式集合。 coll-clm.sh到run_clm.py的--stage参数采用means , vars或decs ,指的是均值,差异和NCC决策的集合。请注意, vars和decs阶段都是对means阶段完成的依赖性。您可以将means作业的ID用作batch-coll.sh中launch() slurm依赖参数$5 。
要检查收集阶段的进度,请运行analyze $@ -prog 。这是一个例子:
analyze -prog -i $SCRATCH /stats/ * / * 02x0768_01d0 * @ *输出应该看起来像这样:
-------------------------------------------------------------------------------
model means vars decs unique
02x0768_01d00@0 229367 229367 2303 29233
02x0768_01d01@0 229367 229367 2303 29233
02x0768_01d02@0 229367 229367 2303 29233
02x0768_01d03@0 229367 229367 2303 29233
02x0768_01d04@0 229367 229367 2303 29233
02x0768_01d05@0 229367 229367 2303 29233
02x0768_01d06@0 229367 229367 2303 29233
02x0768_01d07@0 229367 229367 2303 29233
02x0768_01d08@0 229367 229367 2303 29233
02x0768_01d09@0 229367 229367 2303 29233
total (10) 229367 229367 2303 29233
------------------------------------------------------------------------------通过analyze.py进行不同测量的分析。根据您进行的测量,您可能需要或可能不需要GPU( ENV=GPU ),检查点( ENV=CKPT ),差异( -snr )或决策( -decs )。
这是batch-analyze.sh的片段。
case $ENV in
GPU)
# require large parallel tensor operations on the GPU
analyze -etf -kern log -snr -o $OUTPUT -i $FILES
;;
CKPT)
# require the trained model checkpoints but no GPU
analyze -dual -loss -o $OUTPUT -i $FILES
;;
CPU)
# do not require checkpoints nor GPUs
analyze -decs -nor -o $OUTPUT -i $FILES
;;
esac| 测量 | 旗帜 | 先决条件 |
|---|---|---|
| 课堂内变异性( | -snr | 手段,差异 |
| 规范( | -nor | 方法 |
| 干涉 ( | -etf | 方法 |
| 超球均匀性( | -kern log | 方法 |
| 自我/统一偶性( | -dual | 手段,检查点 |
| 协议 ( | -decs | 手段,决定 |
| 概括(和其他模型信息) | -loss | 检查点 |
如果一切顺利,则应生成CSV形式的数据框架。有关时间标记的示例,请参见./artifacts/。
可以使用一些简单的matplotlib脚本轻松访问和可视化数据框,但是我们目前正在共享笔记本(基于我们自己的分析文物),以使其变得容易:
如果我们的代码或其他任何问题中都有任何错误或效率低下,我们很乐意看看。我们希望您在此存储库上打开一个问题,但是可以通过[email protected]与相应的作者联系。我们还审查了拉的请求。
@misc{wu2024linguisticcollapse,
title={Linguistic Collapse: Neural Collapse in (Large) Language Models},
author={Robert Wu and Vardan Papyan},
year={2024},
eprint={2405.17767},
archivePrefix={arXiv},
primaryClass={cs.LG},
url={https://arxiv.org/abs/2405.17767},
}