Ini adalah implementasi resmi dari makalah kami: memperluas tuning jarang untuk penggunaan memori rendah.
Kami mengusulkan metode yang disebut Snell (penyetelan parse dengan Ker nel Ized l ora) untuk memungkinkan penyetelan jarang dengan penggunaan memori rendah. Snell menguraikan matriks yang dapat disetel untuk sparsifikasi menjadi dua matriks rendah yang dapat dipelajari, menghemat dari penyimpanan mahal dari matriks penuh asli. Untuk mempertahankan efektivitas penyetelan jarang dengan matriks peringkat rendah, kami memperluas dekomposisi peringkat rendah dari perspektif kernel. Secara khusus, kami menerapkan fungsi kernel nonlinier untuk penggabungan matriks penuh dan mendapatkan peningkatan peringkat matriks gabungan. Mempekerjakan peringkat yang lebih tinggi meningkatkan kemampuan Snell untuk mengoptimalkan model pra-terlatih jarang untuk tugas hilir. Untuk lebih mengurangi penggunaan memori dalam penyetelan yang jarang, kami memperkenalkan mekanisme sparsifikasi berbasis kompetisi, menghindari penyimpanan indeks berat yang dapat merdu. Eksperimen ekstensif pada beberapa tugas hilir menunjukkan bahwa Snell mencapai kinerja canggih dengan penggunaan memori yang rendah, memperluas PEFT yang efektif dengan tuning yang jarang ke model skala besar.

