قم بتشغيل نماذج ML للمجموعة على Amazon SageMaker PlatoBlockchain Data Intelligence. البحث العمودي. عاي.

قم بتشغيل نماذج ML للمجموعة على Amazon SageMaker

أصبح نشر النموذج في التعلم الآلي (ML) معقدًا بشكل متزايد. لا تريد نشر نموذج ML واحد فقط ولكن مجموعات كبيرة من نماذج ML ممثلة كمجموعة مهام سير عمل. تتكون تدفقات العمل هذه من نماذج ML متعددة. يعد إنتاج نماذج ML هذه أمرًا صعبًا لأنك تحتاج إلى الالتزام بمتطلبات الأداء ووقت الاستجابة المختلفة.

الأمازون SageMaker يدعم مجموعات المثيل الفردي مع خادم الاستدلال تريتون. تتيح لك هذه الإمكانية تشغيل مجموعات النماذج التي تناسب مثيل واحد. وراء الكواليس ، يستفيد SageMaker من خادم الاستدلال Triton لإدارة المجموعة في كل مثيل خلف نقطة النهاية لزيادة الإنتاجية واستخدام الأجهزة مع زمن انتقال منخفض للغاية (من رقم واحد بالمللي ثانية). باستخدام Triton ، يمكنك أيضًا الاختيار من بين مجموعة واسعة من أطر عمل ML المدعومة (بما في ذلك TensorFlow و PyTorch و ONNX و XGBoost و NVIDIA TensorRT) وخلفيات البنية التحتية ، بما في ذلك وحدات معالجة الرسومات ووحدات المعالجة المركزية و استدلال AWS.

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

حل نظرة عامة

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

يجب أن تأخذ أعباء العمل في الاعتبار القدرات التي توفرها Triton لضمان إمكانية تقديم نماذجها. يدعم Triton عددًا من أطر العمل الشائعة خارج الصندوق ، بما في ذلك TensorFlow و PyTorch و ONNX و XGBoost و NVIDIA TensorRT. يدعم Triton أيضًا العديد من الخلفيات المطلوبة لتشغيل الخوارزميات بشكل صحيح. يجب عليك التأكد من أن النماذج الخاصة بك مدعومة من قبل هذه الخلفيات وفي حالة عدم وجود الواجهة الخلفية ، يسمح لك Triton بتنفيذ النموذج الخاص بك ودمجها. يجب عليك أيضًا التحقق من أن إصدار الخوارزمية الخاص بك مدعوم وكذلك التأكد من أن عناصر النموذج مقبولة من قبل الواجهة الخلفية المقابلة. للتحقق مما إذا كانت الخوارزمية الخاصة بك مدعومة ، ارجع إلى خلفية خادم الاستدلال تريتون للحصول على قائمة بالخلفيات المدعومة أصلاً والتي تحتفظ بها NVIDIA.

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

لنأخذ نموذج الشبكة العصبية لتصنيف الصور ونرى كيف يمكننا تسريع أعباء العمل لدينا. في هذا المثال ، نستخدم الواجهة الخلفية NVIDIA DALI لتسريع المعالجة المسبقة في سياق مجموعتنا.

إنشاء مجموعات نموذج Triton

يبسط Triton Inference Server نشر نماذج الذكاء الاصطناعي على نطاق واسع. يأتي Triton Inference Server مع حل مناسب يبسط بناء خطوط أنابيب المعالجة المسبقة والمعالجة اللاحقة. توفر منصة خادم الاستدلال Triton برنامج جدولة المجموعات ، والذي يمكنك استخدامه لبناء نماذج مجموعات خطوط الأنابيب المشاركة في عملية الاستدلال مع ضمان الكفاءة وتحسين الإنتاجية.

