Кодовая база для Arxiv: 2405.17767, на основе GPT-neo и Tinystories.
Зависимости от питона можно найти в requirements.txt . Структура каталогов, которую мы использовали, - это размещение наборов данных, модельных контрольных точек и артефактов анализа в одном каталоге $SCRATCH с большим количеством неиспользованного пространства, в то время как наши сценарии и CSV были сохранены в каком -то домашнем каталоге, поскольку они не потребляли много места. Мы решили хранить наши артефакты анализа (встраиваемые) в $SCRATCH/stats и модельные контрольно -пропускные пункты в $SCRATCH/TS (стоящие за «Tinystories»).
Некоторые из наших сценариев ссылаются на файл среды env-h , который запускает среду Python, определяет функции сокращений и импортировать домашние переменные.
Наша кодовая база наиболее совместима с средой Slurm, настроенной для прогонов с одним-GPU, но большинство сценариев (те, без batch в их имени) можно запускать напрямую в оболочке.
Чтобы подготовить модель для обучения, создайте папку (вероятно, в $SCRATCH ) и скопируйте в нее config.json . Адаптируйте архитектурные детали и гиперпараметры в этом файле, как вам нужно.
Мы использовали относительно стандартный сценарий от Huggingface, чтобы обучить наши CLMS. Код был слегка адаптирован и отформатирован в run_clm.py . Этот сценарий вызывается train.sh , который приводит пример тренировочных моделей на графическом процессоре A100.
Вот пример модели 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 или любой другой причинно-следственной архитектуре.
Также легко тренировать свои собственные LLMS отдельно. Просто позаботьтесь о том, чтобы использовать ту же самую конфигурацию набора поездов (в нашей настройке обратите внимание на версию 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 для выполнения коллекции Entgeddings. Аргумент --stage от coll-clm.sh до run_clm.py принимает means , vars или decs , ссылаясь на сбор средств, дисперсий и решений NCC. Обратите внимание, что этапы vars и decs являются зависимостью от завершения этапа means . Вы можете использовать удостоверение личности means в качестве аргумента Slurm Deperiancer $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 . В зависимости от того, какие измерения вы проводите, вам могут или не могут потребоваться графический процессор ( 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. См.
Доступ к данным можно легко получить и визуализировать с помощью некоторого простого сценария 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},
}