Command Palette
Search for a command to run...
تم إتاحة نواة المترجم البرمجية الخاصة بـ Bi Sheng، وهي AscendNPU IR، كمصدر مفتوح. تشرح المهندسة المعمارية في هواوي، هاي ليجوان، التقدم التقني وتسلط الضوء على دعمها لأنظمة تشغيل الشبكات مثل Triton.

1 أغسطسوصل الصالون التقني التاسع لـ Meet AI Compiler، الذي استضافته شركة HyperAI، في موعده المحدد.أجرى متحدثون ضيوف من شركات ومؤسسات بحثية رائدة، مثل أكاديمية بكين للذكاء الاصطناعي، وفريق TileRT، وTencent، وHuawei، وZhiyuan Innovation، مناقشات معمقة حول التطور التعاوني لمترجمات الذكاء الاصطناعي عبر أبعاد متعددة، تشمل التعبير اللغوي، وحساب العمليات، وتنفيذ الاستدلال، وتطبيق السيناريوهات. وركزوا على التحديات التقنية، والحلول العملية، واتجاهات الصناعة، مساهمين بأفكار متنوعة وخبرات عملية في المسار التكراري لتكنولوجيا مترجمات الذكاء الاصطناعي، وفي استكشاف قيمتها الصناعية بشكل معمق.
في الموقع،شاركت هاي ليجوان، مهندسة معمارية هواوي AscendNPU IR، رؤيتها حول موضوع "AscendNPU IR: قاعدة تجميع مفتوحة المصدر، تدعم الوصول متعدد اللغات إلى Ascend".قدمت شرحًا منهجيًا للبنية التقنية العامة وفلسفة تصميم مكون مُترجم AscendNPU IR، وشرحت بالتفصيل الميزات الجديدة لـ AscendNPU IR الخاصة بامتدادات Ascend 950، ومزاياها في التطوير التكنولوجي، وبناء مجتمع النظام البيئي. كما حللت القدرات الأساسية والمزايا التقنية للمنصة مفتوحة المصدر، وأظهرت قابليتها للتكيف مع لغات برمجة الواجهة الأمامية المتعددة، وقدمت للمطورين تجربة تطوير تعاونية سهلة الاستخدام ومفتوحة المصدر مع AscendNPU IR.

قامت شركة HyperAI بتجميع وتلخيص العروض التقديمية دون تغيير المعنى الأصلي.
تابع حساب WeChat الرسمي "HyperAI" وأجب بالكلمة المفتاحية "0801 AI Compiler" للحصول على عرض تقديمي من المحاضر المعتمد بصيغة PPT.
لماذا تُعتبر برمجة ترايتون فعالة وسهلة الاستخدام؟
تُعتبر لغة البرمجة تريتون فعّالة وسهلة الاستخدام. فمن أين تأتي هذه الميزة التطويرية؟
بعبارات بسيطة، يستخدم Triton بنية تشبه Python ويوفر برمجة Block Level Tile، مما يحمي المطورين من التفاصيل منخفضة المستوى لذاكرة الأجهزة والتعليمات والخطوط المتوازية والعمليات الأخرى للنواة المجردة، وبالتالي يقلل من حاجز تطوير المشغل ويحسن كفاءة التطوير.

يوفر نموذج برمجة البلاطات الخاص بـ Triton، مقارنةً بلغات البرمجة غير المتجانسة مثل C++، مزايا على لغات البرمجة التقليدية.وهذا يسمح للمطورين بالتركيز بشكل أكبر على تقسيم البيانات للمشغلين، والتركيز على تجريد عمليات الموتر والتعبير المنطقي.استنادًا إلى تجريد البرمجة على مستوى البلاطة، باستثناء جدولة البيانات بين النوى التي يديرها المستخدم، يمكن للمترجم إكمال دمج الوصول إلى الذاكرة داخل النواة وإدارة الذاكرة المشتركة تلقائيًا.
والأهم من ذلك، أن كلاً من لهجة Triton ومترجم Triton GPU الرسمي يعتمدان على تجريد IR متعدد المستويات مبني على MLIR، مما يسمح بتحسين متعمق للأجهزة المختلفة.
يستمر تحسين بنية AscendNPU IR.
AscendNPU IR عبارة عن تجريد على مستوى وحدات الأجهزة في Ascend مبني على MLIR، ويخدم تحسينات التجميع الأساسية. يظهر هيكله في الرسم التخطيطي أدناه.تتفاعل واجهة AscendNPU IR مع واجهة LLVM IR، ويتم تجميعها في النهاية في ملف Ascend الثنائي للأجهزة.يمكن دمج لغات ومترجمات الطرف الثالث ذات الطبقة العليا مثل Triton في AscendNPU IR، وبالتالي تحقيق التوافق مع Ascend.

