AWS Machine Learning

كيف قام ديپغرام بتحسين الذكاء الاصطناعي للصوت على نطاق واسع باستخدام AWS Trainium

تعاون Deepgram مع فريق الهندسة التابع لـ AWS Forward Deployed في نقل نموذج Nova-3 للنطق إلى نص الكلام إلى AWS Trainium2 لتحليل الدفعة المجمعة دون اتصال. يغطي هذا المقال نقل النموذج إلى ترسانة AWS Neuron، وتعديلات على…

Nova-3 encoder and decoder compiled ahead of time to NEFFs and served by a data-parallel Rust runtime on AWS Trainium2
مصدر الصورة · AWS Machine Learning

مع أصبح الصوت وسيلة من الطراز الأول للذكاء الاصطناعي، فإن نماذج Deepgram تشمل تحويل الكلام إلى نص، وتحويل النص إلى صوت، ووكلاء الصوت. تُعالج هذه النماذج الآن أربعة تريليونات من كلمات الصوت سنويًا لـ 200,000 مطور و1,400 منظمة. يستخدم العملاءها من خلال واجهة Deepgram API أو يقومون بتشغيلها في بيئاتهم الخاصة، بما في ذلك Amazon SageMaker AI.

بالنسبة لـ Deepgram، فإن كفاءة التقديم تحدد حجم الصوت الذي يمكن للنظام معالجته ضمن ميزانية البنية التحتية المحددة. تفرض أعمال العمل الضخمة عالية الحجم ضغطًا شديدًا على هذه الميزانية، لذا كلما تم استخدام ساعات التسريع بكفاءة أكبر، كان بإمكان Deepgram تقديم المزيد من الصوت في نفس القوات. هذا جعل كفاءة الاستدلال هدفًا طبيعيًا، ولذلك انتقلت Deepgram إلى شريحة AWS AI لتحسينها. عملوا مع AWS لجلب نموذج Nova-3 للترجمة الصوتية إلى النص إلى AWS Trainium2 لأعمال الحزمة الجماعية خارج الشبكة مثل تحليل مراكز الاتصال والتدوين الطبي.

بدأت العملية من خلال تقديم Deepgram لـ Nova-3 ككود قياسي لبرنامج PyTorch. على مدى عدة أشهر، قامت Deepgram وفريق AWS Forward Deployed Engineering (FDE) بنقل Nova-3 إلى AWS Trainium2 باستخدام برنامج PyTorch، وتعديلها لكي تعمل على الأجهزة الجديدة. التكوين النهائي يعمل ثمانية نسخ من النموذج على مثال Amazon Elastic Compute Cloud (Amazon EC2) trn2.3xlarge. في أعمال البتات الموجهة للإنتاجية دون الاتصال بالشبكة الخارجي لـ Deepgram، قام هذا الإعداد بتحليل 11–70% أكثر صوتًا لكل دولار مقارنة بخيارات الحوسبة التي كانت تستخدمها Deepgram. قمنا بقياس ذلك باستخدام أسعار المثال في وقت التقييم. هذه الفوائد تساعد Deepgram على التوسع بكفاءة، والحفاظ على نقل النماذج الأفضل، وتقديمها للعملاء بأسعار أقل. يمكن أن تمتد هذه الفوائد إلى العملاء الذين يستضيفون نماذج Deepgram في السحابة الخاصة الافتراضية الخاصة بهم على Amazon SageMaker AI. هناك، تواصل Deepgram وAWS تحسين سهولة الإعداد، والموثوقية، والقدرة على المراقبة.

في هذا المقال، نتعرض لعملية التحسين الكامل للاستدلال في Trainium: نقل Nova-3 إلى مجموعة برمجيات AWS Neuron، التعديلات على مستوى النواة التي تمت بعد ذلك، ووقت التنفيذ المتوازي للمعلومات باستخدام Rust الذي يسمح لخادم النموذج الخاص بـ Deepgram بالاتصال بـ Trainium، بالإضافة إلى نتائج الكفاءة والتكلفة التي قمنا قياسها في عملية النسخ التدريجي.