Jika Anda menemukan repositori ini atau makalah kami berguna, silakan pertimbangkan mengutip dan menatap kami!
@InProceedings{Shen_2024_SNELL,
title={Expanding Sparse Tuning for Low Memory Usage},
author={Shen, Shufan and Sun, Junshu and Ji, Xiangyang and Huang, Qingming and Wang, Shuhui},
booktitle={Advances in Neural Information Processing Systems (NeurIPS)},
year={2024}
}
./train.py : Jalankan file ini untuk pelatihan../scripts : skrip untuk mengadaptasi model pra-terlatih untuk tugas hilir dengan snell../lib : Fungsi pembantu untuk IO, logging, pelatihan, dan pemuatan data../model : Arsitektur dan metode backbone untuk menyempurnakan../engine.py : Pelatihan utama dan fungsi evaluasi../data : Menyimpan tolok ukur FGVC dan VTAB-1K.Klon repo ini:
git clone https://github.com/ssfgunner/SNELL.git
cd SNELLBuat lingkungan virtual conda dan aktifkan:
conda create -n snell python=3.8 -y
conda activate snell Instal torch==1.12.1 dan torchvision==0.13.1 dengan CUDA==11.3 :
conda install pytorch==1.12.1 torchvision==0.13.1 cudatoolkit=11.3 -c pytorchInstal ketergantungan lainnya:
pip install -r requirements.txt
FGVC: Silakan unduh dataset berikut VPT.
VTAB-1K: Karena pemrosesan beberapa dataset dalam benchmark VTAB asli rumit, kami merekomendasikan dataset VTAB-1K yang diekstraksi yang dibagikan oleh SSF untuk kenyamanan. (Perhatikan bahwa lisensi ada di benchmark Vtab).
Struktur file seharusnya terlihat seperti:
data
├── fgvc
│ ├── cub
│ ├── nabirds
│ └── ...
└── vtab-1k
├── caltech101
├── cifar
└── ...mkdir checkpoints
cd checkpoints
# Supervisedly pre-trained ViT-B/16
wget https://console.cloud.google.com/storage/browser/_details/vit_models/imagenet21k/ViT-B_16.npz
# MAE pre-trained ViT-B/16
wget https://dl.fbaipublicfiles.com/mae/pretrain/mae_pretrain_vit_base.pth
# MoCo V3 pre-trained ViT-B/16
wget https://dl.fbaipublicfiles.com/moco-v3/vit-b-300ep/linear-vit-b-300ep.pth.tar
# Supervisedly pre-trained Swin-Transformer
wget https://github.com/SwinTransformer/storage/releases/download/v1.0.0/swin_base_patch4_window7_224_22k.pth
# Supervisedly pre-trained ConvNeXt
wget https://dl.fbaipublicfiles.com/convnext/convnext_base_22k_224.pthKami telah memberikan skrip pelatihan untuk mengadaptasi vit pra-terlatih yang diawasi ke FGVC dan VTAB-1K dengan Snell-32, misalnya:
# Fine-tuning supervised pre-trained ViT-B/16 with SNELL-32 for CUB dataset of FGVC
bash scripts/fgvc/snell32/vit_cub_snell.sh
# Fine-tuning supervised pre-trained ViT-B/16 with SNELL-32 for CIFAR dataset of VTAB-1k
bash scripts/vtab/snell32/vit_cifar_snell.shUntuk model lain, kami menyediakan skrip untuk menyempurnakannya di FGVC misalnya:
python train.py --data-path=./data/fgvc/ ${DATASET} --init_thres= ${init_thres}
--data-set= ${DATASET} --model_name=vit_base_patch16_224_in21k_snell --resume=checkpoints/mae_pretrain_vit_base.pth
--output_dir= ${save_dir}
--batch-size= ${batch_size} --lr=0.001 --epochs=100 --weight-decay= ${WEIGHT_DECAY} --mixup=0 --cutmix=0
--smoothing=0 --launcher= " none " --seed=0 --val_interval=10 --opt=adamw --low_rank_dim=32
--exp_name= " ViT_MAE_ ${DATASET} " --seed=0
--test --block=BlockSNELLParallel --tuning_model=snell --freeze_stagepython train.py --data-path=./data/fgvc/ ${DATASET} --init_thres= ${init_thres}
--data-set= ${DATASET} --model_name=vit_base_patch16_224_in21k_snell --resume=checkpoints/linear-vit-b-300ep.pth.tar
--output_dir= ${save_dir}
--batch-size= ${batch_size} --lr=0.001 --epochs=100 --weight-decay= ${WEIGHT_DECAY} --mixup=0 --cutmix=0
--smoothing=0 --launcher= " none " --seed=0 --val_interval=10 --opt=adamw --low_rank_dim=32
--exp_name= " ViT_MoCo_ ${DATASET} " --seed=0
--test --block=BlockSNELLParallel --tuning_model=snell --freeze_stagepython train.py --data-path=./data/fgvc/ ${DATASET} --init_thres= ${init_thres}
--data-set= ${DATASET} --model_name=swin_base_patch4_window7_224_in22k --resume=./checkpoints/swin_base_patch4_window7_224_22k.pth
--output_dir= ${save_dir}
--batch-size= ${batch_size} --lr=0.001 --epochs=100 --weight-decay= ${WEIGHT_DECAY} --mixup=0 --cutmix=0
--smoothing=0 --launcher= " none " --seed=0 --val_interval=10 --opt=adamw --low_rank_dim=32
--exp_name= " Swin_ ${DATASET} " --seed=0
--test --block=BlockSNELLParallel --tuning_model=snell --freeze_stagepython train.py --data-path=./data/fgvc/ ${DATASET} --init_thres= ${init_thres}
--data-set= ${DATASET} --model_name=convnext_base_in22k --resume=./checkpoints/convnext_base_22k_224.pth
--output_dir= ${save_dir}
--batch-size= ${batch_size} --lr=0.001 --epochs=100 --weight-decay= ${WEIGHT_DECAY} --mixup=0 --cutmix=0
--smoothing=0 --launcher= " none " --seed=0 --val_interval=10 --opt=adamw --low_rank_dim=32
--exp_name= " ConvNeXt_ ${DATASET} " --seed=0
--test --block=BlockSNELLParallel --tuning_model=snell --freeze_stageKode kami dimodifikasi dari VPT, SSF dan SPT. Kami berterima kasih kepada penulis untuk kode open-source mereka.