عندما يتم نشر نموذج في بيئة إنتاج ، فإن سرعة الاستدلال مهمة. تتطلب النماذج ذات سرعات الاستدلال السريع موارد أقل للتشغيل ، مما يترجم إلى توفير في التكاليف ، وتستفيد التطبيقات التي تستهلك تنبؤات النماذج من الأداء المحسن.
على سبيل المثال ، لنفترض أن موقع الويب الخاص بك يستخدم نموذج الانحدار للتنبؤ بمعدلات الرهن العقاري لمشتري المنازل الطامحين لمعرفة نوع السعر الذي يمكن أن يتوقعوه ، بناءً على المدخلات التي يقدمونها مثل حجم الدفعة المقدمة ، ومدة القرض ، والمقاطعة التي يبحثون عن شرائها. النموذج الذي يمكنه إرسال تنبؤ في غضون 10 مللي ثانية مقابل 200 مللي ثانية في كل مرة يتم فيها تحديث أحد المُدخلات يُحدث فرقًا كبيرًا من حيث استجابة موقع الويب وتجربة المستخدم.
أمازون سيجماكر نيو يسمح لك بإلغاء تأمين هذه التحسينات في الأداء وتوفير التكاليف في غضون دقائق. يقوم بذلك عن طريق تجميع النماذج في ملفات تنفيذية محسّنة من خلال العديد من المكتبات مفتوحة المصدر ، والتي يمكن استضافتها بعد ذلك على الأجهزة المدعومة على الحافة أو على الأمازون SageMaker نقاط النهاية. Neo متوافق مع ثمانية أطر مختلفة للتعلم الآلي (ML)، وفي سياق خوارزميات الشجرة المعززة بالتدرج اللوني مثل XGBoost، يستخدم نيو التريلايت لتحسين عيوب النموذج. نظرًا لشعبية XGBoost وتصنيفه الفريد كإطار عمل ML الكلاسيكي ، فإننا نستخدمه كإطار عمل نختاره طوال هذا المنشور. سيتم عرض سرعة تقارب 3x لنموذج XGBoost المحسّن مقارنة بالنموذج غير المحسّن. ال مجموعة بيانات أذن البحر من UCI لتدريب النموذج. لا تتردد في استخدام النموذج ومجموعة البيانات الخاصة بك ، مع ذلك ، وأخبرنا في التعليقات بنوع التسريع الذي تم تحقيقه.
سيأخذ هذا المنشور نظرة أعمق في تجميع القطع الأثرية لنموذج XGBoost باستخدام Neo وسيوضح لك كيفية قياس واختبار مكاسب الأداء لهذه النماذج المحسنة بشكل عام. بنهاية هذه الإرشادات التفصيلية ، سيكون لديك إطار العمل الخاص بك للتدريب السريع ، ونشر ، وقياس نماذج XGBoost. في المقابل ، يمكن أن يساعدك هذا في اتخاذ قرارات تستند إلى البيانات بشأن نوع تكوينات المثيلات التي تناسب ملف تعريف التكلفة الفريد واحتياجات أداء الاستدلال.
حل نظرة عامة
يوضح الرسم البياني التالي الخدمات التي نستخدمها لهذا الحل وكيفية تفاعلها مع بعضها البعض.
خطوات تنفيذ الحل هي كما يلي:
- تحميل ومعالجة الشعبية أذن البحر مجموعة بيانات باستخدام دفتر ملاحظات Jupyter ، ثم قم بتشغيل مهمة تدريب XGBoost SageMaker على البيانات المعالجة. نحن نستخدم وظيفة تدريب SageMaker على الوضع المحلي لإنتاج نموذج XGBoost غير المحسن ، والذي يمكن أن يكون أسرع وأسهل في وضع النموذج الأولي مقارنةً بالطراز البعيد.
- قم بنشر عنصر نموذج XGBoost غير المحسن إلى نقطة نهاية SageMaker.
- خذ الأداة غير المحسّنة وحسّنها بوظيفة تجميع جديدة.
- انشر أداة XGBoost المحسّنة حديثًا إلى نقطة نهاية SageMaker.
- خلق الأمازون CloudWatch لوحة معلومات من دفتر SageMaker لمراقبة سرعة الاستدلال والأداء في ظل الحمل الثقيل لكلا نقطتي النهاية.
- نشر المدفعية بلا خوادم من دفتر SageMaker ، والذي نستخدمه كأداة لاختبار الحمل. أنشأنا مدفعية بدون خادم بالكامل من دفتر SageMaker ، واستدعاء نقاط نهاية SageMaker الخاصة بك مباشرة من الإنترنت من خلال التوقيع يدويًا AWS Signature الإصدار 4 طلبات - لا حاجة لها بوابة أمازون API كوسيط.
- قم بإجراء اختبارات التحميل على كلا نقطتي النهاية.
- قم بتحليل أداء كلا نقطتي النهاية تحت الحمل في لوحة معلومات CloudWatch ، وانظر كيف تتفوق نقطة النهاية المحسّنة على النقطة غير المحسّنة.
المتطلبات الأساسية المسبقة
قبل البدء ، يجب أن يكون لديك حق وصول المسؤول إلى حساب AWS ، وإكمال الخطوات التالية:
- خلق إدارة الهوية والوصول AWS (انا) دور SageMaker التي لديها
AmazonSageMakerFullAccess
سياسة مُدارة مرفقة مع سياسة مضمنة تحتوي على أذونات إضافية مطلوبة.
لقطة الشاشة التالية هي مثال لدور تم تكوينه بشكل صحيح يسمى NeoBlog
.
• AdditionalRequiredPermissionsForSageMaker
تحتوي السياسة المضمنة على JSON التالي:
خطوتنا التالية هي إنشاء مثيل دفتر ملاحظات SageMaker.
- على وحدة تحكم SageMaker ، تحت دفاتر، اختر مثيلات دفتر الملاحظات.
- اختار إنشاء مثيل دفتر.
- في حالة اسم مثيل دفتر الملاحظات، أدخل
NeoBlog
. - في حالة نوع مثيل دفتر الملاحظات، اختر مثلك (بالنسبة لهذا المنشور ، يجب أن يكون الملف الافتراضي ml.t2.medium كافيًا).
- في حالة دور IAM، اختر ال
NeoBlog
الدور الذي قمت بإنشائه. - في مجلة مستودعات Git القسم، حدد استنساخ مستودع Git عام لمثيل دفتر الملاحظات هذا فقط.
- في حالة عنوان URL لمستودع git، أدخل
https://github.com/aws-samples/amazon-sagemaker-neo-performance-gains
. - اختار إنشاء مثيل دفتر.
- بعد أن وصل دفتر الملاحظات إلى ملف
Running
الحالة ، اختر فتح كوكب المشتري للاتصال بمثيل الكمبيوتر الدفتري الخاص بك. - انتقل إلى
neo-blog
المستودع في Jupyter واختر ملفNeoBlog.ipynb
دفتر لبدء تشغيله.
أنت الآن جاهز لتصفح بقية هذا المنشور وتشغيل محتويات دفتر الملاحظات.
تجول دفتر الملاحظات
تتطابق مقتطفات الشفرة في هذا المنشور مع الشفرة الموجودة في ملف NeoBlog
دفتر. يحتوي هذا المنشور على التعليق الأكثر صلة ، ويوفر دفتر الملاحظات تفاصيل إضافية. عندما يتم توفير معلومات إضافية في دفتر الملاحظات ، يتم استدعاؤها وفقًا لذلك. هيا بنا نبدأ!
أولاً ، يجب علينا استرداد مجموعة بيانات Abalone وتقسيمها إلى مجموعات تدريب وتحقق من الصحة. نقوم بتخزين البيانات في lightsvm
تنسيق.
- قم بتشغيل الخليتين التاليتين في دفتر Jupyter:
- قم بتدريب النموذج عن طريق تشغيل خلية التعليمات البرمجية التالية:
عندما تنتهي مهمة التدريب المحلي من العمل (يجب أن تستغرق بضع دقائق فقط) ، فإن الخطوة التالية هي نشر أداة نموذج XGBoost إلى نقطة نهاية SageMaker. يحتوي دفتر Jupyter على معلومات إضافية تتعلق بسبب استخدامنا لفئة عائلة مثيل c5 ، جنبًا إلى جنب مع كيفية حفظ الأداة النموذجية في خدمة تخزين أمازون البسيطة (أمازون S3).
- قم بنشر الأداة النموذجية عن طريق تشغيل الخلية التالية:
بعد نشر النموذج غير المُحسَّن (توقفت الخلية عن العمل) ، نقوم بتشغيل وظيفة تجميع Neo لتحسين الأداة النموذجية. في الكود التالي ، نستخدم عائلة نوع المثيل c5 ، ونختار إطار عمل XGBoost ، ونقوم بتضمين متجه شكل الإدخال. شكل الإدخال غير مستخدم من قبل Neo ، لكن وظيفة الترجمة تلقي خطأ إذا لم يتم توفير قيمة. تستخدم وظيفة التجميع أيضًا الإصدار 1.2.1 من XGBoost افتراضيًا ، وهذا هو سبب تحديدنا لإصدار إطار العمل 1.2-1 أثناء تدريب النموذج.
- قم بتشغيل مهمة التحويل البرمجي Neo باستخدام الكود التالي:
- عندما تتوقف الخلية عن العمل وتكتمل مهمة الترجمة ، ننشر النموذج المحسن الجديد إلى نقطة نهاية SageMaker المنفصلة الخاصة به:
- بعد ذلك ، نتحقق من أن نقاط النهاية تعمل على النحو المتوقع. عند تشغيل كتلة التعليمات البرمجية التالية ، يجب أن تشاهد التنبؤات الرقمية التي تم إرجاعها من كلا نقطتي النهاية.
مع تشغيل كل من نقاط النهاية وتشغيلها ، يمكننا إنشاء لوحة معلومات CloudWatch التي نستخدمها لتحليل أداء نقطة النهاية. في هذا المنشور ، نراقب المقاييس CPUUtilization
, ModelLatency
(التي تقيس الوقت الذي يستغرقه النموذج لإرجاع توقع) ، و Invocations
(مما يساعدنا على مراقبة تقدم اختبار الحمل مقابل نقاط النهاية).
- قم بتشغيل الخلية التالية لإنشاء لوحة المعلومات:
بعد تشغيل الخلية ، يمكنك اختيار ارتباط الإخراج للانتقال إلى لوحة المعلومات ، لكنك لن ترى أي بيانات ذات معنى تم رسمها حتى الآن.
الآن بعد أن تم إنشاء لوحة القيادة ، يمكننا المضي قدمًا في إعداد Serverless Artillery CLI. للقيام بذلك ، نقوم بتثبيت نود.جي إسأطلقت حملة إطار بدون خادم، و Serverless Artillery على مثيل دفتر الملاحظات SageMaker الخاص بنا. يمكن أن تستغرق الخلية التي تثبت Node.js وقتًا طويلاً للتشغيل ، وهذا أمر طبيعي.
- قم بتشغيل الخلية التالية لتثبيت Node.js و Serverless Framework:
بعد ذلك ، نقوم بنشر مدفعية بدون خادم. يقوم الكود أولاً بتغيير الدلائل إلى الدليل الذي يحتوي على الكود الخاص بتوليد الحمل AWS لامدا وظيفة. ثم يقوم بتثبيت تبعيات الوظيفة ويستخدم Serverless Artillery CLI لحزم ونشر وظيفة توليد الحمل في حسابنا عبر Serverless Framework. لمزيد من المعلومات حول ما تفعله مدفعية Serverless تحت الغطاء ، راجع دفتر Jupyter.
قمنا بإعداد Serverless Artillery للوصول مباشرة إلى نقاط نهاية SageMaker الخاصة بنا من خلال الطلبات الموقعة يدويًا باستخدام خوارزمية AWS Signature Version 4. تكمن فائدة هذا النهج في أننا نصل إلى ونقيس أداء نقاط النهاية بشكل حصري أثناء اختبار الحمل. إذا واجهنا نقاط النهاية الخاصة بنا بخدمات وسيطة مثل بوابة واجهة برمجة التطبيقات المدعومة من Lambda ، فإن نتائج اختبار الحمل تلتقط خصائص أداء الخدمات الثلاث معًا بدلاً من موارد SageMaker فقط.
- انشر مدفعية بدون خادم بالرمز التالي:
بعد تشغيل هذه الخلايا ، يجب أن يكون لديك Node.js الإصدار 12.4.0 أو أعلى ، و Serverless Framework الإصدار 1.80.0 ، و Serverless Artillery الإصدار 0.4.9.
المهمة التالية هي إنشاء تعريف اختبار الحمل ، والذي نقوم به عن طريق تشغيل خليتين. تحدد الخلية الأولى أمرًا سحريًا مخصصًا ، وتقوم الخلية الثانية بإنشاء تعريف اختبار الحمل وحفظه فيه script.yaml
.
يحتوي تعريف الاختبار على ست مراحل ، كل منها تستغرق دقيقتين. تبدأ المرحلة الأولى بمعدل وصول يبلغ 2 مستخدمًا في الثانية ، مما يعني أنه يتم إنشاء 20 طلبات تقريبًا وإرسالها إلى كل نقطة نهاية كل ثانية لمدة دقيقتين. يتم قياس المراحل الثلاث التالية بواسطة 10 مستخدمًا إضافيًا في الثانية ، ويتم توسيع المرحلتين الأخيرتين بمقدار 20. يحتوي كل طلب على 40 صفًا للاستدلال. ال المدفعية تعد الوثائق (الأداة التي تعتمد عليها المدفعية بدون خادم) مصدرًا جيدًا للتعرف على الهيكل والميزات الإضافية لتعريفات اختبار الحمل.
- قم بإنشاء تعريف اختبار الحمل باستخدام الكود التالي:
مع تحديد اختبار الحمل ، نحن الآن جاهزون لبدء تشغيله! نظرًا لوجود ست مراحل تستغرق كل مرحلة دقيقتين ، يتم تشغيل الاختبار لمدة 2 دقيقة. يمكنك مراقبة تقدم اختبار الحمل بالنقر فوق الارتباط الذي تم إنشاؤه عن طريق تشغيل الخلية الثانية. يعيد الارتباط توجيهك إلى لوحة معلومات CloudWatch التي أنشأتها سابقًا.
- قم بإجراء اختبار الحمل باستخدام الكود التالي:
راجع مقاييس CloudWatch
بعد مرور 12 دقيقة ، قم بتحديث لوحة القيادة وانظر إلى المقاييس التي تم التقاطها.
يجب أن تشبه البيانات المرسومة لقطة الشاشة التالية ، والتي تحتوي على العديد من الملاحظات المثيرة للاهتمام لفك ضغطها.
بادئ ذي بدء ، حتى في بداية اختبار الحمل ، عندما كانت كلتا نقطتي النهاية تتعاملان فقط مع حوالي 10 طلبات في الثانية (RPS) ، كان زمن انتقال نموذج SageMaker المحسّن حديثًا أقل بثلاث مرات تقريبًا من نقطة النهاية غير المحسّنة. يوضح لك هذا قوة Neo - من خلال وظيفة تجميع سريعة واحدة ، قمنا بإلغاء تأمين تحسين أداء أكبر بثلاث مرات تقريبًا في نموذج XGBoost الخاص بنا المستضاف على SageMaker!
ثانيًا ، بنهاية اختبار الحمل ، يكون ملف ModelLatency
ارتفع مقياس النموذج غير المُحسَّن إلى ما يقرب من 1.5 ثانية لكل طلب. النموذج غير الأمثل CPUUtilization
يصل المقياس أيضًا إلى 181٪ ، وهو قريب من الحد الأقصى النظري لنقطة النهاية وهو 200٪ نظرًا لأن نوع المثيل ml.c5.large يحتوي على وحدتي vCPU. من ناحية أخرى ، فإن نقطة النهاية المحسّنة ModelLatency
متري لا يتجاوز 10,000 ميكروثانية أبدًا ، و CPUUtilization
يظل المقياس أقل بكثير من السعة عند أقل من 50٪. يشير هذا إلى أن نقطة النهاية المُحسَّنة حديثًا يمكنها بالتأكيد معالجة المزيد من الحمل إذا لزم الأمر ، أكثر بكثير من الحد الأقصى لاختبار الحمل وهو 80 طلبًا في الثانية.
بالنظر إلى الرسم البياني التالي ، يمكننا أيضًا أن نرى أن أداء نقطة النهاية غير المُحسَّنة يبدأ في الانخفاض بشكل كبير حول الطابع الزمني 21:27. للحصول على فكرة أفضل عما يحدث ، قم بإلغاء تحديد ModelLatency
متري لنقطة النهاية غير المحسّنة (الخط الأخضر) للحصول على الرسم البياني للصورة اللاحقة. عند القيام بذلك ، يمكنك رؤية ذلك Invocations
المقاييس تؤكد القصة. حتى علامة 21:27 ، كانت كلتا نقطتي النهاية تتعاملان تقريبًا مع نفس العدد الدقيق من الطلبات من اختبار الحمل (المشار إليه بالخطوط الزرقاء والبرتقالية). بعد علامة 21:27 عندما يبدأ عدد الطلبات في الثانية في الارتفاع فوق 40 ، تبدأ نقطة النهاية غير المُحسَّنة في الكفاح من أجل مواكبة ذلك. يشير هذا إلى أن الحد الأقصى للحمل الذي يمكن أن تتحمله نقطة النهاية غير المُحسَّنة هو حوالي 40 RPS.
تقرير اختبار الحمل الذي تم إنشاؤه بواسطة Serverless Artillery متاح لنا أيضًا من خلال الانتقال إلى CloudWatch في وحدة التحكم ، واختيار مجموعات السجل مع سجلات، والبحث عن مجموعة السجل التي تحتوي على serverless-artillery
في اسمه. إذا اخترت مجموعة السجل ثم اخترت أحدث دفق للسجلات ، يمكنك أن ترى أن الإدخالات الأخيرة تتكون من تقرير يبدو مشابهًا للصورة التالية. تُعد مقاييس هذا التقرير مجمعة لأداء كل من نقطتي نهاية SageMaker ، لذلك في هذه الحالة لا تكون مفيدة جدًا لنا. الشيء الوحيد المثير للاهتمام الذي يجب الإشارة إليه هو أنه في ظل معدلات الوصول الثقيلة ، بدأت نقطة النهاية غير المُحسَّنة في العودة 400 Status
رموز الاستجابة - علامة على أنها غارقة.
تنظيف
مع اكتمال اختبار الحمل وتحليل النتائج ، كل ما تبقى للقيام به هو تنظيف الموارد المنشورة عن طريق تشغيل الخليتين التاليتين. تحذف الخلية الأولى نقطتي نهاية SageMaker (وتكوينات نقطة النهاية الخاصة بهما) التي تم نشرها ، وتدمر الخلية الثانية موارد مدفعية بدون خادم.
بعد تشغيل الخلايا السابقة ، قم بإنهاء دفتر الملاحظات هذا وإيقاف مثيل دفتر الملاحظات أو حذفه. لإيقاف مثيل دفتر الملاحظات ، في وحدة تحكم SageMaker ، اختر مثيلات دفتر الملاحظات، حدد NeoBlog
دفتر ، وعلى الإجراءات القائمة، اختر قلة النوم.
وفي الختام
تهانينا! لقد انتهيت بنجاح من السير في هذا المنشور. تمكنا من تحقيق ما يلي:
- قم بتحسين أداة نموذج XGBoost التي تم إنشاؤها من خلال وظيفة تدريب محلية بوظيفة تجميع جديدة
- انشر كلا الإصدارين من الأداة على نقاط نهاية SageMaker
- انشر مدفعية بدون خادم من دفتر Jupyter الخاص بنا وقم بتكوين الأداة بحيث تستدعي نقاط نهاية SageMaker الخاصة بنا مباشرة
- قم بإجراء اختبارات التحميل على كلا نقطتي النهاية باستخدام مدفعية بدون خادم
- قم بتحليل نتائج اختبار الحمل الخاص بنا واعرض كيف يتفوق النموذج المحسن الجديد على النموذج غير المحسن
يمكن أن تترجم تحسينات الأداء المكتسبة من خلال Neo إلى توفير كبير في التكاليف. كخطوة تالية ، يجب أن تنظر في مجموعة النماذج الموجودة لديك تقييم لهم كمرشحين محتملين لوظائف التحسين. يتيح لك إنشاء نسخ أثرية محسّنة حديثًا تحقيق مقاييس أداء مكافئة (إن لم تكن أفضل) بموارد أقل قوة ، وهي إحدى أسهل الطرق لتوفير المال على نقاط نهاية SageMaker.
بالإضافة إلى ذلك ، يمكنك تطبيق نهج اختبار الحمل الموضح في هذا المنشور على أي نقطة نهاية من SageMaker. عند استخدامها جنبًا إلى جنب ، يتم دمج Serverless Artillery و CloudWatch في إطار عمل قوي لتحديد خصائص أداء نقاط النهاية الخاصة بك ، والتي يمكن أن تساعدك بعد ذلك في اتخاذ قرارات تستند إلى البيانات بشأن تكوينات الموارد التي تناسب احتياجاتك بشكل أفضل. ما عليك سوى نشر النماذج وتحديث تعريف اختبار الحمل والبدء في الاختبار!
لمزيد من المعلومات حول نيو ، انظر قم بتجميع النماذج ونشرها باستخدام Neo. بالنسبة إلى الموضوعات والخدمات الأخرى المتعلقة بـ SageMaker ، تحقق من AWS مدونة التعلم الآلي.
عن المؤلف
آدم كوزدرويتش هو مهندس بيانات وتعلم الآلة في خدمات AWS الاحترافية. إنه متخصص في إدخال إثبات ML للمفاهيم في الإنتاج وأتمتة دورة حياة ML بأكملها. وهذا يشمل جمع البيانات ومعالجة البيانات وتطوير النموذج والتدريب ونشر النماذج ومراقبة النماذج. كما أنه يستمتع بالعمل مع أطر عمل مثل AWS Amplify و AWS SAM و AWS CDK. خلال أوقات فراغه ، يحب آدم ركوب الأمواج والسفر وممارسة التصوير وبناء نماذج التعلم الآلي.
كوينسمارت. Beste Bitcoin-Börse في أوروبا
المصدر: https://aws.amazon.com/blogs/machine-learning/unlock-performance-gains-with-xgboost-amazon-sagemaker-neo-and-serverless-artillery/