
يتم إحضار Attrutgrid لك من قِبل Agora ، نحن منظمة أبحاث منظمة العفو الدولية ذات المصدر الجديد تمامًا كليًا مكرسة لتطوير الإنسانية.
انضم إلينا هنا للمساهمة في هذا المشروع أو تلقي الدعم!

HoundGrid هو إطار عمل متطور مصمم لإضفاء الطابع الديمقراطي على دمج آليات الانتباه المتقدمة في نماذج الذكاء الاصطناعي. مدعومًا بأحدث التطورات في نماذج المحولات المستندة إلى الانتباه ، يفتح IntrentGrid عالم آليات الاهتمام لممارسي التعلم الآلي والباحثين والعشاق على حد سواء.
للانفجار مع الانتباه ، قم بتثبيت الحزمة باستخدام PIP:
pip install AttentionGridإن تنفيذ آلية الانتباه أو نموذج محول مع انتباه أمر سهل مثل:
from AttentionGrid import BlockwiseParallelJax
import jax . numpy as jnp
# Initialize the class
bpjax = BlockwiseParallelJax (
q_chunk_size = 64 ,
k_chunk_size = 64 ,
hidden_size = 768 ,
num_heads = 12 ,
rotary_dim = 32 ,
intermediate_size = 3072
)
# Suppose we have hidden_states, attention_mask, and position_ids as input data
hidden_states = jnp . random . rand ( 1 , 100 , 768 )
attention_mask = jnp . random . rand ( 1 , 1 , 100 , 100 )
position_ids = jnp . arange ( 100 ). reshape ( 1 , 100 )
# You can now apply the attention mechanism to your input data
output = bpjax . forward ( hidden_states , attention_mask , position_ids )نحن نشجعك على مشاركة الانتباه مع مجتمعك! فيما يلي روابط مشاركة سريعة للعديد من منصات الوسائط الاجتماعية:
شارك على Twitter
مشاركة على LinkedIn
شارك على Facebook
مشاركة على reddit
شارك على WhatsApp
شكرًا لك على دعم الانتباه والمساهمة في إضفاء الطابع الديمقراطي على الذكاء الاصطناعي! معا ، يمكننا دفع حدود ما هو ممكن.
في المشهد الشاسع لمنظمة العفو الدولية ، أحدثت آليات الانتباه ثورة في قدرتنا على إنشاء نماذج قوية يمكن أن تميز التفاصيل الدقيقة في البيانات ، مع التركيز على الجوانب المهمة وتحسين الأداء العام. تتمثل رؤيتنا مع الانتباه في سد الفجوة بين هذه الآليات الحديثة وتطبيقاتها العملية ، مما يوفر أداة تجعل هذه التقنيات متاحة وسهلة التنفيذ في تطبيقات الذكاء الاصطناعى المتنوعة.
تم تصميم IntrentedGrid مع بنية بديهية ومرنة ، مقسمة إلى أربعة مكونات أولية:
Core : هذا هو الأساس من إطار عملنا ، فصول الإسكان المجردة التي تخضع للهيكل الأساسي لآليات الانتباه ونماذج المحولات.
الاهتمام ؟: الدليل المخصص لآليات الاهتمام المختلفة. يتم تنفيذ كل آلية انتباه بناءً على المخطط المنصوص عليه في القلب.
Transformers ؟: هذا هو المكان الذي تنطلق فيه نماذج المحولات ، كل منها منحوت بعد التصميم المحدد في القلب.
utils : صندوق أدوات مليء بفئات المساعدة للمهام الأساسية مثل تحميل النماذج ، والمعالجة المسبقة للبيانات ، وأكثر من ذلك.
أمثلة : إزالة الغموض عن التنفيذ بأمثلة عملية وسيناريوهات الاستخدام.
الهيكل المعياري : اخلطي وتطابق آليات الاهتمام المختلفة مع مجموعة متنوعة من نماذج المحولات.
سهلة الاستخدام : توثيق واضح وأمثلة لمساعدتك في البدء بسرعة.
المصدر المفتوح : مفتوح للمساهمات ، يزدهر الانتباه على المعرفة الجماعية والتقدم المشترك.
لمزيد من الأمثلة التفصيلية ، يرجى الرجوع إلى مجلد "الأمثلة" في مستودعنا.
نحن ندعو علانية المساهمات إلى الانتباه! سواء كان لديك اقتراح ميزة جديد أو تقرير الأخطاء أو ترغب في إضافته إلى الكود الخاص بنا ، فلا تتردد في فتح مشكلة أو إرسال طلب سحب.
يعد InterntedGrid برامج مفتوحة المصدر بفخر ، وهي مرخصة بموجب ترخيص Apache.
لقد حولت آليات الانتباه الذكاء الاصطناعي ، مما أدى إلى "التركيز" على أجزاء كبيرة من بيانات الإدخال. مع الانتباه ، نحن نهدف إلى إضفاء الطابع الديمقراطي على الوصول إلى هذه الأدوات القوية. نحن نعتقد أن مستقبل الذكاء الاصطناعي يكمن في قوة الاهتمام ، ومن خلال الانتباه ، نأمل أن نسرع هذه الرحلة. استكشف مستودعنا ، وانضم إلى قضيتنا ، ودعونا ننقل هذا المشهد المثير معًا!
"التفاصيل ليست هي التفاصيل. إنها تصنع التصميم." - تشارلز إيمز
دمج انتباه الفلاش ، والمتغيرات
دمج الاهتمام التاريخي
دمج الاهتمام الموازي blockwise
دمج اهتمام فلاش متناثر ديناميكي
دمج الاهتمام المتقاطع من ImageBind
دمج الانتباه COLT-5
دمج الاهتمام متعدد السبعات
دمج الأغطية من الأمطار الواضحة x_transformers ، فك التشفير ، الانتباه ، التشفير ، غلاف المحولات
| آلية | طريقة الاتصال | مثال استيراد |
|---|---|---|
| الاهتمام الذاتي | from AttentionGrid import SelfAttention | from AttentionGrid import SelfAttention |
| الاهتمام العالمي | from AttentionGrid import GlobalAttention | from AttentionGrid import GlobalAttention |
| الاهتمام المحلي | from AttentionGrid import LocalAttention | from AttentionGrid import LocalAttention |
| الاهتمام الهرمي | from AttentionGrid import HierarchicalAttention | from AttentionGrid import HierarchicalAttention |
| الاهتمام المتفرق الديناميكي | from AttentionGrid import dynamic_sparse_attention | from AttentionGrid import dynamic_sparse_attention |
| وظيفة مضغوطة | from AttentionGrid import compact | from AttentionGrid import compact |
| وظيفة فهرس PAD | from AttentionGrid import pad_index | from AttentionGrid import pad_index |
| الاهتمام الموازي blockwise | from AttentionGrid import BlockwiseParallelJax | from AttentionGrid import BlockwiseParallelJax |
| فلاش الاهتمام | from AttentionGrid import FlashAttention | from AttentionGrid import FlashAttention |
| الاهتمام التاريخي | from AttentionGrid import LandmarkAttention | from AttentionGrid import LandmarkAttention |
| Colt-5 الانتباه | from AttentionGrid import Colt5Attention | from AttentionGrid import Colt5Attention |
| اهتمام متعددة في الدرجات | from AttentionGrid import MultiQueryAttention | from AttentionGrid import MultiQueryAttention |
| اهتمام تمدد | from AttentionGrid import DilatedAttention | from AttentionGrid import DilatedAttention |
تتيح وظيفة Agora dynamic_sparse_attention مرونة الاختيار بين تطبيق التجزئة وتطبيق QK-sparse. هدف هذه الوظيفة هو توجيه آلية الانتباه المتفرقة بشكل ديناميكي بناءً على sparsity_mode المحدد.
معلمات الوظيفة هي كما يلي:
q : Query Tensor of Shape (Batch ، N_CTX_Q ، H ، D_HEAD)k : مفتاح الشكل من الشكل (دفعة ، N_CTX_KV ، H ، D_HEAD)v : قيمة موتر الشكل (دفعة ، N_CTX_KV ، H ، D_HEAD)q_idx & k_idx : قم بتمثيل إما فهرس الجرافة إذا كان sparsity_mode هو "hash" أو ما إذا كان يجب الاحتفاظ برأس معين إذا كان sparsity_mode هو "QK". أشكال الموتر هي (الدُفعة ، N_CTX_Q ، H) و (BATCH ، N_CTX_KV ، H) على التوالي.sm_scale : ثابت التطبيع ، 1/SQRT (D_HEAD) ما لم يتم تحديد.sparsity_mode : "التجزئة" لتحديد تطبيق التجزئة و "QK" لتنفيذ QK-sparse. يتم حساب sm_scale افتراضيًا إذا لم يتم توفيره ، وإذا تم إعطاء sparsity_mode غير معروف ، فإنه يرمي keyerror.
ثم تتحقق الوظيفة من sparsity_mode واستنادًا إلى قيمتها ، فهي تستدعي إما hash_sparse_attention أو qk_sparse_attention .
تقوم الدالة compact بإنشاء تمثيل مضغوط لمترات الإدخال x باستخدام المعلومات من keep_tensor .
معلمات الوظيفة هي:
x : إدخال موتر للضغط ، مع الشكل (دفعة ، n_ctx ، h ، d_head).keep_tensor : موتر عائم من الشكل (دفعة ، N_CTX ، H) يحتوي على 1 عند الاحتفاظ الرأس و 0 خلاف ذلك. تقوم الوظيفة أولاً بحساب indices_per_head الذي يحسب عدد العناصر غير القوية لكل رأس. يقوم بفرز keep_tensor في ترتيب تنازلي مع الحفاظ على ترتيب عناصر متساوية (مستقر = صحيح). ثم يجمع عناصر x بناءً على موتر الفهرس. والنتيجة هي تمثيل مضغوط لـ x جنبًا إلى جنب مع موتر الفهرس والتوتر الذي يمثل عدد العناصر غير القشرية لكل رأس.
تقوم دالة pad_index بوسام موتر الفهرس للامتثال للنواة. يستغرق المعلمات التالية:
index : موتر الفهرس الأصلي المقدم من قبل compact ، مع الشكل (دفعة ، buffer_size ، ح). لكل دفعة وجدول زمني ، فإنه يمثل فهرس الرأس الذي ينشأ منه.indices_per_head : لكل رأس ، يحتوي على عدد المؤشرات التي لم يتم إسقاطها. إنه ينشئ نسخة من موتر الفهرس ويقوم بإنشاء قناع يعتمد على حجم indices_per_head . ثم يقوم بتعديل المؤشرات الموجودة في النسخة التي تتوافق مع True في القناع لتكون مساوية لـ pad_idx .
وظيفة qk_sparse_attention هي جزء من آلية الانتباه المتفرقة الديناميكية. يتم استخدامه عند ضبط sparsity_mode على "QK". تنفذ هذه الوظيفة من آلية الانتباه QK-sparse وتتطلب أن تكون معلمات q_keep و k_keep من نوع تعويم.
يقوم أولاً بإنشاء تمثيلات مضغوطة للاستعلام والمفتاح والقيمة باستخدام دالة compact . ثم يقوم بوسادات الفهرس باستخدام دالة pad_index . ثم يتم نقل التنسورات للتوافق مع النواة. أخيرًا ، تستدعي الدالة وظيفة qk_sparse_attention_kernel وتنتشر التوتر الناتج إلى مساحة البعد الأصلي.
وظيفة hash_sparse_attention هي جزء من آلية الانتباه المتفرقة الديناميكية. يتم استخدامه عند ضبط sparsity_mode على "التجزئة". هذه الوظيفة تنفذ آلية الاهتمام بالتجزئة.
تأخذ الوظيفة نفس معلمات الإدخال مثل qk_sparse_attention . ومع ذلك ، بدلاً من معلمات q_keep و k_keep ، تتطلب وظيفة hash_sparse_attention q_bucket_idx و k_bucket_idx التي تمثل مؤشرات دلو للاستعلامات والمفاتيح على التوالي.
تقوم وظيفة hash_sparse_attention أولاً بفرز الاستعلام والمفتاح والقيمة المستندة إلى مؤشرات الجرافة باستخدام وظيفة sort_bucketed_attention . ثم يقوم بإنشاء تمثيلات مضغوطة للاستعلام والمفتاح والقيمة المرتبة باستخدام وظيفة compact . ثم يقوم بوسادات الفهرس باستخدام دالة pad_index .
ثم يتم نقل التنسورات للتوافق مع النواة. ثم تستدعي الوظيفة وظيفة hash_sparse_attention_kernel وتنتشر التوتر الناتج مرة أخرى إلى مساحة البعد الأصلي.
وظيفة sort_bucketed_attention هي وظيفة مساعد تستخدم في hash_sparse_attention . يقوم بفرز توترات الإدخال بناءً على مؤشرات الجرافة المحددة.
معلمات الوظيفة هي:
qkv : الاستعلام ، المفتاح ، موترات القيمة من الشكل (دفعة ، N_CTX ، H ، D_HEAD)qkv_bucket_idx : مؤشرات دلو للاستعلامات والمفاتيح وقيم الشكل (دفعة ، N_CTX ، ح) تقوم الوظيفة أولاً بفرز الموتر qkv_bucket_idx وتحصل على المؤشرات المرتبة. ثم يقوم بفرز موترات qkv باستخدام المؤشرات المصنفة. كما أنه يوسع qkv_bucket_idx ليكون نفس شكل qkv للتوافق.
وظيفة qk_sparse_attention_kernel هي وظيفة kernel المستخدمة في qk_sparse_attention . يقوم بحساب مجموع القيم المرجح بناءً على softmax من الاستعلام والمنتج الرئيسي.
معلمات الوظيفة هي:
q : Query Tensor of Shape (Batch ، N_CTX_Q ، H ، D_HEAD)k : مفتاح الشكل من الشكل (دفعة ، N_CTX_KV ، H ، D_HEAD)v : قيمة موتر الشكل (دفعة ، N_CTX_KV ، H ، D_HEAD)sm_scale : ثابت التطبيع ، 1/SQRT (D_HEAD) ما لم يتم تحديد. وظيفة hash_sparse_attention_kernel هي وظيفة kernel المستخدمة في hash_sparse_attention . إنه يعمل بشكل مشابه لـ qk_sparse_attention_kernel ولكنه يتولى دلو من أجل اهتمام التجزئة.
معلمات الوظيفة هي نفس معايير qk_sparse_attention_kernel . ومع ذلك ، تم فرز وضغط q و k و v بناءً على مؤشرات الجرافة.
تقوم kernel بحساب منتج الاستعلام والمفتاح ، ويقوم بتطبيقه بواسطة sm_scale ، ويطبق softmax للحصول على الأوزان ، ثم يحسب المبلغ المرجح للقيم.
يرجى ملاحظة أن هذا تفسير عام للوثائق ، وأن فهم وتعديل هذه الوظائف في الممارسة قد يتطلب معرفة متعمقة بآليات الانتباه المتفرقة ومبادئ التعلم العميق.
وظيفة blockwise_compute_attn :
تعد وظيفة blockwise_compute_attn جزءًا مهمًا من فئة BlockwiseParallelJax وتستخدم لحساب آلية الانتباه للنموذج بطريقة blockwise.
حدود:
query ، key ، value : هذه المعلمات هي المدخلات الرئيسية لحساب الانتباه ، تمثل الاستعلامات والمفاتيح والقيم ، على التوالي.bias : معلمة اختيارية تستخدم لإضافة تحيز إلى درجات الانتباه قبل softmax.deterministic : علامة منطقية تستخدم لتحديد ما إذا كان سيتم تطبيق التسرب أم لا.dropout_rng : مولد الرقم العشوائي للتسرب.attn_pdrop : احتمال التسرب للانتباه.causal_mask : علامة منطقية لما إذا كان يجب استخدام قناع الاهتمام السببي أم لا.query_chunk_size ، key_chunk_size : حجم كل استعلام وقطع مفتاح ، على التوالي.dtype : نوع بيانات الحساب. إنه افتراضي هو jnp.float32 .policy : تحدد هذه المعلمة سياسة تحديد التدرج.precision : يتم استخدام هذه المعلمة لتعيين مستوى الدقة للحساب. القيمة الافتراضية هي lax.Precision.HIGHEST .prevent_cse : علامة منطقية تستخدم لمنع القضاء على التعبير الفرعي الشائع.وظيفة blockwise_compute_ffn :
يتم استخدام وظيفة blockwise_compute_ffn لحساب شبكة التغذية إلى الأمام للنموذج بطريقة blockwise.
حدود:
cell : الخلية في الشبكة التي يتم تطبيق الوظيفة عليها.inputs : بيانات الإدخال لشبكة التغذية.chunk_size : حجم كل قطعة للحساب blockwise.deterministic : علامة منطقية تستخدم لتحديد ما إذا كان سيتم تطبيق التسرب أم لا.policy : تحدد هذه المعلمة سياسة تحديد التدرج.prevent_cse : علامة منطقية تستخدم لمنع القضاء على التعبير الفرعي الشائع.فئة blockwise_lm_head :
فئة Blockwise_LM_Head عبارة عن وحدة نمطية تطبق تحولًا خطيًا متبوعًا بوظيفة SoftMax لإنتاج توزيع على المفردات لكل موضع في الإدخال.
vocab_size : حجم المفردات ، وهو أيضًا حجم البعد المخرج للتحول الخطي.chunk_size : حجم كل قطعة للحساب blockwise.policy : تحدد هذه المعلمة سياسة تحديد التدرج.dtype : نوع بيانات الحساب. إنه افتراضي هو jnp.float32 .prevent_cse : علامة منطقية تستخدم لمنع القضاء على التعبير الفرعي الشائع.وظيفة blockwise_cross_entropy :
تقوم وظيفة blockwise_cross_entropy بحساب فقدان الإدخال المتقاطع لتنبؤات النموذج بطريقة حظر.
حدود:
logits : تنبؤات إخراج النموذج.tokens : الملصقات الحقيقية.valid : قناع يحدد المواضع الصالحة في الإدخال.chunk_size : حجم كل قطعة للحساب blockwise.policy : تحدد هذه المعلمة سياسة تحديد التدرج.prevent_cse : علامة منطقية تستخدم لمنع القضاء على التعبير الفرعي الشائع.فئة blockwiseparaldaljax :
BlockwiseParallelJax ( q_chunk_size , k_chunk_size , hidden_size , num_heads , rotary_dim , intermediate_size , layer_norm_epsilon = 1e-5 , activation_function = "gelu" , attn_pdrop = 0.0 , resid_pdrop = 0.0 , max_position_embeddings = 1024 , dtype = jnp . float32 , causal = True , policy = 'nothing_saveable' , prevent_cse = False , float32_logits = False )حدود
q_chunk_size : عدد صحيح. حجم قطعة للاستعلام في الاهتمام الذاتي.k_chunk_size : عدد صحيح. حجم قطعة للمفتاح في الاهتمام الذاتي.hidden_size : عدد صحيح. أبعاد الطبقة المخفية في المحول.num_heads : عدد صحيح. عدد الاهتمام يتجه في آلية الاهتمام الذاتي.rotary_dim : عدد صحيح أو لا شيء. عدد الأبعاد لاستخدامها في الترميز الموضعي الدوار.intermediate_size : عدد صحيح. حجم الطبقة الوسيطة في الشبكة الخلاصة.layer_norm_epsilon : تعويم. ثابت صغير لمنع الانقسام عن طريق الصفر في تطبيع الطبقة. الافتراضي هو 1e-5 .activation_function : String. وظيفة التنشيط لاستخدامها في شبكة التغذية. الافتراضي هو 'gelu' .attn_pdrop : تعويم. احتمال التسرب لآلية الانتباه. الافتراضي هو 0.0 .resid_pdrop : تعويم. احتمال التسرب للاتصالات المتبقية. الافتراضي هو 0.0 .max_position_embeddings : integer. الحد الأقصى لعدد التضمينات للموضع للاستخدام. الافتراضي هو 1024 .dtype : Jnp.dtype. نوع البيانات لاستخدامها للحساب. الافتراضي هو jnp.float32 .causal : منطقية. سواء كنت تستخدم الوضع السببي (التلقائي) أم لا. الافتراضي True .policy : سلسلة. سياسة تدرجات تحديد الفحص. الافتراضي هو 'nothing_saveable' .prevent_cse : منطقية. ما إذا كان لمنع القضاء على التعبير الفرعي الشائع (CSE). الافتراضي False .float32_logits : منطقية. ما إذا كان لاستخدام Float32 لحساب سجلات. الافتراضي False .طُرق
الطريقة الرئيسية لفئة BlockwiseParallelJax هي الطريقة forward ، التي تؤدي التمريرة الأمامية لكتلة المحول.
forward ( hidden_states , attention_mask , position_ids , deterministic = True , init_cache = False )hidden_states : Jnp.ndarray. موتر الإدخال إلى كتلة المحول. يجب أن يكون له شكل (batch_size, sequence_length, hidden_size) .attention_mask : jnp.ndarray. قناع الانتباه لآلية الاهتمام الذاتي. يجب أن يكون له شكل (batch_size, 1, 1, sequence_length) .position_ids : jnp.ndarray. معرفات الموقف للترميز الموضعي. يجب أن يكون لها شكل (1, sequence_length) .deterministic : منطقية. سواء كنت تستخدم الوضع الحتمي (بدون تسرب) أم لا. الافتراضي True .init_cache : منطقية. ما إذا كان لتهيئة ذاكرة التخزين المؤقت لفك التشفير السريع. الافتراضي False . تقوم هذه الطريقة بإرجاع موتر الإخراج من كتلة المحولات ، والتي لها نفس شكل hidden_states .
مثال الاستخدام
يوضح المثال التالي كيفية استخدام فئة BlockwiseParallelJax .
# Initialize
from jax import random
import jax . numpy as jnp
from AttentionGrid import BlockwiseParallelJax
# Initialize transformer block
block = BlockwiseParallelJax (
q_chunk_size = 64 ,
k_chunk_size = 64 ,
hidden_size = 768 ,
num_heads = 12 ,
rotary_dim = 64 ,
intermediate_size = 3072 ,
)
# Create a batch of input tensors
key = random . PRNGKey ( 0 )
batch_size = 8
sequence_length = 128
hidden_states = random . normal ( key , ( batch_size , sequence_length , block . hidden_size ))
# Create attention mask
attention_mask = jnp . ones (( batch_size , 1 , 1 , sequence_length ))
# Create position ids
position_ids = jnp . arange ( sequence_length )[ None , :]
# Forward pass
output = block . forward ( hidden_states , attention_mask , position_ids )
print ( output . shape ) # prints: (8, 128, 768) FusedLandmarkAttention هذه فئة Function Pytorch التي تغلف الوظائف الأمامية والخلف لآلية الانتباه المعالم المنصهرة.
forward(ctx, q, k, v, n_prefix_q, sm_scale, block_size)تؤدي هذه الوظيفة التمريرة الأمامية للاهتمام المعاري المنصهر.
ctx : كائن يمكننا حفظ المتغيرات إليه للاستخدام في الممر الخلفي. المقدمة من نظام Autograd التابع لشركة Pytorch.q : موتر الاستعلامات. من المفترض أن تكون متجاورة ، ويجب أن يكون شكله (دفعة ، nheads ، seqlen_q ، d).k : مفاتيح الموتر. من المفترض أن تكون متجاورة ، ويجب أن يتطابق شكله مع شكل Q ، أي (الدُفعات ، nheads ، seqlen_k ، d).v : القيم الموتر. من المفترض أن تكون متجاورة ، ويجب أن يتطابق شكله مع أشكال Q و K ، أي (الدُفعات ، nheads ، seqlen_k ، d).n_prefix_q : عدد البادئات في الاستعلامات.sm_scale : عامل التحجيم المستخدم في عملية softmax.block_size : حجم الكتلة لأداء العمليات الحكيمة. o : موتر الإخراج من التمريرة الأمامية لآلية الانتباه المعالم المنصهرة. backward(ctx, do)تؤدي هذه الوظيفة التمريرة المتخلف من الاهتمام المعلمي المنصهر ، أي أنها تحسب التدرجات.
ctx : كائن يمكننا من خلاله استرداد المتغيرات المحفوظة في الممر الأمامي. المقدمة من نظام Autograd التابع لشركة Pytorch.do : تدرج الخسارة فيما يتعلق بإخراج الوظيفة الأمامية. None يكون التدرج المقابل له.fused_landmark_attention(q, k, v, is_mem, sm_scale=None, block_size=64) هذه الوظيفة هي غلاف مناسب لفئة FusedLandmarkAttention .
q : موتر الاستعلامات.k : مفاتيح الموتر.v : القيم الموتر.is_mem : موتر منطقي يشير إلى ما إذا كان ينبغي التعامل مع كل زوج من القيمة الرئيسية كذاكرة. يجب أن يكون له نفس طول تسلسل المفاتيح.sm_scale : عامل التحجيم المستخدم في عملية softmax. إذا None يتم ضبطه على 1.0 / sqrt(d) .block_size : حجم الكتلة لأداء العمليات الحكيمة. فيما يلي مثال أساسي على كيفية استخدام وظيفة fused_landmark_attention .
import torch
from AttentionGrid import fused_landmark_attention
# Initialize some tensors
batch = 8
nheads = 12
seqlen = 128
d = 64
q = torch . randn ( batch , nheads , seqlen , d )
k = torch . randn ( batch , nheads , seqlen , d )
v = torch . randn ( batch , nheads , seqlen , d )
is_mem = torch . zeros ( seqlen , dtype = torch . bool )
# Call the function
output = fused_landmark_attention ( q , k , v , is_mem )
print ( output . shape ) # prints: (8, 12, 128, 64)يقوم هذا المثال أولاً بتهيئة بعض الموترات لتكون بمثابة الاستعلامات ، والمفاتيح
والقيم. ثم يستدعي وظيفة fused_landmark_attention وتطبع شكل موتر الإخراج.
import torch
import torch . nn as nn
from AttentionGrid import DilatedAttention
# Replace this with your correct GPU device
device = "cuda:0"
dtype = torch . float16
# Create an instance of DilatedAttention
d_model = 512
num_heads = 8
dilation_rate = 2
segment_size = 64
dropout = 0.2 # Specify the dropout rate
attention = DilatedAttention (
d_model = d_model ,
num_heads = num_heads ,
dilation_rate = dilation_rate ,
segment_size = segment_size ,
dropout = dropout ,
). to ( device , dtype = dtype )
# Create some dummy input data
batch_size = 16
seq_len = 128
input_dim = d_model
inputs = torch . randn ( batch_size , seq_len , input_dim , device = device , dtype = dtype )
# Forward pass
outputs = attention ( inputs )
# Print the output shape
print ( outputs . shape ) # Expected: [batch_size, seq_len, d_model] في المثال أعلاه ، نقوم بإنشاء مثيل من فئة DilatedAttention مع فرط البرارامات المحددة. ننشئ بعد ذلك بعض بيانات الإدخال الوهمية ونمررها من خلال آلية الانتباه للحصول على المخرجات. أخيرًا ، نطبع شكل موتر الإخراج.
تنفذ فئة DilatedAttention الانتباه المتوسع ، والذي يوسع الحقل اليقظ بشكل كبير مع نمو المسافة بين الرموز. يرث من torch.nn.Module ويمكن استخدامه كبديل للاستبدال لآليات الاهتمام القياسية في نماذج المحولات.
d_model (int): أبعاد إدخال الإدخال والمخرجات.num_heads (int): عدد رؤساء الاهتمام.dilation_rate (int): معدل الامتداد لتفاؤل تسلسل الإدخال.segment_size (int): حجم كل جزء بعد التباين.dropout (تعويم ، اختياري): احتمال التسرب للتطبيق على إخراج الانتباه. الافتراضي: 0.0 (بدون تسرب).x (Tensor): موتر الإدخال من الشكل (batch_size, seq_len, d_model) .output (Tensor): موتر إخراج الشكل (batch_size, seq_len, d_model) . يرجى ملاحظة أن موتر الإدخال يجب أن يكون على الجهاز الصحيح (على سبيل المثال ، GPU) وأن يكون لديك نوع البيانات المناسب ( dtype ).