يخدم Triton Inference Server نماذج من مستودعات النماذج. لنلقِ نظرة على تخطيط مستودع النموذج لنموذج المجموعة الذي يحتوي على نموذج المعالجة المسبقة DALI ، ونموذج TensorFlow التأسيسي V3 ، وتكوين مجموعة النموذج. يحتوي كل دليل فرعي على معلومات المستودع للنماذج المقابلة. ال config.pbtxt يصف الملف تكوين النموذج للنماذج. يجب أن يحتوي كل دليل على مجلد فرعي رقمي واحد لكل إصدار من النموذج ويتم تشغيله بواسطة خلفية محددة يدعمها Triton.

مستودع نموذج NVIDIA Triton

نفيديا دالي

بالنسبة لهذا المنشور ، نستخدم مكتبة تحميل بيانات NVIDIA (DALI) كنموذج ما قبل المعالجة في مجموعة نموذجنا. NVIDIA DALI هي مكتبة لتحميل البيانات والمعالجة المسبقة لتسريع تطبيقات التعلم العميق. يوفر مجموعة من الكتل الإنشائية المحسّنة لتحميل بيانات الصور والفيديو والصوت ومعالجتها. يمكنك استخدامه كبديل محمول مُسقط لأجهزة تحميل البيانات المضمنة ومكررات البيانات في أطر التعلم العميق الشائعة.

نفيديا دالي

يوضح الكود التالي تكوين النموذج لواجهة DALI الخلفية:

name: "dali"
backend: "dali"
max_batch_size: 256
input [
  {
    name: "DALI_INPUT_0"
    data_type: TYPE_UINT8
    dims: [ -1 ]
  }
]
output [
  {
    name: "DALI_OUTPUT_0"
    data_type: TYPE_FP32
    dims: [ 299, 299, 3 ]
  }
]
parameters: [
  {
    key: "num_threads"
    value: { string_value: "12" }
  }
]

نموذج التأسيس V3

بالنسبة لهذا المنشور ، نوضح كيف يتم استخدام DALI في مجموعة نموذجية مع Inception V3. يتم حفظ نموذج Inception V3 TensorFlow المدرب مسبقًا بتنسيق GraphDef كملف واحد مسمى model.graphdef. config.pbtxt يحتوي الملف على معلومات حول اسم النموذج والنظام الأساسي max_batch_size، وعقود المدخلات والمخرجات. نوصي بتعيين ملف max_batch_size التكوين لأقل من حجم دفعة نموذج البداية V3. يحتوي ملف التسمية على تسميات للفصول لـ 1,000 فئة مختلفة. نقوم بنسخ تسميات نموذج التصنيف الأولي إلى inception_graphdef الدليل في مستودع النموذج. يحتوي ملف التسميات على 1,000 ملصق فئة من IMAGEnet مجموعة بيانات التصنيف.

name: "inception_graphdef"
platform: "tensorflow_graphdef"
max_batch_size: 256
input [
  {
    name: "input"
    data_type: TYPE_FP32
    format: FORMAT_NHWC
    dims: [ 299, 299, 3 ]
  }
]
output [
  {
    name: "InceptionV3/Predictions/Softmax"
    data_type: TYPE_FP32
    dims: [ 1001 ]
    label_filename: "inception_labels.txt"
  }
]

فرقة تريتون

يُظهر الكود التالي تكوينًا نموذجيًا لنموذج المجموعة لمعالجة DALI المسبقة وتصنيف الصور:

name: "ensemble_dali_inception"
platform: "ensemble"
max_batch_size: 256
input [
  {
    name: "INPUT"
    data_type: TYPE_UINT8
    dims: [ -1 ]
  }
]
output [
  {
    name: "OUTPUT"
    data_type: TYPE_FP32
    dims: [ 1001 ]
  }
]
ensemble_scheduling {
  step [
    {
      model_name: "dali"
      model_version: -1
      input_map {
        key: "DALI_INPUT_0"
        value: "INPUT"
      }
      output_map {
        key: "DALI_OUTPUT_0"
        value: "preprocessed_image"
      }
    },
    {
      model_name: "inception_graphdef"
      model_version: -1
      input_map {
        key: "input"
        value: "preprocessed_image"
      }
      output_map {
        key: "InceptionV3/Predictions/Softmax"
        value: "OUTPUT"
      }
    }
  ]
}

