นี่คือการดำเนินการอย่างเป็นทางการของบทความของเรา: ขยายการปรับจูนเบาบางสำหรับการใช้หน่วยความจำต่ำ
เราเสนอวิธีการที่เรียกว่า Snell ( S Parse Tuning กับ Ker nel ized l ora) เพื่อเปิดใช้งานการปรับแต่งแบบเบาบางด้วยการใช้หน่วยความจำต่ำ Snell สลายตัวเมทริกซ์ที่ปรับได้สำหรับการทำให้เป็น sparsification เป็นเมทริกซ์ระดับต่ำที่เรียนรู้ได้สองตัวประหยัดจากการจัดเก็บที่มีราคาแพงของเมทริกซ์เต็มรูปแบบดั้งเดิม เพื่อรักษาประสิทธิภาพของการปรับแต่งแบบกระจัดกระจายด้วยเมทริกซ์ระดับต่ำเราขยายการสลายตัวของระดับต่ำจากมุมมองเคอร์เนล โดยเฉพาะเราใช้ฟังก์ชั่นเคอร์เนลแบบไม่เชิงเส้นกับการรวมเมทริกซ์เต็มรูปแบบและเพิ่มอันดับของเมทริกซ์ที่ผสาน การใช้อันดับที่สูงขึ้นช่วยเพิ่มความสามารถของ Snell ในการเพิ่มประสิทธิภาพโมเดลที่ผ่านการฝึกอบรมมาก่อนสำหรับงานดาวน์สตรีม เพื่อลดการใช้หน่วยความจำในการปรับแต่งเบาบางเราแนะนำกลไกการทำให้เป็นไปตามการแข่งขันโดยหลีกเลี่ยงการจัดเก็บดัชนีน้ำหนักที่ปรับได้ การทดลองอย่างกว้างขวางเกี่ยวกับงานดาวน์สตรีมหลายงานแสดงให้เห็นว่า Snell บรรลุประสิทธิภาพที่ล้ำสมัยด้วยการใช้หน่วยความจำต่ำขยาย PEFT ที่มีประสิทธิภาพด้วยการปรับแต่งแบบเบาบางไปยังรุ่นขนาดใหญ่

หากคุณพบที่เก็บนี้หรือบทความของเรามีประโยชน์โปรดพิจารณาอ้างและจ้องมองเรา!
@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 : เรียกใช้ไฟล์นี้สำหรับการฝึกอบรม./scripts : สคริปต์สำหรับการปรับโมเดลที่ผ่านการฝึกอบรมล่วงหน้าให้เข้ากับงานดาวน์สตรีมกับ Snell./lib : ฟังก์ชั่นผู้ช่วยสำหรับ IO, การบันทึกการฝึกอบรมและการโหลดข้อมูล./model : สถาปัตยกรรมกระดูกสันหลังและวิธีการสำหรับการปรับแต่ง./engine.py : ฟังก์ชั่นการฝึกอบรมหลักและการประเมิน./data : การจัดเก็บมาตรฐาน FGVC และ VTAB-1Kโคลน repo นี้:
git clone https://github.com/ssfgunner/SNELL.git
cd SNELLสร้างสภาพแวดล้อมเสมือน Conda และเปิดใช้งาน:
conda create -n snell python=3.8 -y
conda activate snell ติดตั้ง torch==1.12.1 และ torchvision==0.13.1 ด้วย CUDA==11.3 :
conda install pytorch==1.12.1 torchvision==0.13.1 cudatoolkit=11.3 -c pytorchติดตั้งการอ้างอิงอื่น ๆ :
pip install -r requirements.txt
FGVC: โปรดดาวน์โหลดชุดข้อมูลต่อไปนี้ VPT
VTAB-1K: เนื่องจากการประมวลผลของชุดข้อมูลบางชุดในเกณฑ์มาตรฐาน VTAB ดั้งเดิมนั้นยุ่งยากเราขอแนะนำชุดข้อมูล VTAB-1K ที่สกัดจาก SSF เพื่อความสะดวก (โปรดทราบว่าใบอนุญาตอยู่ในเกณฑ์มาตรฐาน VTAB)
โครงสร้างไฟล์ควรมีลักษณะ:
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.pthเราได้จัดเตรียมสคริปต์การฝึกอบรมสำหรับการปรับ VIT ที่ผ่านการฝึกอบรมมาก่อนเป็น FGVC และ VTAB-1K กับ SNELL-32 ตัวอย่างเช่น:
# 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.shสำหรับรุ่นอื่น ๆ เรามีสคริปต์เพื่อปรับแต่งให้เข้ากับ FGVC ตัวอย่างเช่น:
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_stageรหัสของเราได้รับการแก้ไขจาก VPT, SSF และ SPT เราขอขอบคุณผู้เขียนสำหรับรหัสที่เปิดกว้างของพวกเขา