الميزات التقنية الرئيسية لـ AscendNPU IRأولًا، يوفر هذا النظام تجريدًا تصاعديًا لأجهزة Ascend، حيث يُجرّد الموارد المختلفة داخل النواة، مثل وحدات الذاكرة ونقل البيانات. ثانيًا، يوفر عوامل تشغيل مجردة على مستوى البلاطات، مما يُتيح دعمًا موحدًا عبر مختلف البنى للأجهزة الأساسية، ويغطي أحدث بنى الأجهزة من A2/A3 إلى Ascend 950 SIMD وSIMT. وبفضل انفتاح وقابلية توسع MLIR، يدعم AscendNPU IR الوصول من لغات برمجة ذات طبقات عليا أكثر.
يوضح الرسم البياني أدناه تصميم بنية تجميع AscendNPU IR، بدءًا من Ascend A2/A3 وصولًا إلى أحدث إصدار من أجهزة Ascend 950 التي طُرحت هذا العام. يُظهر الجانب الأيسر الإصدار الأول من بنية AscendNPU IR الذي طُرح العام الماضي، ويتألف بشكل أساسي من طبقتين. الطبقة العلوية هي طبقة مستقلة عن الأجهزة تُسمى HFusion، وتُعنى بشكل رئيسي بتنفيذ تحسين الدمج متعدد الأبعاد. يعتمد دورها على لغة Linalg المجتمعية ووحدات المعالجة الموسعة (OPs)، حيث تتصل تصاعديًا بمختلف اللهجات القياسية، وتُكمل المعالجة المسبقة لتطبيع أنواع البيانات ووحدات المعالجة، بالإضافة إلى تحسينات الدمج مثل الجدولة التلقائية.