قم بإنشاء نقطة نهاية SageMaker

نقاط نهاية SageMaker السماح بالاستضافة في الوقت الفعلي حيث يلزم وقت استجابة ميلي ثانية. تتولى SageMaker الرفع الثقيل غير المتمايز لإدارة استضافة النموذج ولديها القدرة على التوسع التلقائي. بالإضافة إلى ذلك ، يتم أيضًا توفير عدد من الإمكانات ، بما في ذلك استضافة أنواع متعددة من نموذجك ، واختبار A / B لنماذجك ، والتكامل مع الأمازون CloudWatch لاكتساب إمكانية ملاحظة أداء النموذج ، ومراقبة انحراف النموذج.

لنقم بإنشاء نموذج SageMaker من النماذج الأثرية التي حمّلناها إليها خدمة تخزين أمازون البسيطة (أمازون S3).

بعد ذلك ، نقدم أيضًا متغير بيئة إضافيًا: SAGEMAKER_TRITON_DEFAULT_MODEL_NAME، والذي يحدد اسم النموذج الذي سيتم تحميله بواسطة Triton. يجب أن تتطابق قيمة هذا المفتاح مع اسم المجلد في حزمة النموذج التي تم تحميلها إلى Amazon S3. هذا المتغير اختياري في الحالات التي تستخدم فيها نموذجًا واحدًا. في حالة نماذج المجموعات ، يجب تحديد هذا المفتاح ليبدأ Triton في SageMaker.

بالإضافة إلى ذلك ، يمكنك تعيين SAGEMAKER_TRITON_BUFFER_MANAGER_THREAD_COUNT و SAGEMAKER_TRITON_THREAD_COUNT لتحسين عدد الخيوط.

container = {
    "Image": triton_image_uri,
    "ModelDataUrl": model_uri,
    "Environment": {"SAGEMAKER_TRITON_DEFAULT_MODEL_NAME": "ensemble_dali_inception"},
}
create_model_response = sm_client.create_model(
    ModelName=sm_model_name, ExecutionRoleArn=role, PrimaryContainer=container
)

باستخدام النموذج السابق ، نقوم بإنشاء تكوين نقطة النهاية حيث يمكننا تحديد نوع وعدد المثيلات التي نريدها في نقطة النهاية:

create_endpoint_config_response = sm_client.create_endpoint_config(
    EndpointConfigName=endpoint_config_name,
    ProductionVariants=[
        {
            "InstanceType": instance_type,
            "InitialVariantWeight": 1,
            "InitialInstanceCount": 1,
            "ModelName": sm_model_name,
            "VariantName": "AllTraffic",
        }
    ],
)
endpoint_config_arn = create_endpoint_config_response["EndpointConfigArn"]

نستخدم تكوين نقطة النهاية هذا لإنشاء نقطة نهاية SageMaker جديدة وانتظر انتهاء النشر. تتغير الحالة إلى InService عند نجاح النشر.

create_endpoint_response = sm_client.create_endpoint(
    EndpointName=endpoint_name, EndpointConfigName=endpoint_config_name
)
endpoint_arn = create_endpoint_response["EndpointArn"]

حمولة الاستدلال

تمر صورة حمولة الإدخال عبر خط أنابيب DALI للمعالجة المسبقة وتستخدم في جدولة المجموعة التي يوفرها خادم الاستدلال Triton. نقوم ببناء الحمولة ليتم تمريرها إلى نقطة نهاية الاستنتاج:

payload = {
    "inputs": [
        {
            "name": "INPUT",
            "shape": rv2.shape,
            "datatype": "UINT8",
            "data": rv2.tolist(),
        }
    ]
}

مجموعة الاستدلال