تحسين Nova-3 إلى Trainium2 باستخدام PyTorch الأصلي

بدأنا بكود معياري من PyTorch، واستخدمنا TorchNeuron، وهو التكامل الأصلي لبرنامج Neuron Compiler مع PyTorch، والذي يدعم كلاً من التنفيذ الفوري وtorch.compile. قمنا أولاً بتشغيل Nova-3 في الوضع الفوري على Trainium2، وتحققنا من العمليات التي تنتقل إلى CPU، ثم قمنا بتحميل الكود باستخدام torch.compile. الكود المُحمَّل أدى جميع عمليات النموذج على Trainium2 دون اكتشاف أي انتقال إلى CPU.

قمنا بتجميع محول الكود وداخل الكود باستخدام رسومات الشكل الثابت المنفصلة باستعمال torch.compile. خلال العملية، قمنا بالتحقق من دقة الأرقام على مستويين: اتساق الإخراج على مستوى الطبقات مقارنةً بالمعالج المعلوماتي (CPU)، ومعدل الخطأ في كلمات الكلام من البداية إلى النهاية (WER)، والذي كان يجب أن يتبع القيم المرجعية والأهداف لـ Deepgram.

من هذا الأساس العمل، بدأنا عمل التحسينات باستبدال عدة طبقات بكريستالات مدمجة من مكتبة NKI العامة (NKILib)، وهي مجموعة من الكريستالات المرجعية المُنشأة مسبقًا باستخدام واجهة كريستالات Neuron (NKI). تشمل الكريستالات هذه العمليات مثل الإسقاطات QKV المدمجة، طبقات الشبكة المدفوعة مباشرة (FFN) المدمجة، والتمفصل 1D عميق.

قمنا بتحسين الأداء من حيث الإنتاجية، وبالتالي كفاءة التكلفة، مع التركيز على أعمال الاستدلال الخاملة لشركة Deepgram. يتم الإبلاغ عن الإنتاجية كمكسب نسبي مقارنةً بالإعدادات الأساسية، وليس كعدد الأصوات المعالجة بالثانية المطلق، وقمنا بدراسة أحجام الدفعات من 1 إلى 128 للعثور على حجم الدفعات الذي يعزز الإنتاجية.

تعديل مستوى النواة باستخدام Neuron Explorer وNAD

تفعيل الحايلات النشطة هو الخطوة الأولى في دفلو عجلة التحسين: تفعيل حايلة NKI (مخصصة أو من NKILib)، تحليل حمل العمل، ثم إما تعديل الحايلة الموجودة أو استبدالها بحايلة جديدة بناءً على نتائج التحليل. يكرر هذا الدورة حتى يتم تحقيق هدف الأداء. في كل خطوة، جزء مختلف من حزمة Neuron يساعد على تسريع العمل: يوفر NKILib محركات بديلة سهلة التثبيت، أما Neuron Explorer فهو الأداة المفضلة لفحص أعمال Neuron، كما أن حزمة Development Agentic of Neuron (NAD) تسرع تحليل الفحص وتعديل المحركات من خلال مهاراتها في الفحص وكتابة المحركات.

في حالتنا، ساعدتنا وحدات NKILib في جزء كبير من العمل، وأظهر التحليل البرمجي الأماكن التي يمكن فيها استخدام وحدة مكتوبة يدويًا بشكل أفضل. في كل مرة، قادتنا مهارات تحليل NAD من 프로필 Neuron Explorer إلى السبب الجذري للمشكلة، وساعدت مهارات كتابة وحدات NAD في إنتاج الوحدات البديلة.

