이 저장소는 "PuMer: 효율적인 비전 언어 모델을 위한 가지치기 및 병합 토큰" 논문의 공식 구현입니다.
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
데이터 전처리는 Notes/data.md를 참조하세요.
원래 사전 훈련된 METER 및 ViLT 체크포인트를 변환하려면 cli/prep/convert_ckpt.py
참조하세요.
다음은 준비 후 파일 레이아웃입니다.
# 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을 확인하세요. ( -ft
원래 미세 조정된 모델이고, 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
Notes/profile.md를 참조하세요.
처음 사용한 후 TRANSFORMERS_OFFLINE=1
설정하십시오. 그렇지 않으면 항상 온라인 조회로 인해 504 오류가 보고되는 경우가 있습니다.
src/pumer/model/pruner.py
(더 이상 사용되지 않으며 사용되지 않음)의 코드를 무시하고 정리가 필요합니다.
현재 코드베이스에는 PuMer 구현과 관련되지 않은 많은 혼란과 실험 코드가 포함되어 있으므로 무시하십시오.
@inproceedings{cao-etal-2023-pumer, title = "{P}u{M}er: 효율적인 비전 언어 모델을 위한 가지치기 및 병합 토큰", 작성자 = "Cao, Qingqing 및 Paranjape, Bhargavi 및 Hajishirzi, Hannaneh", booktitle = "제61차 전산언어학회 연차총회 회의록" (1권: Long Papers)", 월 = 7월, 연도 = "2023", 주소 = "캐나다 토론토", 게시자 = "전산 언어학 협회", url = "https://aclanthology.org/2023.acl -long.721", 페이지 = "12890--12903", }