حسِّن وظائف الاستدلال باستخدام الاستدلال الديناميكي للدفعات باستخدام TorchServe على Amazon SageMaker

عقدة المصدر: 1884601

في التعلم العميق ، تشير المعالجة الدفعية إلى تغذية مدخلات متعددة في نموذج. على الرغم من أنه ضروري أثناء التدريب ، إلا أنه قد يكون مفيدًا جدًا لإدارة التكلفة وتحسين الإنتاجية أثناء وقت الاستدلال أيضًا. تم تحسين مسرعات الأجهزة للتوازي ، ويساعد التجميع على تشبع سعة الحوسبة وغالبًا ما يؤدي إلى إنتاجية أعلى.

يمكن أن يكون التجميع مفيدًا في العديد من السيناريوهات أثناء نشر النموذج في الإنتاج. نحن هنا نصنفها على نطاق واسع إلى حالتين من حالات الاستخدام:

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

الأمازون SageMaker يوفر خيارين شائعين لوظائف الاستدلال الخاصة بك. بالنسبة للتطبيقات في الوقت الفعلي ، يستخدم SageMaker Hosting TorchServe كمكتبة خدمة الواجهة الخلفية التي تتعامل مع التجميع الديناميكي للطلبات المستلمة. بالنسبة للتطبيقات غير المتصلة بالإنترنت ، يمكنك استخدام وظائف تحويل مجموعة SageMaker. في هذا المنشور ، نراجع مثالًا لكل خيار لمساعدتك على البدء.

لأن TorchServe أصلي متكامل مع SageMaker عبر مجموعة أدوات الاستدلال SageMaker PyTorch، يمكنك بسهولة نشر نموذج PyTorch على TorchServe باستخدام SageMaker Hosting. قد تكون هناك أيضًا أوقات تحتاج فيها إلى تخصيص بيئتك بشكل أكبر باستخدام صور Docker المخصصة. في هذا المنشور ، نوضح أولاً كيفية نشر نقطة نهاية في الوقت الفعلي باستخدام مجموعة أدوات الاستدلال الأصلية SageMaker PyTorch وتكوين حجم الدُفعة لتحسين الإنتاجية. في المثال الثاني ، أوضحنا كيفية استخدام صورة Docker مخصصة لتكوين تكوينات TorchServe المتقدمة غير المتوفرة كمتغير بيئة لتحسين مهمة الاستدلال الدفعي.

أفضل الممارسات للاستدلال الدفعي

يمكن أن تؤدي المعالجة المجمعة إلى زيادة الإنتاجية وتحسين مواردك لأنها تساعد في إكمال عدد أكبر من الاستدلالات في فترة زمنية معينة على حساب زمن الانتقال. لتحسين نشر النموذج للحصول على إنتاجية أعلى ، فإن التوجيه العام هو زيادة حجم الدُفعة حتى ينخفض ​​معدل النقل. يناسب هذا غالبًا التطبيقات غير المتصلة بالإنترنت ، حيث يتم تجميع العديد من المدخلات (مثل إطارات الفيديو أو الصور أو النص) للحصول على مخرجات التنبؤ.

بالنسبة للتطبيقات في الوقت الفعلي ، غالبًا ما يكون وقت الاستجابة مصدر قلق رئيسي. هناك مفاضلة بين زيادة الإنتاجية وزيادة حجم الدُفعة ووقت الاستجابة ؛ قد تحتاج إلى الضبط حسب الحاجة للوفاء باتفاقية مستوى الخدمة الخاصة بزمن الاستجابة. فيما يتعلق بأفضل الممارسات على السحابة ، فإن التكلفة لكل عدد معين من الاستدلالات هي دليل مفيد في اتخاذ قرار مستنير يلبي احتياجات عملك. أحد العوامل المساهمة في إدارة التكلفة هو اختيار المسرع المناسب. لمزيد من المعلومات، راجع اختر أفضل مسرع للذكاء الاصطناعي وتجميع النماذج لاستدلال رؤية الكمبيوتر باستخدام Amazon SageMaker.

TorchServe التجميع الديناميكي على SageMaker

