ที่เก็บนี้มีการดำเนินการอย่างเป็นทางการของการทดลองที่ดำเนินการ
- โครงสร้าง repo:
efficient-attention : รหัสฐานขนาดเล็กที่มีอยู่ในตัวเองซึ่งใช้กลไกความสนใจที่มีประสิทธิภาพต่าง ๆ โปรดดูการใช้งานสำหรับรายละเอียดเพิ่มเติมvit : Codebase สำหรับการทดลอง การจำแนกภาพ ซึ่งดัดแปลงมาจากfairseq : ส้อมที่แก้ไขแล้วของ Fairseq สำหรับงานภาษารวมถึง การแปลด้วยเครื่อง และ การสร้างแบบจำลองภาษาอัตโนมัติmain.sh : สคริปต์ทุบตีสำหรับการเปิดตัวการทดลองทั้งหมด-e True จะถูกส่งผ่านไปยังคำสั่งการฝึกอบรมโดยตรง คุณสามารถผ่านอาร์กิวเมนต์ที่กำหนดเองไปยังคำสั่งการฝึกอบรมโดยผนวกพวกเขาหลังจาก -e True ในการตั้งค่าสภาพแวดล้อมให้เรียกใช้คำสั่งต่อไปนี้เพื่อติดตั้งการอ้างอิงที่ต้องการ (แนะนำในสภาพแวดล้อมเสมือนจริง):
# install packages
pip install -r requirements.txt
# install efficient-attention library
pip install -e efficient-attention
# OPTIONAL: install fairseq library for running language tasks
cd fairseq
python3 setup.py build develop
cd ..สภาพแวดล้อมได้รับการทดสอบด้วย Python 3.8.10, Pytorch 1.12.0 และ Cuda 11.3 นอกจากนี้โปรดทราบส้อมของ Fairseq ของเราปรับเปลี่ยนไฟล์หลายไฟล์ใน codebase ดั้งเดิม การใช้ Fairseq เวอร์ชันล่าสุดอาจนำไปสู่ความขัดแย้งที่ไม่คาดคิด
efficient-attention เป็นรหัสฐานที่มีอยู่ในตัวเองขนาดเล็กที่รวบรวมกลไกความสนใจที่มีประสิทธิภาพหลายอย่าง
add_attn_specific_args() ในไฟล์ Python ที่เกี่ยวข้องargparse ให้ทำตามตัวอย่างโค้ดต่อไปนี้: import argparse
from efficient_attention import AttentionFactory
# ...
parser = argparse . ArgumentParser ()
parser . add_argument ( '--attn-name' , default = 'softmax' , type = str , metavar = 'ATTN' ,
help = 'Name of attention model to use' )
# ...
temp_args , _ = parser . parse_known_args ()
# add attention-specific arguments to the parser
# struct_name: name of the inner namespace to store all attention-specific arguments
# prefix: prefix to prepend to all argument names
# for example, if prefix = encoder-attn, then for the argument --window-size
# we need to pass --encoder-attn-window-size
# this is useful to avoid argument name conflicts.
efficient_attention . AttentionFactory . add_attn_specific_args ( parser , temp_args . attn_name , struct_name = "attn_args" , prefix = "" )
# parse arguments to a namespace that supports nested attributes
args = parser . parse_args ( namespace = efficient_attention . NestedNamespace ())
# now we can access the attention-specific arguments via args.attn_args
print ( args . attn_args . window_size ) ในคลาส torch.nn.Module คุณสามารถสร้างโมดูลความสนใจที่มีประสิทธิภาพดังนี้:
# we might want to pass attention-specific arguments to the attention module
# along with other related arguments
attn_args = {
** vars ( args . attn_args ),
** {
'dim' : args . embed_dim ,
'num_heads' : args . num_heads ,
'qkv_bias' : args . qkv_bias ,
'attn_drop' : args . attn_drop_rate ,
'proj_drop' : args . drop_rate ,
}
}
self . attn = AttentionFactory . build_attention ( attn_name = attn_name , attn_args = attn_args )
# the module can then be used as a normal function as
x = self . attn ( x ) เราติดตามการตั้งค่าที่คล้ายกับ deit เพื่อประมวลผลชุดข้อมูล Imagenet ล่วงหน้า ดาวน์โหลด Imagenet Train และ Val Images และวางไว้ในโครงสร้างไดเรกทอรีต่อไปนี้เพื่อให้สามารถใช้งานร่วมกับ datasets.ImageFolder Torchvision ได้
/path/to/imagenet/
train/
class1/
img1.jpeg
class2/
img2.jpeg
val/
class1/
img3.jpeg
class2/
img4.jpeg
คำสั่งต่อไปนี้ใช้สำหรับการฝึกอบรมและการประเมินหม้อแปลงวิสัยทัศน์ที่หลากหลายด้วย LARA/EVA การฝึกอบรมจะดำเนินการกับ 8 GPU
เพื่อใช้ LARA/EVA ในสถาปัตยกรรม deit ที่แตกต่างกัน:
# LARA: DeiT-tiny-p8
bash main.sh -m evit_tiny_p8 -p < dir-of-imagenet-data > -g 8 -d imagenet -e TRUE --dist-eval --num-workers 16 --clip-grad 5.0 --warmup-epochs 10 --seed 1 --attn-name lara --mis-type mis-opt --proposal-gen pool-mixed --alpha-coeff 2.0 --num-landmarks 49
# LARA: DeiT-tiny-p16
bash main.sh -m evit_tiny_p16 -p < dir-of-imagenet-data > -g 8 -d imagenet -e TRUE --dist-eval --num-workers 16 --clip-grad 5.0 --warmup-epochs 10 --seed 1 --attn-name lara --mis-type mis-opt --proposal-gen pool-mixed --alpha-coeff 2.0 --num-landmarks 49
# LARA: DeiT-small-p16
bash main.sh -m evit_small_p16 -p < dir-of-imagenet-data > -g 8 -d imagenet -e TRUE --dist-eval --num-workers 16 --clip-grad 5.0 --warmup-epochs 10 --seed 1 --attn-name lara --mis-type mis-opt --proposal-gen pool-mixed --alpha-coeff 2.0 --num-landmarks 49
# EVA: DeiT-tiny-p8
bash main.sh -m evit_tiny_p8 -p < dir-of-imagenet-data > -g 8 -d imagenet -e TRUE --dist-eval --num-workers 16 --clip-grad 5.0 --warmup-epochs 10 --seed 1 --attn-name eva --num-landmarks 49 --adaptive-proj default --window-size 7 --attn-2d --use-rpe
# EVA: DeiT-tiny-p16
bash main.sh -m evit_tiny_p16 -p < dir-of-imagenet-data > -g 8 -d imagenet -e TRUE --dist-eval --num-workers 16 --clip-grad 5.0 --warmup-epochs 10 --seed 1 --attn-name eva --num-landmarks 49 --adaptive-proj default --window-size 7 --attn-2d --use-rpe
# EVA: DeiT-small-p16
bash main.sh -m evit_small_p16 -p < dir-of-imagenet-data > -g 8 -d imagenet -e TRUE --dist-eval --num-workers 16 --clip-grad 5.0 --warmup-epochs 10 --seed 1 --attn-name eva --num-landmarks 49 --adaptive-proj default --window-size 7 --attn-2d --use-rpe เพื่อปรับ LARA/EVA ในสถาปัตยกรรม PVTV2:
# LARA Attention
bash main.sh -m pvt_medium2 -p < dir-of-imagenet-data > -g 8 -d imagenet -e TRUE --dist-eval --num-workers 16 --clip-grad 1.0 --drop-path-rate 0.3 --warmup-epochs 10 --seed 1 --attn-name lara --pool-module-type dense --mis-type mis-opt --proposal-gen pool-mixed --num-landmarks 49 --alpha-coeff 2.0 --repeated-aug
# EVA Attention
bash main.sh -m pvt_medium2 -p < dir-of-imagenet-data > -g 8 -d imagenet -e TRUE --dist-eval --num-workers 16 --clip-grad 5.0 --drop-path-rate 0.3 --warmup-epochs 10 --seed 1 --attn-name eva --num-landmarks 49 --adaptive-proj default --window-size 7 --attn-2d --use-rpe --repeated-augหรือคุณอาจต้องการลองใช้กลไกความสนใจอื่น ๆ :
# Softmax Attention
bash main.sh -m evit_tiny_p8 -d imagenet -e TRUE --dist-eval --num-workers 16 --clip-grad 5.0 --warmup-epochs 10 --seed 1 --attn-name softmax
# RFA/Performer
bash main.sh -m evit_tiny_p8 -d imagenet -e TRUE --dist-eval --num-workers 16 --clip-grad 5.0 --warmup-epochs 10 --seed 1 --attn-name performer --proj-method favorp --approx-attn-dim 64
# Local Attention
bash main.sh -m evit_tiny_p8 -d imagenet -e TRUE --dist-eval --num-workers 16 --clip-grad 5.0 --warmup-epochs 10 --seed 1 --attn-name local --window-size 7 --attn-2d --use-rpeเราใช้ Fairseq มาตรฐานล่วงหน้าเพื่อเตรียมข้อมูลสำหรับงานภาษา
WMT'14 EN-DE binarized;Wikitext-103-r <resume-ckpt-DIR> ระบุไดเรกทอรีที่เก็บจุดตรวจของคุณในระหว่างการฝึกอบรมและสามารถใช้ในการฝึกอบรมต่อ--encoder-attn- (สำหรับด้านเข้ารหัส) / --decoder-attn- (สำหรับตัวถอดรหัส) ดูตัวอย่างด้านล่าง # # LARA
CUDA_VISIBLE_DEVICES=0,1,2,3 bash main.sh -p < dir-of-your-bin-data > -d wmt -s lara_8 -g 4 -e TRUE --attn-name-encoder lara --encoder-attn-num-landmarks 8 --encoder-attn-proposal-gen adaptive-1d --encoder-attn-mis-type mis-opt
CUDA_VISIBLE_DEVICES=0,1,2,3 bash main.sh -p < dir-of-your-bin-data > -d wmt -s lara_16 -g 4 -e TRUE --attn-name-encoder lara --encoder-attn-num-landmarks 16 --encoder-attn-proposal-gen adaptive-1d --encoder-attn-mis-type mis-opt
CUDA_VISIBLE_DEVICES=0,1,2,3 bash main.sh -p < dir-of-your-bin-data > -d wmt -s lara_32 -g 4 -e TRUE --attn-name-encoder lara --encoder-attn-num-landmarks 32 --encoder-attn-proposal-gen adaptive-1d --encoder-attn-mis-type mis-opt
# # EVA
CUDA_VISIBLE_DEVICES=0,1,2,3 bash main.sh -p < dir-of-your-bin-data > -d wmt -s eva_8_8 -g 4 -e TRUE --attn-name-encoder eva --encoder-attn-window-size 8 --encoder-attn-num-landmarks 8 --encoder-attn-adaptive-proj no-ln --encoder-attn-use-t5-rpe --encoder-attn-overlap-window
CUDA_VISIBLE_DEVICES=0,1,2,3 bash main.sh -p < dir-of-your-bin-data > -d wmt -s eva_16_8 -g 4 -e TRUE --attn-name-encoder eva --encoder-attn-window-size 16 --encoder-attn-num-landmarks 8 --encoder-attn-adaptive-proj no-ln --encoder-attn-use-t5-rpe --encoder-attn-overlap-window
CUDA_VISIBLE_DEVICES=0,1,2,3 bash main.sh -p < dir-of-your-bin-data > -d wmt -s eva_32_8 -g 4 -e TRUE --attn-name-encoder eva --encoder-attn-window-size 32 --encoder-attn-num-landmarks 8 --encoder-attn-adaptive-proj no-ln --encoder-attn-use-t5-rpe --encoder-attn-overlap-window # Currently, LARA does not support causal masking yet.
# EVA on a 16-layer Transformer LM
CUDA_VISIBLE_DEVICES=0,1,2,3 bash main.sh -p < dir-of-your-bin-data > -m 16layers -d wikitext103 -s eva_128_8_16layers -g 4 -e TRUE --attn-name-decoder causal_eva --decoder-attn-window-size 128 --decoder-attn-causal --decoder-attn-adaptive-proj qk --decoder-attn-chunk-size 8 --decoder-attn-use-t5-rpe
# EVA on a 32-layer Transformer LM
CUDA_VISIBLE_DEVICES=0,1,2,3 bash main.sh -p < dir-of-your-bin-data > -m 32layers -d wikitext103 -s eva_128_8_32layers -g 4 -e TRUE --attn-name-decoder causal_eva --decoder-attn-window-size 128 --decoder-attn-causal --decoder-attn-adaptive-proj qk --decoder-attn-chunk-size 8 --decoder-attn-use-t5-rpe สำหรับการสร้างและการประเมินผลเพียงแค่ผ่านอาร์กิวเมนต์ -i true เมื่อเรียก main.sh เพื่อดำเนินการตามขั้นตอนการอนุมานเท่านั้น สามารถระบุเส้นทางจุดตรวจสอบเป็น -c <your-ckpt-path> ตัวอย่างเช่น,
# Machine Translation
CUDA_VISIBLE_DEVICES=0 bash main.sh -i true -c < your-possibly-avg-checkpoint.pt > -p < dir-of-your-bin-data > -d wmt -g 1
# Autoregressive Language Modeling
CUDA_VISIBLE_DEVICES=0 bash main.sh -i true -c < your-checkpoint_last.pt > -p < dir-of-your-bin-data > -d wikitext103 -g 1 นอกจากนี้เรายังมีจุดตรวจ EVA แบบจำลองที่ผ่านการฝึกอบรมใน OneDrive สำหรับการแปลเครื่องและงานการสร้างแบบจำลองภาษา:
@inproceedings { zheng2023efficient ,
title = { Efficient Attention via Control Variates } ,
author = { Lin Zheng and Jianbo Yuan and Chong Wang and Lingpeng Kong } ,
booktitle = { International Conference on Learning Representations } ,
year = { 2023 } ,
url = { https://openreview.net/forum?id=G-uNfHKrj46 }
} @inproceedings { zheng2022linear ,
title = { Linear complexity randomized self-attention mechanism } ,
author = { Lin Zheng and Chong Wang and Lingpeng Kong } ,
booktitle = { International Conference on Machine Learning } ,
pages = { 27011--27041 } ,
year = { 2022 } ,
organization = { PMLR }
}