• مقدمة
• تثبيت
• طبقات
• وظائف الرياضيات
• PYTORCH
• الاختبارات
ATTORCH هي مجموعة فرعية من وحدة nn
، مكتوبة بحتة في Python باستخدام Openai's Triton. هدفها هو أن تكون مجموعة من وحدات الشبكة العصبية القابلة للاختراق بسهولة وقابلة للقراءة مع الحفاظ على كفاءة Pytorch أو تحسينها. وبعبارة أخرى ، فإنه يعتزم أن يكون مشروعًا قابلاً للتشغيل ، يتمتع بتصميم بسيط وبديهي يمكن أن يكون بمثابة نقطة انطلاق يمكن الوصول إليها لأولئك الذين يسعون لتطوير عمليات تعليمية عميقة مخصصة ولكنهم غير راضين عن سرعة تطبيق Pytorch الخالص وليس لديهم الخبرة الفنية أو الموارد لكتابة نواة CUDA.
يوجد بالفعل عدد من الأطر الرائعة التي تشبه Pytorch التي تعمل بها Triton ، بما في ذلك Kernl و Xformers و Unloth و fla
، ولكن معظمهم يركزون بشكل أساسي على المحولات وتطبيقات NLP ، في حين يهدف Attorch إلى أن يكون أكثر شمولاً من خلال تقديم مجموعة متنوعة من الطبقات المتعلقة بجانب NLP مثل رؤية الكمبيوتر. علاوة على ذلك ، فإن ATTORCH ليس حزمة استنتاج فقط ويدعم تمامًا كل من التمريرات إلى الأمام والخلف ، مما يعني أنه يمكن استخدامه أثناء التدريب وكذلك الاستدلال ، على الرغم من أن أدائها للأخير لا يكون على قدم المساواة مع محركات الاستدلال المخصصة.
التبعيات الوحيدة في actorch هي torch==2.4.0
و triton==3.0.0
. يرجى تثبيت الإصدارات المحددة من هاتين المكتبتين واستنساخ هذا المستودع للبدء.
الطبقات التي تم تنفيذها حاليًا ، مع دعم الدقة المختلطة التلقائية (AMP) ، هي ،
attorch.Conv1d
: 1d-convolves على الإدخال باستخدام الأوزان ، إضافة اختياريا التحيز.attorch.Conv2d
: 2d-convolves عبر الإدخال باستخدام الأوزان ، إضافة اختياريا التحيز.attorch.MultiheadAttention
: يطبق اهتمامًا متعدد الأبراج من النقطة المقيدة على المدخلات.attorch.Hardsigmoid
: يطبق sigmoid الثابت على المدخلات ، وتودمج اختياريا.attorch.Hardswish
: يطبق البريقات الصلبة على المدخلات ، وتوصيف اختياريا.attorch.LeakyReLU
: يطبق التسرب على المدخلات ، وتودمج اختياريا.attorch.GELU
: يطبق جيلو على الإدخال ، وتوصيف التوصيف اختياريا.attorch.ReLU
: يطبق RELU على الإدخال ، وتودمج اختياريا.attorch.ReLU6
: يطبق RELU6 على الإدخال ، وتوصيف اختياريا.attorch.SELU
: يطبق SELU على الإدخال ، وتودمج اختياريا.attorch.SiLU
: يطبق Silu على الإدخال ، وتودمج اختياريا.attorch.Mish
: يطبق Mish على المدخلات ، وتوديس التوصيف اختياريا.attorch.Sigmoid
: يطبق sigmoid على المدخلات ، وتوصيف اختياريا.attorch.Tanh
: يطبق TANH على المدخلات ، وتوصيف اختياريا.attorch.GLU
: يطبق الوحدة الخطية بوابات مع وظيفة تنشيط تعسفي على الإدخال.attorch.LogSoftmax
: تطبيع الإدخال باستخدام softmax ويأخذ سجله.attorch.Softmax
: تطبيع الإدخال باستخدام softmax.attorch.Softmin
: تطبيع المدخلات باستخدام softmin.attorch.BatchNorm1d
: يقوم الدُفعات الطبيعية بإدخال 2D أو 3D ، مما يدمر اختياريًا وظيفة تنشيط وإضافة متبقية إلى نتيجة ما قبل التنشيط.attorch.BatchNorm2d
: Batch-Patch-Itorships 4D ، توصيف وظيفة تنشيط اختياريًا وإضافة متبقية إلى نتيجة ما قبل التنشيط.attorch.LayerNorm
: طبقة الطبيعية للإدخال.attorch.RMSNorm
: الجذر-mean-square- يطرف المدخلات.attorch.Linear
: يحول الخطي الإدخال باستخدام الأوزان ، وإضافة التحيز اختياريا ودمج وظيفة التنشيط.attorch.Dropout
: عناصر الأصفار عشوائيا في المدخلات أثناء التدريب.attorch.L1Loss
: يقيس متوسط الخطأ المطلق بين المدخلات والهدف.attorch.MSELoss
: يقيس متوسط الخطأ التربيعي بين المدخلات والهدف.attorch.CrossEntropyLoss
: يقيس متوسط فقدان الانتروبيا بين المدخلات والهدف ، مع إعادة توحيد اختيارية لكل فئة.attorch.NLLLoss
: يقيس فقدان احتمال السجل السلبي بين المدخلات والهدف ، مع إعادة توحيد اختيارية لكل فئة.ما لم يذكر خلاف ذلك في مستنداتها ، فإن الطبقات المذكورة أعلاه تتصرف بشكل متماثل لمكافئات Pytorch الخاصة بهم.
تتكون نواة Triton عمومًا من جزأين: يتولى أحدهم تحميل وتخزين الموترات ذات الصلة ، والآخر يحول البيانات باستخدام الوظائف الرياضية المناسبة. على سبيل المثال ، تقرأ نواة تطبيع الطبقة واحدة أو عدة صفوف من الإدخال (تحميل) ، وتوحيد الميزات (الرياضيات) ، وتكتب النتائج في حاوية (متجر). يتم توفير مجموعة مختارة من وظائف الرياضيات الخالصة هذه بواسطة attorch.math
، والهدف هو تسهيل تنفيذ النواة المخصصة والانصهار. على الرغم من أن الممرات الأمامية للوظائف المذكورة متوفرة فقط في attorch.math
، بفضل نقاءها وغياب إجراءات الإدخال/الإخراج ، يمكن اشتقاق تدرجاتها تلقائيًا عبر مكتبة triton-autodiff
. يمكن إعادة إنشاء أجزاء كبيرة من نواة Attorch من خلال استبدال أجزاء الرياضيات الخاصة بهم مع التحولات المقابلة attorch.math
أو مشتقاتها ، لكن القيام بذلك سيظلان على الرفع الواحد والتصميم المستقل لتوتشرش ، لذا فإن attorch.math
وبقية Attorch سيظلون منفصلين.
لتمكين تكامل أسهل لطبقات Attorch و Pytorch ، يتم تقديم attorch.nn
، والذي يوفر واجهة لوحدات Attorch مع احتياطي Pytorch في حالة عدم توفر طبقة مطلوبة ، كما هو موضح أدناه.
from attorch import nn
lin = nn . Linear ( 10 , 20 ) # Uses attorch's linear layer
gap = nn . AdaptiveAvgPool2d ( 1 ) # Uses PyTorch's global pooling since GAP is not available in attorch
يمكن اختبار كل وحدة مقابل نظيرها Pytorch لضمان الصواب. يتم تضمين هذه الاختبارات ضمن tests/
ويمكن تنفيذها باستخدام pytest
. تجدر الإشارة إلى أن البعض قد يفشل بسبب المشكلات الدقيقة العددية ، ولكن في معظم حالات الاستخدام العملي ، لا ينبغي أن يكون ذلك مشكلة.