تورش سيرف هي مكتبة PyTorch الأصلية لخدمة النماذج في الإنتاج على نطاق واسع. إنه تطوير مشترك من Facebook و AWS. يسمح لك TorchServe بمراقبة وإضافة مقاييس مخصصة ودعم نماذج متعددة وزيادة عدد العمال وتقليصه من خلال واجهات برمجة تطبيقات الإدارة الآمنة وتوفير نقاط نهاية الاستدلال والشرح.

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

يمكنك تكوين الدُفعات الديناميكية باستخدام إعدادين ، batch_size و max_batch_delay، إما من خلال متغيرات البيئة في SageMaker أو من خلال config.properties ملف في TorchServe (في حالة استخدام حاوية مخصصة). يستخدم TorchServe أيًا من الإعدادات التي تأتي أولاً ، إما الحجم الأقصى للدفعة (batch_size) أو نافذة زمنية محددة لانتظار دفعة الطلبات max_batch_delay.

باستخدام تكامل TorchServe مع SageMaker ، يمكنك الآن نشر نماذج PyTorch محليًا على SageMaker ، حيث يمكنك تحديد نموذج SageMaker PyTorch. يمكنك إضافة منطق تحميل النموذج المخصص والاستدلال والمعالجة المسبقة والمعالجة اللاحقة في نص برمجي تم تمريره كنقطة دخول إلى SageMaker PyTorch (انظر المثال التالي من التعليمات البرمجية). بدلاً من ذلك ، يمكنك استخدام حاوية مخصصة لنشر النماذج الخاصة بك. لمزيد من المعلومات، راجع خادم نموذج SageMaker PyTorch.

يمكنك ضبط حجم الدُفعة لنماذج PyTorch على SageMaker من خلال متغيرات البيئة. إذا اخترت استخدام حاوية مخصصة ، فيمكنك تجميعها إعدادات in config.properties مع نموذجك عند تغليف نموذجك في TorchServe. يوضح مقتطف الشفرة التالي مثالاً على كيفية تعيين حجم الدُفعة باستخدام متغيرات البيئة وكيفية نشر نموذج PyTorch على SageMaker:

from SageMaker.pytorch.model import PyTorchModel env_variables_dict = { "SAGEMAKER_TS_BATCH_SIZE": "3", "SAGEMAKER_TS_MAX_BATCH_DELAY": "100000"
} pytorch_model = PyTorchModel( model_data=model_artifact, role=role, source_dir="code", framework_version='1.9', entry_point="inference.py", env=env_variables_dict
) predictor = pytorch_model.deploy(initial_instance_count=1, instance_type="ml.c5.2xlarge", serializer=SageMaker.serializers.JSONSerializer(), deserializer=SageMaker.deserializers.BytesDeserializer())

في مقتطف الشفرة ، model_artifact يشير إلى جميع الملفات المطلوبة لإعادة تحميل النموذج المدرب ، والذي يتم أرشفته في ملف .tar ودفعه إلى خدمة تخزين أمازون البسيطة (Amazon S3) دلو. يشبه inference.py معالج TorchServe المخصص ؛ يحتوي على العديد من الوظائف التي يمكنك تجاوزها لاستيعاب تهيئة النموذج والمعالجة المسبقة والمعالجة اللاحقة للطلبات المستلمة ومنطق الاستدلال.

ما يلي مفكرة يُظهر مثالاً كاملاً لنشر نموذج Hugging Face BERT.

إذا كنت بحاجة إلى حاوية مخصصة ، فيمكنك إنشاء صورة حاوية مخصصة ودفعها إلى ملف سجل الأمازون المرنة للحاويات (Amazon ECR). يمكن أن تكون الأداة النموذجية في هذه الحالة ملف TorchServe .mar الذي يجمع القطع الأثرية للنموذج جنبًا إلى جنب مع المعالج. نوضح ذلك في القسم التالي ، حيث نستخدم وظيفة تحويل مجموعة SageMaker.

وظيفة تحويل دفعة SageMaker

