該倉庫是論文“PuMer:Pruning and Merging Tokens for Efficient Vision Language Models”的官方實現,論文
安裝 miniforge (與 conda 相同,更便攜) 創建一個 python 環境: conda env create -f env.yaml
,啟動它: conda activate pumer
克隆此倉庫: [email protected]:csarron/pumer.git
測試 cuda: python -c "import torch;print(torch.cuda.is_available())"
取得火炬環境: python -m torch.utils.collect_env
安裝: pip install -e .
出於本地開發目的: pip install -e ".[dev]"
env-frozen.yaml
是透過conda env export | grep -v "^prefix: | pumer==" > env-frozen.yaml
生成的conda env export | grep -v "^prefix: | pumer==" > env-frozen.yaml
資料預處理請參考notes/data.md
請參閱cli/prep/convert_ckpt.py
以轉換原始預訓練的 METER 和 ViLT 檢查點
以下是準備後的文件佈局:
# tree -h data
├── [4.0K] ckpt
│ └── [4.0K] converted
│ ├── [4.0K] meter_pretrain_384
│ │ ├── [ 674] config.json
│ │ └── [1.3G] pytorch_model.bin
│ ├── [4.0K] meter_pretrain_irtr_384
│ │ ├── [ 729] config.json
│ │ └── [1.2G] pytorch_model.bin
│ ├── [4.0K] meter_pretrain_nlvr2_288
│ │ ├── [ 674] config.json
│ │ └── [1.3G] pytorch_model.bin
│ ├── [4.0K] vilt_pretrain
│ │ ├── [ 619] config.json
│ │ └── [518M] pytorch_model.bin
│ ├── [4.0K] vilt_pretrain_irtr
│ │ ├── [ 718] config.json
│ │ └── [426M] pytorch_model.bin
│ └── [4.0K] vilt_pretrain_nlvr2
│ ├── [ 619] config.json
│ └── [518M] pytorch_model.bin
├── [4.0K] datasets
│ ├── [4.0K] irtr
│ │ ├── [390K] flickr30k-test.jsonl
│ │ ├── [ 11M] flickr30k-train.jsonl
│ │ ├── [397K] flickr30k-val.jsonl
│ │ ├── [ 10M] mscoco-restval.jsonl
│ │ ├── [1.7M] mscoco-test.jsonl
│ │ ├── [ 28M] mscoco-train.jsonl
│ │ └── [1.7M] mscoco-val.jsonl
│ ├── [4.0K] nlvr2
│ │ ├── [3.6M] dev.json
│ │ ├── [3.6M] test1.json
│ │ └── [ 39M] train.json
│ ├── [4.0K] snli-ve
│ │ ├── [ 16M] snli_ve_dev.jsonl
│ │ ├── [ 16M] snli_ve_test.jsonl
│ │ └── [464M] snli_ve_train.jsonl
│ └── [4.0K] vqa2
│ ├── [ 57K] vqa2_ans2label.json
│ ├── [ 39K] vqa2_label2ans.json
│ ├── [161K] vqa2-small.jsonl
│ ├── [ 45M] vqa2-test2015.jsonl
│ ├── [ 71M] vqa2-train2014.jsonl
│ └── [ 34M] vqa2-val2014.jsonl
└── [4.0K] lmdb
├── [ 13G] coco-test2015.lmdb
├── [ 19G] coco-trainval2014.lmdb
├── [4.2G] flickr30k_images.lmdb
├── [837M] nlvr2-dev.lmdb
├── [837M] nlvr2-test1.lmdb
└── [ 11G] nlvr2-train.lmdb
有關範例用法,請參閱notes/cmd.md;
查看 https://huggingface.co/csarron 以取得finetuend 檢查點:( -ft
是原始的finetuned 模型, p0.x-r0.x-t0.x-xxx
是我們的PuMer 模型)
vilt-vqa2-ft
vilt-vqa2-p0.1-r0.3-t0.2-258
vilt-ve-ft
vilt-ve-p0.1r0.3t0.2-2468
vilt-nlvr2-ft
vilt-nlvr2-p0.1r0.3t0.2-258
meter-vqa2-ft
meter-vqa2-p0.2r0.2t0.2-0246
meter-ve-ft
meter-ve-p0.3r0.5t0.2-0246
meter-nlvr2-ft
meter-nlvr2-p0.3r0.5t0.2-246
參見註/profile.md
第一次使用後設定TRANSFORMERS_OFFLINE=1
,否則有時會因為一直在線上尋找而報504錯誤。
忽略src/pumer/model/pruner.py
中的程式碼(已棄用且未使用),需要清理
目前的程式碼庫包含許多與 PuMer 實作無關的混亂和實驗程式碼,請忽略。
@inproceedings{cao-etal-2023-pumer,標題=“{P}u{M}er:高效視覺語言模型的修剪和合併令牌”,作者=“Cao,Qingqing和Paranjape,Bhargavi和Hajishirzi,Hannaneh” , booktitle =“計算語言學協會第61 屆年會論文集(第一卷:長論文)”,月份= jul,年份=“2023”,地址=“加拿大多倫多”,出版商=“計算語言學協會” ,url =“https://aclanthology.org/2023.acl-long.721”,頁=“12890--12903”, }