CodeBase untuk ARXIV: 2405.17767, berdasarkan GPT-NEO dan TinyStories.
Ketergantungan Python dapat ditemukan di requirements.txt . Struktur direktori yang kami gunakan adalah menempatkan dataset, pos pemeriksaan model dan artefak analisis dalam satu direktori $SCRATCH dengan banyak ruang yang tidak digunakan, sementara skrip dan CSV kami disimpan di beberapa direktori home karena mereka tidak mengkonsumsi banyak ruang. Kami memilih untuk menyimpan artefak analisis kami (embeddings) di $SCRATCH/stats dan model pos pemeriksaan di $SCRATCH/TS (berdiri untuk "TinyStories").
Beberapa skrip kami membuat referensi ke file lingkungan env-h yang memulai lingkungan Python, mendefinisikan fungsi shell shell dan mengimpor variabel rumah.
Basis kode kami paling kompatibel dengan lingkungan slurm yang dikonfigurasi untuk menjalankan gpu tunggal, tetapi sebagian besar skrip (yang tanpa batch dalam namanya) dapat dijalankan di shell secara langsung.
Untuk menyiapkan model untuk pelatihan, buat folder (mungkin dalam $SCRATCH ) dan salin config.json ke dalamnya. Adaptasi detail arsitektur dan hiperparameter dalam file itu sesuai kebutuhan.
Kami menggunakan skrip yang relatif standar dari permukaan pelukan untuk melatih CLM kami. Kode ini diadaptasi dengan ringan dan diformat dalam run_clm.py . Skrip ini dipanggil oleh train.sh , yang memberikan contoh model pelatihan pada GPU A100.
Berikut adalah contoh model 205m yang telah kami buat publik: https://huggingface.co/rhubarbwu/tinystories-12x1024_10l
Gunakan batch-train.sh , tetapi perhatikan variabel yang harus ditetapkan sebelum dan dalam deklarasi fungsi launch() .
Dengan asumsi Anda sudah mengatur config.json untuk arsitektur yang Anda inginkan, Anda dapat menambahkan loop bash sederhana ke batch-train.sh . Inilah loop yang kami tulis untuk percobaan kami, di mana $SCRATCH adalah direktori di mana kami menyimpan pos pemeriksaan sementara.
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
doneKami menggunakan GPT-NEO, dikembangkan oleh Eleutherai. Anda juga dapat menyesuaikan pengaturan kami dengan GPT-NEOX atau arsitektur kausal lainnya.
Juga mudah untuk melatih LLM Anda sendiri secara terpisah. Berhati -hatilah untuk menggunakan konfigurasi set kereta yang sama persis (dalam pengaturan kami, perhatikan versi TinyStories dan jumlah pekerja preprocessing) antara pelatihan dan pengumpulan cara dan varian untuk analisis.
Setelah model dilatih, Anda dapat melakukan evaluasi, yang akan menambahkan eval_results.json ke direktori model (atau pos pemeriksaan di dalamnya).
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 Dalam gaya yang mirip dengan train.sh dan config.json , Anda dapat menggunakan coll-clm.sh dan batch-coll.sh untuk melakukan koleksi embeddings. Argumen --stage dari coll-clm.sh ke run_clm.py mengambil means , vars , atau decs , mengacu pada kumpulan sarana, varian, dan keputusan NCC. Perhatikan bahwa tahap vars dan decs keduanya dependensi pada penyelesaian tahap means . Anda dapat menggunakan ID dari pekerjaan means sebagai argumen ketergantungan slurm $5 untuk launch() di batch-coll.sh .
Untuk memeriksa kemajuan tahapan pengumpulan, jalankan analyze $@ -prog . Inilah contohnya:
analyze -prog -i $SCRATCH /stats/ * / * 02x0768_01d0 * @ *Output seharusnya terlihat seperti ini:
-------------------------------------------------------------------------------
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
------------------------------------------------------------------------------ Analisis berbagai pengukuran dilakukan dengan analyze.py . Bergantung pada pengukuran mana yang Anda lakukan, Anda mungkin atau mungkin tidak memerlukan GPU ( ENV=GPU ), pos pemeriksaan ( ENV=CKPT ), varian ( -snr ) atau keputusan ( -decs ).
Ini cuplikan dari 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| Pengukuran | Bendera | Prasyarat |
|---|---|---|
| Variabilitas dalam kelas ( | -snr | Berarti, varian |
| Norma ( | -nor | cara |
| Gangguan ( | -etf | cara |
| Keseragaman hiperspherical ( | -kern log | cara |
| Diri/seragam-dualitas ( | -dual | berarti, pos pemeriksaan |
| Perjanjian ( | -decs | berarti, keputusan |
| Generalisasi (dan info model lainnya) | -loss | pos pemeriksaan |
Jika semuanya berjalan dengan baik, dataframe yang diformat CSV harus dihasilkan. Lihat ./artifacts/ untuk contoh yang dicap waktu.
DataFrame dapat dengan mudah diakses dan divisualisasikan dengan beberapa skrip matplotlib sederhana, tetapi kami saat ini berbagi buku catatan kami (berdasarkan artefak analisis kami sendiri) untuk membuatnya mudah:
Jika ada bug atau ketidakefisienan dalam kode kami, atau pertanyaan lain, kami akan dengan senang hati melihatnya. Kami lebih suka Anda membuka masalah di repositori ini, tetapi penulis yang sesuai dapat dihubungi di [email protected] . Kami juga meninjau permintaan tarik.
@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},
}