بالنسبة لحالات الاستخدام دون اتصال حيث يتم تجميع الطلبات من مصدر بيانات مثل مجموعة البيانات ، يوفر SageMaker وظائف تحويل دفعة. تتيح لك هذه المهام قراءة البيانات من حاوية S3 وكتابة النتائج إلى حاوية S3 المستهدفة. لمزيد من المعلومات، راجع استخدم تحويل الدُفعات للحصول على استنتاجات من مجموعات البيانات الكبيرة. يمكن العثور على مثال كامل للاستدلال الدفعي باستخدام وظائف تحويل الدُفعات في ما يلي مفكرة، حيث نستخدم نموذج ترجمة آلية من مسابقة FLORES. في هذا المثال ، نوضح كيفية استخدام حاوية مخصصة لتسجيل نموذجنا باستخدام SageMaker. يسمح لك استخدام حاوية الاستدلال المخصصة بتخصيص تكوين TorchServe بشكل أكبر. في هذا المثال ، نريد تغيير فك تشفير JSON وتعطيله ، وهو ما يمكننا القيام به من خلال TorchServe config.properties ملف.

عند استخدام معالج مخصص لـ TorchServe ، نحتاج إلى التأكد من أن المعالج يقوم بتنفيذ منطق الاستدلال الدفعي. يمكن أن يكون لكل معالج وظائف مخصصة لإجراء المعالجة المسبقة والاستدلال والمعالجة اللاحقة. يتوفر مثال للمعالج المخصص مع دعم الاستدلال الدفعي على GitHub جيثب:.

نستخدم الحاوية المخصصة الخاصة بنا لتجميع القطع الأثرية للنموذج مع المعالج كما نفعل في TorchServe (عمل ملف مار). نحتاج أيضًا إلى نقطة دخول إلى حاوية Docker التي تبدأ TorchServe بحجم الدُفعة وتعيين فك تشفير JSON في config.properties. نوضح هذا في المثال مفكرة.

تتطلب وظيفة تحويل الدُفعات من SageMaker الوصول إلى ملفات الإدخال من حاوية S3 ، حيث تقسم ملفات الإدخال إلى مجموعات صغيرة وترسلها للاستدلال. ضع في اعتبارك النقاط التالية عند تكوين وظيفة تحويل الدُفعات:

  • ضع ملفات الإدخال (مثل مجموعة البيانات) في حاوية S3 وقم بتعيينها كمصدر بيانات في إعدادات الوظيفة.
  • قم بتعيين حاوية S3 لحفظ نتائج مهمة التحويل الدفعي.
  • المجموعات استراتيجية الدفعة إلى MultiRecord و SplitType إلى Line إذا كنت بحاجة إلى وظيفة التحويل الدفعي لعمل دفعات صغيرة من ملف الإدخال. إذا لم تتمكن من تقسيم مجموعة البيانات تلقائيًا إلى دفعات صغيرة ، فيمكنك تقسيمها إلى مجموعات صغيرة عن طريق وضع كل دفعة في ملف إدخال منفصل ، يتم وضعه في حاوية مصدر البيانات S3.
  • تأكد من أن حجم الدفعة يناسب الذاكرة. عادةً ما يتعامل SageMaker مع هذا تلقائيًا ؛ ومع ذلك ، عند تقسيم الدُفعات يدويًا ، يجب ضبط ذلك بناءً على الذاكرة.

الكود التالي هو مثال لوظيفة التحويل الدفعي:

s3_bucket_name= 'SageMaker-us-west-2-XXXXXXXX'
batch_input = f"s3://{s3_bucket_name}/folder/jobename_TorchServe_SageMaker/"
batch_output = f"s3://{s3_bucket_name}/folder/jobname_TorchServe_SageMaker_output/" batch_job_name = 'job-batch' + time.strftime("%Y-%m-%d-%H-%M-%S", time.gmtime())
batch_job_name request = { "ModelClientConfig": { "InvocationsTimeoutInSeconds": 3600, "InvocationsMaxRetries": 1, }, "TransformJobName": batch_job_name, "ModelName": model_name, "MaxConcurrentTransforms":1, "BatchStrategy": "MultiRecord", "TransformOutput": {"S3OutputPath": batch_output, "AssembleWith": "Line", "Accept": "application/json"}, "TransformInput": { "DataSource": { "S3DataSource": {"S3DataType": "S3Prefix", "S3Uri": batch_input} }, "SplitType" : "Line", "ContentType": "application/json", }, "TransformResources": {"InstanceType": "ml.p2.xlarge", "InstanceCount": 1},
}

عندما نستخدم الإعدادات السابقة ونطلق وظيفة التحويل الخاصة بنا ، فإنه يقرأ ملفات الإدخال من دلو S3 المصدر على دفعات ويرسلها للاستدلال. تتم إعادة كتابة النتائج إلى حاوية S3 المحددة للمخرجات.