تقوم طبقة HIVM المتعلقة بالأجهزة بشكل أساسي بتنفيذ تجريد عالي المستوى لأجهزة Ascend، وإكمال تجميع تخطيط النواة، وتخطيط الذاكرة على الشريحة، وتخطيط وحدة المعالجة بالتسلسل.
الخطوة الأولى هي تجميع تخطيط النواة.يشمل ذلك نوى المكعبات ونوى المتجهات. تُمرَّر تمثيلات البلاطات عالية المستوى عبر النوى، حيث تُخصَّص نوى المكعبات لنوى المكعبات، ونوى المتجهات لنوى المتجهات. يتولى المُصرِّف تلقائيًا جميع عمليات نقل البيانات ومزامنتها وإدارة ذاكرة مساحة العمل الوسيطة بينها، كما يُجري تحسينات عالية المستوى للتوازي المُتدرِّج في معالجة البيانات المتسلسلة.
يلي ذلك عملية رسم خرائط الذاكرة على الشريحة. يحتوي كل من معالج Cube ومعالج Vector على ذاكرة مدمجة خاصة بهما. لكي يعمل الموتر على أجهزة Ascend، يجب استنتاج بيانات الموتر المنطقية في الذاكرة الفعلية المناسبة، بالإضافة إلى اشتقاق تنسيق مصفوفة الفراكتال الخاص بمعالج Cube. يتولى المُصرّف عملية تخصيص الذاكرة المدمجة تلقائيًا.
المستوى الأدنى هو تعيين وحدة المعالجة.تضمن مزامنة خط الأنابيب كفاءة التوقيت والتوازي. كما تُمكّن تقنيات التوجيه والتكميم الموتري تعليمات الأجهزة عالية الأداء من إتمام عملية تحسين التجميع النهائية.
يُظهر الجانب الأيمن من الرسم التخطيطي بعض التغييرات الرئيسية في بنية Ascend 950 مقارنةً بإصدار A2/A3 للعام الماضي. تبقى طبقة HFusion العليا، المستقلة عن المكونات المادية، مستقرة إلى حد كبير، بينما يأتي التوسع الرئيسي من طبقة HIVM، المعتمدة على المكونات المادية، والتي تمتد من تقنية SIMD القائمة على الذاكرة لدعم تقنيتي SIMD وSIMT القائمتين على السجلات. في السابق، كانت عملية تجميع دمج CV تتضمن التفاعل بين أنوية Cube وأنوية Vector عبر الذاكرة العامة؛ أما Ascend 950 فيُطبّق نهجًا أكثر ترابطًا لتحقيق تفاعل بيانات أكثر كفاءة.
بشكل عام، لا تزال البنية الجديدة تحافظ على هيكل مستقر من طبقتين، ولكن مع التغييرات في البنية، خضع تجميع البلاطات لتحديث كبير.
لنلقِ نظرةً أولًا على تطور بنية SIMD القائمة على سجلات المتجهات. في بنية SIMD القائمة على الذاكرة، تُجرى حسابات المتجهات على الشريحة باستخدام مخزن مؤقت موحد، وتُنفَّذ التعليمات مباشرةً من ذاكرة الشريحة. أما في معالج Ascend 950، فتُجرى الحسابات باستخدام سجلات عالية السرعة، مما يُضيف طبقة سجلات إضافية. ولتحسين الأداء في الواجهة الخلفية، وخاصةً للمتجهات، تتغير عملية التجميع كما يلي:

أولاً، تحويل الأنظمة القائمة على السجلات إلى متجهات. تُحوّل عمليات الموتر إلى تعليمات سجلات ذات عرض ثابت عبر تجزئة متجهة. تُحمّل البيانات من الذاكرة الموجودة على الشريحة إلى السجلات، وتُجرى العمليات الحسابية بناءً على السجلات، ثم تُخزّن البيانات مرة أخرى في الذاكرة الموجودة على الشريحة، مما يُشكّل حلقة تحميل-حساب-تخزين.
ثانيًا، دمج التفاصيل على مستوى السجل. تُعدّ العمليات التي تُحمّل وتُفرّغ البيانات بشكل متكرر من الذاكرة المدمجة غير فعّالة. يسمح الدمج العميق القائم على المسجلات بتخزين البيانات في هذه المسجلات. يُقلّل دمج عمليات Triton المتعددة في حلقة واحدة من حجم البيانات المُحمّلة. يتطلب ذلك استخدام خوارزميات بحث ونماذج تكلفة مختلفة لتطوير استراتيجيات دمج أفضل.
ثالثًا، تجريد اللهجة الإنجليزية الأمريكية العامية. يُخفي امتداد لغة Vector سهل الاستخدام في Ascend اختلافات قناع الأجهزة الأساسية، مما يُتيح تحليل القناع واستنتاجه. يوفر تحميل متجه الأجهزة إمكانيات تحسين غنية داخل المسار. يُتيح تفعيل العمليات داخل المسار دمج تعليمات متعددة في تعليمة واحدة. جميع هذه التحسينات مصممة خصيصًا للغة Regbase SIMD.
يُضيف جهاز Ascend 950 دعمًا لوحدات SIMT، كما هو موضح باللون الأخضر في الصورة أدناه. يُمكّن هذا نواة Vector من العمل بثلاثة أنماط حسابية مختلفة: SIMD خالص، وSIMT خالص، ونمط هجين يجمع بين SIMT وSIMD. يُمكن لـ SIMT تسريع عمليات الوصول إلى الذاكرة المنفصلة، بينما يُمكن للحسابات الكثيفة الاستفادة من SIMD لتحسين المتجهات بشكل أكثر فعالية.

