يحتوي هذا المستودع على التنفيذ الرسمي للتجارب التي أجريت في
؟ هيكل الريبو:
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 الخاصة بنا تعدل العديد من الملفات في قاعدة الكود الأصلية ؛ قد يؤدي استخدام إصدارات أكثر حداثة من فيرسيك إلى تعارضات غير متوقعة.
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 لعملية DataSet Process Process. قم بتنزيل صور ImageNet Train و Val ووضعها في بنية الدليل التالية بحيث يمكن أن تكون متوافقة مع datasets.ImageFolder TorchVision.ImageFolder
/path/to/imagenet/
train/
class1/
img1.jpeg
class2/
img2.jpeg
val/
class1/
img3.jpeg
class2/
img4.jpeg
يتم استخدام الأوامر التالية لتدريب وتقييم مختلف محولات الرؤية مع LARA/EVA . من المفترض أن يتم التدريب مع 8 وحدات معالجة الرسومات.
لاستخدام 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 ذات الضعف ؛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 }
}