يوضح مقتطف الشفرة التالي كيفية إنشاء وظيفة وتشغيلها باستخدام الإعدادات السابقة:

sm.create_transform_job(**request) while True: response = sm.describe_transform_job(TransformJobName=batch_job_name) status = response["TransformJobStatus"] if status == "Completed": print("Transform job ended with status: " + status) break if status == "Failed": message = response["FailureReason"] print("Transform failed with the following error: {}".format(message)) raise Exception("Transform job failed") print("Transform job is still in status: " + status) time.sleep(30)

وفي الختام

في هذا المنشور ، راجعنا الوضعين اللذين يقدمهما SageMaker للاستدلال عبر الإنترنت وغير المتصل. يستخدم الأول التجميع الديناميكي المقدم في TorchServe لتجميع الطلبات من عدة عملاء. يستخدم الأخير وظيفة تحويل SageMaker لتجميع الطلبات من ملفات الإدخال في حاوية S3 وتشغيل الاستدلال.

أظهرنا أيضًا كيفية خدمة النماذج على SageMaker باستخدام صور حاوية مجموعة أدوات SageMaker PyTorch الأصلية ، وكيفية استخدام الحاويات المخصصة لحالات الاستخدام التي تتطلب إعدادات تكوين TorchServe متقدمة.

مع استمرار TorchServe في التطور لتلبية احتياجات مجتمع PyTorch ، تم دمج ميزات جديدة في SageMaker لتوفير طرق فعالة لخدمة النماذج في الإنتاج. لمزيد من المعلومات ، تحقق من TorchServe جيثب الريبو و أمثلة SageMaker.


حول المؤلف

فاي نجوين هو مهندس حلول في AWS يساعد العملاء في رحلتهم السحابية مع التركيز بشكل خاص على بحيرة البيانات والتحليلات وتقنيات الدلالات والتعلم الآلي. في أوقات فراغه ، يمكنك أن تجده يركب الدراجة للذهاب إلى العمل ، أو يقوم بتدريب فريق كرة القدم الخاص بابنه ، أو يستمتع بالمشي مع أسرته في الطبيعة.

نيخيل كولكارني هي مطور برامج مع AWS Machine Learning ، وتركز على جعل أعباء عمل التعلم الآلي أكثر أداءً على السحابة وهي منشئ مشارك لـ AWS Deep Learning Containers للتدريب والاستدلال. إنه متحمس لأنظمة التعلم العميق الموزعة. خارج العمل ، يستمتع بقراءة الكتب والعبث بالجيتار وصنع البيتزا.

حميد شوجنازيري مهندس شريك في Pytorch يعمل على تحسين نموذج الأداء العالي OSS وتقديمه. يحمل حميد درجة الدكتوراه في الرؤية الحاسوبية وعمل كباحث في مختبرات الوسائط المتعددة في أستراليا وماليزيا وقائد البرمجة اللغوية العصبية في Opus.ai. إنه يحب إيجاد حلول أبسط للمشاكل الصعبة وهو متحمس للفن في أوقات فراغه.

جيتا تشوهان يقود AI Partner Engineering في Meta AI من خلال الخبرة في بناء منصات مرنة ومضادة للكسر وموزعة على نطاق واسع للشركات الناشئة و Fortune 500s. يعمل فريقها مع شركاء استراتيجيين وقادة تعلم الآلة عبر الصناعة وجميع مزودي الخدمات السحابية الرئيسيين لبناء وإطلاق خدمات وتجارب منتجات الذكاء الاصطناعي الجديدة ؛ وأخذت نماذج PyTorch من البحث إلى الإنتاج .. وهي فائزة بجائزة Women in IT - Silicon Valley - CTO لعام 2019 ، وهي متحدثة مميزة في ACM ورائدة الفكر في موضوعات تتراوح من الأخلاق في الذكاء الاصطناعي ، والتعلم العميق ، و Blockchain ، وإنترنت الأشياء. إنها شغوفة بالترويج لاستخدام الذكاء الاصطناعي من أجل الخير.

المصدر: https://aws.amazon.com/blogs/machine-learning/optimize-your-inference-jobs-using-dynamic-batch-inference-with-torchserve-on-amazon-sagemaker/

الطابع الزمني:

اكثر من AWS مدونة التعلم الآلي