قبل البدء في عملية تجميع Vector SIMD أو SIMT، تُجري عملية التجميع تحليلًا مُدمجًا وتحسينًا. تُحدد هذه العملية المكونات المناسبة لتقنية SIMT، وتستخرجها لعمليات تجميع منفصلة لكل من SIMT وSIMD، ثم تُدمجها لإجراء حسابات Vector شاملة. خلال هذه العملية، يتم نمذجة وتحليل كل من SIMT وSIMD.
يرتبط ارتباطًا وثيقًا بعوامل نوع الانتباه ترقية وتغيير نوى الرؤية الحاسوبية. في معالجات A2/A3، يفتقر كل من المكعب والمتجه إلى اتصال داخلي، ولا يمكنهما التفاعل إلا عبر الذاكرة العامة الخارجية. أما في معالج Ascend 950، كما هو موضح باللون الأحمر في الرسم التخطيطي، فتُخزَّن نتيجة المكعب في ذاكرة L0C، ويمكن نسخها مباشرةً إلى ذاكرة المتجه الداخلية. وبالمثل، يمكن نسخ نتيجة حساب المتجه مباشرةً إلى ذاكرة المكعب الداخلية لإجراء حسابات لاحقة عليه. باختصار، يُسهم الربط الوثيق وتبادل البيانات السريع في مجال رؤية الحاسوب بشكل كبير في تحسين أداء الانتباه.

تُعدّ تقنية التوازي في خطوط معالجة البيانات إحدى التقنيات الرئيسية لتحسين أداء مُشغّلي معالجة البيانات. تُتيح تقنية خطوط معالجة البيانات من Ascend Automation إخفاء زمن الاستجابة بشكل أفضل والاستفادة الكاملة من موارد القدرة الحاسوبية لأنوية Cube وVector.
ومن التحسينات الرئيسية الأخرى خاصية AutoSubTiling.تم تكوين معالجات Ascend Cube و Vector بنسبة 1:2، حيث يقابل معالجان Vector معالج Cube واحد. يُجري المُصرّف عمليات Vector بتقسيم الكتلة بنسبة 1:2، مما يسمح لكل معالج Vector بمعالجة نصف البيانات في وقت واحد، وبالتالي إنجاز الحساب بشكل أسرع.
أحدث إصدار من عمل تعميم الميزات للمترجم
ستقدم هذه المقالة أعمال التعميم للوظائف المهمة في الإصدار الجديد من AscendNPU IR.

أولاً: تفاعل بيانات السيرة الذاتية. يُكمل المُصرّف تلقائيًا عملية تبادل البيانات بين النوى في عمليات التكعيب والمتجه. قد تتوزع حسابات التكعيب والمتجه لمُعامل Triton على فروع مختلفة من مسار التحكم، مما يزيد من تعقيد عملية التجميع والتحليل. لا يُمكن إدخال التعليمات ببساطة عبر مطابقة الأنماط. في المثال أعلاه، يُجري الفرعان حسابات التكعيب والمتجه على التوالي. يتطلب تبادل بيانات CV دعم اشتقاق مسار تحكم مُعقد لضمان اكتمال الوظائف.
يُحسّن الإصدار الجديد عملية تحليل عمليات المرور الرئيسية في InsertCVLoadStore، مُكملاً بذلك تفاعل بيانات التحكم عن بُعد من خلال الاشتقاق الشامل عبر تدفقات التحكم المعقدة. في البداية، تُدرج نقاط ارتكاز حتمية: عمليات ضرب المصفوفات تُدخل عند مستوى التخزين L1 وتُخرج عند مستوى التخزين L0C، بينما تُدخل عمليات المتجهات وتُخرج عند مستوى التخزين UB. بعد ذلك، واستنادًا إلى نقاط الارتكاز الأولية، تُدرج عمليات تحويل النوع لإجراء الاشتقاق التصاعدي والتنازلي ونشر البيانات عبر تدفقات التحكم. بعد النشر، يُحدد مستوى الذاكرة لجميع موترات المعاملات بوضوح.
كما هو موضح في المثال أعلاه، لا يحتوي الموتر في الأصل على دلالات التسلسل الهرمي للذاكرة. بعد إدخال عملية تحويل النوع، يُحصر في ذاكرة UB الخاصة بنواة Vector؛ وأسفلها ذاكرة L1 الخاصة بنواة Cube. ينشأ تعارض أثناء عملية الاشتقاق - حيث يكون التسلسل الهرمي للذاكرة غير متسق، مما يتطلب إدخال عبارة Load-Store أو copy لإنشاء اتصال البيانات. تختلف طرق المعالجة قليلاً بين الأجيال. تتطلب نواة A2/A3 Cube وVector إدخال عبارة Global Memory Load-Store لإنشاء اتصال البيانات، بينما تُنشئ نواة Ascend 950 اتصال البيانات من خلال نسخ البيانات على الشريحة.
ثانيًا: تعمل خاصية MultiBuffer على تحسين تدفق التحكم المعقد. يُعدّ MultiBuffer شرطًا أساسيًا لتقنية خطوط الأنابيب والتوازي. فكيف يُمكن تحويل Tensor إلى MultiBuffer؟

