Codebase สำหรับ arxiv: 2405.17767 ขึ้นอยู่กับ GPT-Neo และ Tinystories
การพึ่งพา Python สามารถพบได้ใน requirements.txt . txt โครงสร้างไดเรกทอรีที่เราใช้คือการวางชุดข้อมูลจุดตรวจของแบบจำลองและสิ่งประดิษฐ์การวิเคราะห์ในไดเรกทอรี $SCRATCH เดียวที่มีพื้นที่ที่ไม่ได้ใช้มากมายในขณะที่สคริปต์และ CSV ของเราถูกเก็บไว้ในไดเรกทอรีที่บ้านเนื่องจากไม่ได้ใช้พื้นที่มากนัก เราเลือกที่จะจัดเก็บสิ่งประดิษฐ์การวิเคราะห์ของเรา (EMBEDDINGS) ใน $SCRATCH/stats และจุดตรวจแบบจำลองใน $SCRATCH/TS (ยืนสำหรับ "TinyStories")
สคริปต์ของเราบางส่วนอ้างอิงถึงไฟล์สภาพแวดล้อม env-h ที่เริ่มต้นสภาพแวดล้อม Python กำหนดฟังก์ชั่น Shorthand Shell และนำเข้าตัวแปรบ้าน
codebase ของเราเข้ากันได้มากที่สุดกับสภาพแวดล้อม slurm ที่กำหนดค่าสำหรับการรัน GPU เดี่ยว แต่สคริปต์ส่วนใหญ่ (ผู้ที่ไม่มี batch ในชื่อ) สามารถทำงานในเชลล์ได้โดยตรง
ในการเตรียมโมเดลสำหรับการฝึกอบรมให้สร้างโฟลเดอร์ (อาจเป็น $SCRATCH ) และคัดลอก config.json ลงไป ปรับรายละเอียดสถาปัตยกรรมและพารามิเตอร์ไฮเปอร์พารามิเตอร์ในไฟล์นั้นตามที่คุณต้องการ
เราใช้สคริปต์มาตรฐานจาก HuggingFace เพื่อฝึก CLMS ของเรา รหัสได้รับการดัดแปลงเบา ๆ และจัดรูปแบบใน run_clm.py สคริปต์นี้ถูกเรียกใช้โดย train.sh ซึ่งเป็นตัวอย่างของรูปแบบการฝึกอบรมใน A100 GPU
นี่คือตัวอย่างรุ่น 205m ที่เราเปิดเผยต่อสาธารณะ: https://huggingface.co/rhubarbwu/tinystories-12x1024_10l
ใช้ batch-train.sh แต่สังเกตตัวแปรที่ควรตั้งค่าก่อนและภายในการประกาศฟังก์ชั่น launch()
สมมติว่าคุณตั้งค่า config.json สำหรับสถาปัตยกรรมที่คุณต้องการแล้วคุณสามารถเพิ่มลูป bash ง่าย ๆ ลงใน batch-train.sh นี่คือห่วงที่เราเขียนเพื่อการทดลองของเราโดยที่ $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เราใช้ GPT-NEO พัฒนาโดย Eleutherai นอกจากนี้คุณยังสามารถปรับการตั้งค่าของเราเป็น GPT-NEOX หรือสถาปัตยกรรมเชิงสาเหตุอื่น ๆ
นอกจากนี้ยังง่ายต่อการฝึก LLM ของคุณเอง เพียงแค่ดูแลการกำหนดค่าชุดรถไฟเดียวกันที่แน่นอน (ในการตั้งค่าของเราให้สังเกตเวอร์ชันของ TinyStories และจำนวนคนงานประมวลผลล่วงหน้า) ระหว่างการฝึกอบรมและการรวบรวมวิธีการและความแปรปรวนสำหรับการวิเคราะห์
หลังจากได้รับการฝึกอบรมแบบจำลองแล้วคุณสามารถทำการประเมินผลซึ่งจะเพิ่ม 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 เพื่อดำเนินการรวบรวม Embeddings อาร์กิวเมนต์ --stage เวทีจาก coll-clm.sh ถึง run_clm.py ใช้ means , vars หรือ decs หมายถึงการรวบรวมวิธีการแปรปรวนและการตัดสินใจของ NCC โปรดทราบว่าขั้นตอน vars และ decs นั้นขึ้นอยู่กับการพึ่งพาทั้งสองขั้น means คุณสามารถใช้ ID ของงาน means เป็นอาร์กิวเมนต์การพึ่งพา Slurm $5 เพื่อ launch() ใน batch-coll.sh
หากต้องการตรวจสอบความคืบหน้าของขั้นตอนการรวบรวมให้เรียก 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 | วิธี |
| ความสม่ำเสมอของ hyperspherical ( | -kern log | วิธี |
| ตนเอง/สม่ำเสมอ-คู่ ( | -dual | หมายถึงจุดตรวจ |
| ข้อตกลง ( | -decs | หมายถึงการตัดสินใจ |
| การวางนัยทั่วไป (และข้อมูลรุ่นอื่น ๆ ) | -loss | จุดตรวจ |
หากทุกอย่างเป็นไปด้วยดีควรสร้าง dataframe ที่จัดรูปแบบ CSV ดู ./artifacts/ สำหรับตัวอย่างที่ประทับเวลา
DataFrame สามารถเข้าถึงและมองเห็นได้อย่างง่ายดายด้วยสคริปต์ 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},
}