gpt-neo 및 tinystories를 기반으로 ARXIV : 2405.17767 용 Codebase.
파이썬 종속성은 requirements.txt 에서 찾을 수 있습니다 .txt. 우리가 사용한 디렉토리 구조는 데이터 세트, 모델 체크 포인트 및 분석 아티팩트를 사용되지 않은 공간이 충분한 단일 $SCRATCH 디렉토리에 배치하는 것이며, 스크립트와 CSV는 공간을 많이 사용하지 않았으므로 일부 홈 디렉토리에 보관되었습니다. 우리는 분석 아티팩트 (임베딩)를 $SCRATCH/TS $SCRATCH/stats 및 모델 체크 포인트 ( "Tinystories")에 저장하기로 결정했습니다.
우리의 스크립트 중 일부는 파이썬 환경을 시작하고 속기 쉘 기능을 정의하고 주택 변수를 가져 오는 환경 파일 env-h 를 참조합니다.
우리의 코드베이스는 단일 GPU 실행을 위해 구성된 Slurm 환경과 가장 호환되지만 대부분의 스크립트 (이름에 batch 없는 스크립트)는 쉘에서 직접 실행할 수 있습니다.
교육을위한 모델을 준비하려면 폴더 (아마 $SCRATCH 로)를 만들고 config.json 복사하십시오. 필요에 따라 해당 파일의 건축 세부 사항과 하이퍼 파라미터를 조정하십시오.
우리는 Huggingface에서 비교적 표준 스크립트를 사용하여 CLM을 훈련 시켰습니다. 코드는 가볍게 조정되고 run_clm.py 에서 형식화되었습니다. 이 스크립트는 A100 GPU의 교육 모델의 예를 제공하는 train.sh 에 의해 호출됩니다.
다음은 우리가 공개 한 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우리는 Eleutheai가 개발 한 GPT-Neo를 사용합니다. 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 사용하여 임베딩 컬렉션을 수행 할 수 있습니다. coll-clm.sh 에서 run_clm.py 까지 --stage 인수는 수단, 차이 및 NCC 결정의 수집을 언급하는 means , vars 또는 decs 취합니다. vars 및 decs 단계는 means 단계의 완료에 대한 종속성입니다. means 작업의 ID를 batch-coll.sh 에서 slurm 종속성 인수 $5 로 사용할 수 있습니다 launch() .
수집 단계의 진행 상황을 확인하려면 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 | 검문소 |
모든 것이 잘 진행되면 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},
}