الطبقة ما وجدناه وما غيرناه الفائدة
FFN قام جدول تنظيم تقسيم الحاوية المرجعية بإعادة تحميل مجموعة كاملة من أوزان الإسقاط من الذاكرة خارج الشريحة لكل تليت، مما أدى إلى تقييد معدل الإنتاجية بسبب زيادة عدد العلامات. يقوم الحاوية المعدلة يدويًا بتحميل كل تليت من الأوزان مرة واحدة، واستخدامها في عدة تليتات متعددة، وتوجيه قراءة الأوزان مع الحساب داخل الشريحة. 2.0x انخفاض في التاخير مقارنة بالنواة المرجعية عند حجم الدفعة 96
عمقيا conv1d تم تطبيق النواة التجريبية NKILib على طريقة ضرب مصفوفة عامة ضمنية (GEMM)، مما أدى إلى انخفاض استغلال محرك Tensor Engine. قمنا بإعادة كتابة النظام على شكل حلقة ضرب وتراكم مشترك على محرك Vector، مما أدى إلى استغلال كامل لمحرك Vector، وهو ما يعادل أكثر من ما يمكن أن يساعد في تعويض انخفاض معدل التدفق الأقصى لدى محرك Vector. تسريع بنسبة 1.5 ضعف مقارنة بالنواة المرجعية عند حجم الدفعة 96
Conv2d تواجه طبقات conv2d في النموذج عائق في التجميع: بعد حجم الدفعة 32، تمنع هذه الطبقات النموذج من التجميع كرسم واحد. وبما أن NKILib لا يحتوي على نواة conv2d، كتبنا نواة من الصفر في NKI. مرت النواة بعد عدة تكرارات استنادًا إلى مخططات الأداء كما تم وصفه سابقًا، مما أدى إلى إمكانية استخدام حجم دفعة فوق 32. حتى 50 مرة على وحدة التكرار في أحجام الدفعة ≤32

دورة التشغيل المتوازية للبيانات في روستا

كل جهاز Trainium2 يحتوي على ثمانية نواة NeuronCores فعلية، والتي تظهر بشكل افتراضي كأربع نواة NeuronCores منطقية (LNC2). وبما أن كل مثال من نموذج Nova-3 يتناسب بشكل مريح على نواة فعلية واحدة، فقد قللنا عدد النواة الفعلية لكل نواة منطقية إلى واحدة (LNC1). هذه التكوين يسمح لنا باستضافة ثمانية نسخ من النموذج (DP8) لكل جهاز Trainium2. يتم معالجة المدخلات بشكل متزامن، مما يزيد من إنتاجية الجهاز. تُدار عملية التشغيل المتوازية للبيانات بواسطة طابور استعارة العمل، حيث يوجد خيط واحد لكل نسخة.

تم كتابة طبقة الإنتاج والخدمة في Deepgram باستخدام لغة Rust، لذلك كان نقل Nova-3 إلى Trainium2 يتطلب أكثر من مجرد تجميع النموذج: كان يجب أيضًا تشغيله بدون استخدام Python أو PyTorch في مسار الخدمة. لذلك، بنينا وحدة تشغيل خفيفة حيث يقوم Rust بتنسيق نسخ النموذج من خلال صف طرد العمل المشترك. الطبقة C تقوم بتحميل وتنفيذ ملف تنفيذ Neuron مُجمع مسبقًا باستخدام تنسيق NEFFs مباشرة عبر واجهة برمجة التطبيقات لوحدة تشغيل Neuron (libnrt)۔ تندمج وحدة التشغيل مباشرة مع بنية الخدمة في Deepgram، وتحقق من التسلسلات للمعلمات المرجعية بدقة عند كل حجم دفعة اختبار.