كان الحل السابق يدعم حلقات التكرار فقط. أثناء تكرار الحلقة، كان MultiBuffer يعيد استخدام متغير التكرار الخاص بحلقة for، ويقوم بتدوير خانة المخزن المؤقت وفقًا لهذا المتغير. كان هذا الحل محدودًا بسبب عدم قدرته على دعم حلقات while الأخرى وتدفقات التحكم المتداخلة. لذلك، تم تقديم عداد مخزن مؤقت مستقل. يتتبع هذا العداد تدفق التحكم المعقد عبر حلقات التفرع، وبالتالي يتتبع بدقة تغييرات خانة المخزن المؤقت.
بالإضافة إلى ذلك، يجب أن تكون عملية التخصيص مرئية في طبقة الحلقة المشتركة بين المكعب والمتجه، بحيث يمكن لكل من المكعب والمتجه تنفيذ عمليات تخصيص الذاكرة في وقت واحد، مثل تخصيص مخزنين مؤقتين أو ثلاثة، لضمان اتساق تحويل المخزن المؤقت المتعدد.
ثالثًا: AutoBlockify، وهو تحويل متعدد النوى يرتبط ارتباطًا وثيقًا بتحسين عامل Ascend.عند كتابة مُعاملات CUDA أو Triton، نقسم الكود عادةً إلى عدة وحدات منطقية، تُنفذ بدورها عبر جدولة الأجهزة. يعتمد Ascend بشكل كبير على جدولة التناوب الدوري. يتم دمج نوى منطقية مختلفة في حلقة for واحدة، مما يسمح لجدولة الحلقة البرمجية بتحسين الأداء. علاوة على ذلك، يمكن تطبيق تقنيات تحسين متقدمة مثل MultiBuffer وpipelining داخل حلقة for لزيادة تحسين الأداء الأساسي.

رابعاً: مسار تطوير السيرة الذاتية.على سبيل المثال، يحتوي مُعامل FlashAttention على أربع مهام موزعة على نواتين، Cube وVector، تُنفذ بشكل منفصل. تُنفذ هذه المهام بالتتابع، وتحتاج العمليات الحسابية في Cube وVector إلى الانتظار قبل إتمام بعضها البعض. أثناء عملية التجميع، يُمكن استخدام MultiBuffer لضمان تنفيذ Cube وVector في أقرب وقت ممكن، مما يُحقق تأثير تسريع متوازٍ مُجزأ.

أولًا، حدد نقاط حدود C/V، ثم قسّم مقطع الكود بدقة إلى نطاق المكعب ونطاق المتجهات. بعد ذلك، طبّق MultiBuffer لتنفيذ تحويلات متوازية متسلسلة بناءً على خوارزمية الجدولة، بما في ذلك أوضاع استراتيجية متنوعة: فك الالتفاف، والتحريف، والديناميكي. يمكن اختيار الوضع الأمثل للتوازي المتسلسل لأحمال حسابية مختلفة.
الخامس: انقسام CV 1:2.تتعاون نواتا المتجهات ونواة المكعب لمعالجة بيانات الموتر الخام إلى النصف بأكبر قدر ممكن من الدقة لتحقيق حساب متجهي فعال. من الناحية المثالية، ينبغي إيجاد محاور متوازية في الأبعاد العالية لإجراء عملية تنصيف شاملة. مع ذلك، قد تخضع المحاور المرشحة لعمليات حسابية مثل النقل والبث والاختزال، مما يزيد من تعقيد عملية تقسيم المتجهات بنسبة 1:2.

