PyTorch هي مكتبة مفتوحة المصدر للتعلم الآلي (ML) تستخدم على نطاق واسع لتطوير الشبكات العصبية ونماذج ML. يتم تدريب هذه النماذج عادةً على مثيلات GPU متعددة لتسريع التدريب ، مما يؤدي إلى وقت تدريب باهظ وأحجام نماذج تصل إلى بضعة غيغابايت. بعد أن يتم تدريبهم ، يتم نشر هذه النماذج في الإنتاج لإنتاج الاستدلالات. يمكن أن تكون أحمال عمل متزامنة أو غير متزامنة أو قائمة على الدُفعات. يجب أن تكون نقاط النهاية هذه قابلة للتطوير بدرجة عالية ومرنة من أجل معالجة من صفر إلى ملايين الطلبات. هذا هو المكان AWS لامدا يمكن أن تكون خدمة حوسبة مقنعة لاستنتاج ML المتزامن وغير المتزامن القابل للتطوير والفعالية من حيث التكلفة والموثوق به. تقدم Lambda مزايا مثل التدرج التلقائي ، وتقليل النفقات التشغيلية ، ودفع فواتير الاستدلال.
يوضح لك هذا المنشور كيفية استخدام أي نموذج PyTorch مع Lambda للاستدلالات القابلة للتطوير في الإنتاج مع ما يصل إلى 10 جيجابايت من الذاكرة. يتيح لنا ذلك استخدام نماذج ML في وظائف Lambda التي تصل إلى بضعة غيغابايت. بالنسبة لمثال PyTorch ، نستخدم امتداد Huggingface المحولات، مكتبة مفتوحة المصدر لبناء نقطة نهاية للإجابة على الأسئلة.
نظرة عامة على الحل
Lambda هي خدمة حوسبة بدون خادم تتيح لك تشغيل التعليمات البرمجية دون توفير أو إدارة الخوادم. تقوم Lambda تلقائيًا بتوسيع نطاق تطبيقك عن طريق تشغيل التعليمات البرمجية استجابةً لكل حدث ، مما يسمح بالبنيات والحلول القائمة على الأحداث. تعمل الكود بالتوازي وتعالج كل حدث على حدة ، مع زيادة حجم عبء العمل ، من بضع طلبات في اليوم إلى مئات الآلاف من أعباء العمل. يوضح الرسم البياني التالي بنية الحل الذي نقدمه.
يمكنك حزم التعليمات البرمجية والاعتماديات كملف صورة الحاوية باستخدام أدوات مثل Docker CLI. الحد الأقصى لحجم الحاوية 10 جيجا بايت. بعد أن يتم Dockerized نموذج الاستدلال ، يمكنك تحميل الصورة إلى سجل الأمازون المرنة للحاويات (أمازون ECR). يمكنك بعد ذلك إنشاء وظيفة Lambda من صورة الحاوية المخزنة في Amazon ECR.
المتطلبات الأساسية المسبقة
في هذا الدليل ، يجب أن يكون لديك المتطلبات الأساسية التالية:
تنفيذ الحل
نستخدم نموذج لغة مُدرَّب مسبقًا (ديستيلبيرت) من عند عناق. يوفر Huggingface مجموعة متنوعة من نماذج اللغة المدربة مسبقًا ؛ ال نموذج نحن نستخدم 250 ميغا بايت كبيرة ويمكن استخدامها لبناء نقطة نهاية للإجابة على الأسئلة.
نستخدم AWS SAM CLI لإنشاء نقطة نهاية بدون خادم بامتداد بوابة أمازون API. الرسم البياني التالي يوضح هندستنا.
لتنفيذ الحل ، أكمل الخطوات التالية:
- على جهازك المحلي ، قم بتشغيل
sam init
. - أدخل
1
لمصدر النموذج (قوالب البدء السريع لـ AWS) - كنوع حزمة ، أدخل
2
للصورة. - للصورة الأساسية ، أدخل
3 - amazon/python3.8-base
. - كاسم مشروع ، أدخل
lambda-pytorch-example
. - تغيير الخاص بك
workdir
إلىlambda-pytorch-example
وانسخ مقتطفات التعليمات البرمجية التالية في ملفhello_world
المجلد.
الكود التالي هو مثال على ملف requirements.txt لتشغيل كود PyTorch في Lambda. Huggingface لها تبعية PyTorch لذلك لا نحتاج إلى إضافتها هنا بشكل منفصل. أضف المتطلبات إلى ملف requirements.txt الفارغ في المجلد hello_world
.
ما يلي هو رمز app.py
ملف:
يعد Dockerfile التالي مثالاً على Python 3.8 ، والذي يقوم بتنزيل واستخدام نموذج لغة DistilBERT الذي تم ضبطه بدقة لمهمة الإجابة على الأسئلة. لمزيد من المعلومات، راجع قاعدة DistilBERT المقطر غير المعامل SQuAD. يمكنك استخدام النماذج المخصصة عن طريق نسخها إلى مجلد الطراز والرجوع إليها في ملف app.py
.
قم بتغيير دليل العمل الخاص بك مرة أخرى إلى lambda-pytorch-example
وانسخ المحتوى التالي إلى ملف template.yaml
ملف:
نحتاج الآن إلى إنشاء مستودع Amazon ECR في AWS وتسجيل Docker المحلي فيه. ال repositoryUri
يتم عرضه في الإخراج ؛ احتفظ بها لمدة لاحقة.
نشر التطبيق
تنشر الخطوات التالية التطبيق في حساب AWS الخاص بك:
- يجري
sam build && sam deploy –-guided
. - في حالة اسم المكدس، أدخل
pytorch-lambda-example
. - اختر نفس المنطقة التي أنشأت فيها مستودع Amazon ECR.
- أدخل مستودع الصور للوظيفة (أدخل الملف المحفوظ مسبقًا
repositoryUri
من مستودع Amazon ECR). - في حالة قم بتأكيد التغييرات قبل النشر و السماح بإنشاء دور SAM CLI IAM، احتفظ بالإعدادات الافتراضية.
- في حالة pytorchEndpoint قد لا يكون لديه تفويض محدد ، هل هذا جيد؟، حدد y.
- احتفظ بالإعدادات الافتراضية للمطالبات المتبقية.
تقوم AWS SAM بتحميل صور الحاوية إلى مستودع Amazon ECR وتنشر التطبيق. أثناء هذه العملية ، سترى تغييرًا تم تعيينه مع حالة النشر. للحصول على وصف أكثر تفصيلاً حول AWS SAM وصور حاوية Lambda ، راجع استخدام دعم صورة الحاوية لـ AWS Lambda مع AWS SAM.
عند اكتمال النشر ، يتم عرض إخراج المكدس. استخدم نقطة نهاية InferenceApi لاختبار التطبيق الذي تم نشره. يتم عرض عنوان URL لنقطة النهاية كإخراج أثناء توزيع المكدس.
التغلب على التشغيل البارد لوظيفة Lambda
نظرًا لأن نموذج اللغة العادية يبلغ بالفعل حوالي 250 ميجابايت ، يمكن أن يستغرق تشغيل الوظيفة الأولية ما يصل إلى 25 ثانية وقد يتجاوز مهلة API القصوى البالغة 29 ثانية. يمكن أيضًا الوصول إلى هذا الوقت عندما لم يتم استدعاء الوظيفة لبعض الوقت وبالتالي في وضع بدء التشغيل البارد. عندما تكون وظيفة Lambda في حالة ساخنة ، يستغرق تشغيل الاستدلال الواحد حوالي 150 مللي ثانية.
هناك طرق متعددة للتخفيف من وقت تشغيل وظائف Lambda في الحالة الباردة. يدعم Lambda التزامن المقدم للحفاظ على تهيئة الوظائف. هناك طريقة أخرى وهي إنشاء ملف الأمازون CloudWatch الحدث الذي يستدعي الوظيفة بشكل دوري لإبقائه دافئًا.
تأكد من التغييرAPI_GATEWAY_URL> إلى عنوان URL الخاص بنقطة نهاية API Gateway. في رمز المثال التالي ، يتم نسخ النص من ملف صفحة ويكيبيديا على السيارات. يمكنك تغيير السؤال والسياق كما تريد والتحقق من إجابات النموذج.
تظهر الإجابة الإجابة الصحيحة على السؤال:
وفي الختام
يتيح لك دعم صورة الحاوية لـ Lambda تخصيص وظيفتك بشكل أكبر ، مما يفتح العديد من حالات الاستخدام الجديدة لـ ML بدون خادم. يمكنك إحضار النماذج المخصصة الخاصة بك ونشرها على Lambda باستخدام ما يصل إلى 10 جيجا بايت لحجم صورة الحاوية. بالنسبة للنماذج الأصغر التي لا تحتاج إلى قدر كبير من القوة الحاسوبية ، يمكنك إجراء تدريب واستدلال عبر الإنترنت في Lambda فقط. عندما يزيد حجم النموذج ، تصبح مشكلات البدء البارد أكثر أهمية ويجب أن تكون كذلك التخفيف. لا توجد أيضًا قيود على الإطار أو اللغة مع صور الحاوية ؛ أطر ML الأخرى مثل TensorFlow, أباتشي MXNet, XGBoostالطرق أو Scikit تعلم يمكن استخدامها كذلك!
إذا كنت تحتاج إلى GPU لاستنتاجك ، فيمكنك التفكير في استخدام خدمات الحاويات مثل خدمة الأمازون المرنة للحاويات (Amazon ECS) أو Kubernetes أو نشر النموذج في ملف الأمازون SageMaker نقطة النهاية
عن المؤلف
جان باور مطور تطبيقات سحابية في خدمات AWS الاحترافية. اهتماماته هي الحوسبة بدون خادم ، والتعلم الآلي ، وكل ما يتضمن الحوسبة السحابية.