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},
}