أولًا، قم بإجراء تحليل أبعاد شامل لتحديد المحور الأنسب للتقسيم. بعد تحديد محور التقسيم، أدرج علامة بدء عملية التقسيم بدءًا من نهاية عملية التخزين، ثم انتقل تصاعديًا من هذه النهاية إلى العقدة الجذرية، لتحقيق تقسيم مثالي في النهاية. في حال مواجهة سيناريوهات معقدة لا يمكن تقسيمها، ارجع إلى حالة التقسيم غير المقسمة 1:1.
علاوة على ذلك، في بعض السيناريوهات المعقدة، لا يكفي مجرد تقسيم المحور المتوازي لتحسين الأداء. على سبيل المثال، تواجه خوارزمية الانتباه منخفضة الدقة FB8 حملاً متجهياً عالياً، مما يستلزم تقسيم المحور المُختزل وتقليله. ولأن نواتي المتجه لا تستطيعان تبادل البيانات مباشرةً، يجب تبادل نتائج الاختزال الوسيطة عبر الذاكرة العامة لإجراء اختزال ثانوي، ما يُكمل عملية الاختزال والتقسيم الكلية. إضافةً إلى ذلك، تتطلب سيناريوهات مثل الأشكال الديناميكية أيضاً أساليب تقسيم محسّنة من نوع CV 1:2.
يُعد كل من Triton-Ascend و AscendNPU IR مفتوح المصدر وتم تطويرهما بشكل تعاوني.
أصبح AscendNPU IR الآن مشروعًا مفتوح المصدر على منصة Ascend Community. يمكنك مسح رمز الاستجابة السريعة (QR code) الموجود في الصورة لمتابعة المشروع. وقد نُشر موعد الاجتماع نصف الشهري لمجموعة AscendNPU IR Community SIG في تقويم أنشطة المنصة. يمكن للمطورين الاطلاع على مواضيع النقاش الأسبوعية ومحاضر الاجتماعات مسبقًا.

أطلقت منصة Ascend Community مشاريع تدريبية مفتوحة المصدر ومهامًا مجتمعية، مما يتيح للمطورين فرصة المشاركة في بناء النظام البيئي. يمكنك الاطلاع على آخر مستجدات المهام هنا والمطالبة بمهامك. تتفاوت هذه المهام المجتمعية في صعوبتها؛ لذا يُرجى اختيار ما يناسب قدراتك والمشاركة فيه.


تتوفر فرص التدريب الداخلي ومهام المجتمع في مجال البرمجيات مفتوحة المصدر عبر روابط سريعة على صفحات AscendNPU IR وTriton-Ascend الرئيسية، والتي تتضمن عملية اختيار المهام. يُسمح لكل شخص باختيار مهمة واحدة فقط في كل مرة. سيتم تحديث مهام المجتمع بانتظام، وستبقى عملية التطوير تفاعلية ومفتوحة طوال الوقت. تقدم كل مهمة مكافآت مجزية، والجميع مدعوون للاختيار بحرية.

بالنسبة للمشاركين الذين لا يملكون بيئة تطوير Ascend، يوفر المجتمع منصة حوسبة مجانية لـ Ascend، وهي HiDevLab (https://hidevlab.huawei.com/home). يمكن للمطورين التسجيل والتقدم بطلب للحصول على موارد الحوسبة، وعند قبول الطلب، سيتم تخصيص 100 ساعة من وقت الحوسبة المجاني لهم تلقائيًا. كما يمكن للمطورين الذين قبلوا مهام المجتمع التقدم بطلب للحصول على موارد الحوسبة لإكمال تطوير المهام والتحقق منها.

شكرًا لكم على اهتمامكم!