قمنا بمقارنةه مع أوقات تشغيل البيانات المتوازية في بايثون ذات الطبقة المتعددة (MT) وأوقات التشغيل المتعدد الإجراءات (MP). مقارنةً بالأساس الخاص بـ MP، يزيل وقت التشغيل الخاص بـ Rust كل الأثر الإضافي لمفسر بايثون. ومقارنةً بالأساس الخاص بـ MT، يخفف أيضًا من تداخل قفل المفسر العالمي (GIL) في التسلسل، بحيث لا تحدث منافسة بين مطالبات النقل من خيوط العمل المتزامنة داخل عملية واحدة. هذه الفوائد مهمة لأن Nova-3 يقوم بسلسلة من دعوات فك التشفير الصغيرة لكل قطعة صوتية، مما يجعل تنظيم العمل على جانب المضيف هو العائق عند حجمات الدفعات المنخفضة. لذلك، تكون تحسين معدل الإنتاج الأكبر هناك، ويظل ذا معنى حتى عند حجم الدفعات الذي يحسن معدل الإنتاج. هناك، قدمت وحدة تشغيل Rust تحسينًا في معدل الإنتاج بنسبة 7.5% مقارنة بالأساس الخاص ببرنامج Python المتعدد الإدخال.

Nova-3 encoder and decoder compiled ahead of time to NEFFs and served by a data-parallel Rust runtime on AWS Trainium2

الشكل 1: Deepgram Nova-3 على AWS Trainium2، تم تجميعه مسبقًا وتم تقديمه من خلال Rust

تأثير توفير التكاليف

قمنا بقياس القيمة مقابل الأداء على أساس عدد الإعدادات الصوتية لكل دولار. في أعمال العمل الخاصة بعمليات المعالجة غير المتصلة على منصة Deepgram، والتي تركز على الإنتاجية، فإن إعداد Trainium2 لجهاز واحد (trn2.3xlarge) قام بمعالجة 11–70 بالمئة أكثر إعدادات صوتية لكل دولار مقارنة بالخيارات الحاسوبية التي كانت تستخدمها Deepgram.

الخلاصة

في هذا البوست، أظهرنا كيف قامت Deepgram وAWS FDE بنقل نموذج Nova-3 للترجمة الصوتية إلى النص باستخدام PyTorch إلى معدات Trainium باستخدام TorchNeuron، الذي يوفر تكاملًا طبيعيًا مع إطار عمل PyTorch لمنصة AWS Trainium. قمنا بتحسين الأداء عن طريق استبدال الطبقات مباشرة بكريستالات مُصممة مسبقًا من NKILib. ثم قمنا بتقييم الأداء باستخدام Neuron Explorer، واستعملنا مهارات تطوير Neuron Agentic Development (NAD) لاستعلام بيانات التحليل والتسريع في تشخيص أخطاء الأداء. على أساس هذه الفهمات، قمنا بتكييف كود المصدر للنواة باستخدام مهارات كتابة النواة NAD. أخيرًا، بنينا واجهة تشغيل خفيفة من Rust لتطبيق AWS Trainium، حيث نستخدم واجهة API Neuron Runtime من خلال Rust. أظهر إعدادنا توفير في التكاليف في السيناريوهات التي تتعلق بالإنتاجية دون اتصال، مما يؤكد أن AWS Trainium هو خيار فعال وكفء لأعمال الاستدلال في Deepgram.

لتجربة هذه الطريقة على نماذجك الخاصة، ابدأ بالوثائق المتاحة في وثائق AWS Neuron، والتي تغطي المترجم ووقت التشغيل والأطراف المدعومة. يشرح دليل واجهة NKI لNeuron Kernel كيفية كتابة النواة المذكورة في هذه المقالة، ويحتوي مخزن عينات NKI على النواه الخاصة التي بدأنا بها. تغطي وثائق أدوات مطوري Neuron تحليل الأداء والأدوات المستخدمة هنا، بما في ذلك Neuron Explorer وNeuron Agentic Development. للحصول على معلومات حول الأحجام والتسعيرات، راجع مشتلات Amazon EC2 Trn2. للحصول على مساعدة في تطوير نفس النوع من المنصات، اتصل بقسم الهندسة التطبيقية في AWS Forward Deployed.

 


حول المؤلفين

المصدر الأصلي

AWS Machine Learning

ملاحظات المحتوى

النشر الأصلي والحقوق تعود إلى المصدر.

ترجمة آلية · يُرجى الرجوع إلى الأصل