عندما يكون لدينا نقطة النهاية قيد التشغيل ، يمكننا استخدام عينة الصورة لتنفيذ طلب استنتاج باستخدام JSON كتنسيق الحمولة. بالنسبة إلى تنسيق طلب الاستدلال ، يستخدم Triton بروتوكولات الاستدلال المعيارية للمجتمع KFServing.

response = runtime_sm_client.invoke_endpoint(
    EndpointName=endpoint_name, ContentType="application/octet-stream", Body=json.dumps(payload)
)
print(json.loads(response["Body"].read().decode("utf8")))

مع binary+json التنسيق ، يتعين علينا تحديد طول البيانات الوصفية للطلب في الرأس للسماح لـ Triton بتحليل الحمولة الثنائية بشكل صحيح. يتم ذلك باستخدام رأس نوع المحتوى المخصص application/vnd.sagemaker-triton.binary+json;json-header-size={}.

هذا يختلف عن استخدام ملف Inference-Header-Content-Length header على خادم Triton مستقل لأن الرؤوس المخصصة غير مسموح بها في SageMaker.

توفر حزمة tritonclient طرقًا مفيدة لتوليد الحمولة دون الحاجة إلى معرفة تفاصيل المواصفات. نستخدم الطرق التالية لتحويل طلب الاستدلال إلى تنسيق ثنائي ، مما يوفر زمن انتقال أقل للاستدلال. الرجوع إلى جيثب مفكرة للحصول على تفاصيل التنفيذ.

response = runtime_sm_client.invoke_endpoint(
    EndpointName=endpoint_name,
    ContentType="application/vnd.sagemaker-triton.binary+json;json-header-size={}".format(
        header_length
    ),
    Body=request_body,
)

وفي الختام

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

لمزيد من العينات على مجموعات Triton على SageMaker ، يرجى الرجوع إلى جيثب ريبو. حاول!


حول المؤلف

قم بتشغيل نماذج ML للمجموعة على Amazon SageMaker PlatoBlockchain Data Intelligence. البحث العمودي. عاي.جيمس بارك مهندس حلول في Amazon Web Services. يعمل مع Amazon.com لتصميم وبناء ونشر الحلول التقنية على AWS ، ولديه اهتمام خاص بالذكاء الاصطناعي والتعلم الآلي. في أوقات فراغه ، يستمتع بالبحث عن ثقافات جديدة وخبرات جديدة ومواكبة أحدث اتجاهات التكنولوجيا.

قم بتشغيل نماذج ML للمجموعة على Amazon SageMaker PlatoBlockchain Data Intelligence. البحث العمودي. عاي.فيكرام إيلانجو هو مهندس حلول متخصص في الذكاء الاصطناعي / التعلم الآلي في Amazon Web Services ، ومقرها في فرجينيا ، الولايات المتحدة. يساعد Vikram عملاء الصناعة المالية والتأمينية في التصميم والقيادة الفكرية لبناء ونشر تطبيقات التعلم الآلي على نطاق واسع. يركز حاليًا على معالجة اللغة الطبيعية ، والذكاء الاصطناعي المسؤول ، وتحسين الاستدلال ، وتوسيع ML عبر المؤسسة. في أوقات فراغه ، يستمتع بالسفر والتنزه والطهي والتخييم مع عائلته.

قم بتشغيل نماذج ML للمجموعة على Amazon SageMaker PlatoBlockchain Data Intelligence. البحث العمودي. عاي.سوراب تريكاندي هو مدير أول للمنتجات في Amazon SageMaker Inference. إنه متحمس للعمل مع العملاء وتحفزه هدف إضفاء الطابع الديمقراطي على التعلم الآلي. يركز على التحديات الأساسية المتعلقة بنشر تطبيقات ML المعقدة ، ونماذج ML متعددة المستأجرين ، وتحسين التكلفة ، وجعل نشر نماذج التعلم العميق أكثر سهولة. في أوقات فراغه ، يستمتع سوراب بالمشي لمسافات طويلة والتعرف على التقنيات المبتكرة واتباع TechCrunch وقضاء الوقت مع عائلته.

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

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