شعار زيفيرنت

حقق مكاسب تقارب 3 أضعاف في الأداء مع XGBoost و Amazon SageMaker Neo

التاريخ:

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

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

أمازون سيجماكر نيو يسمح لك بإلغاء تأمين هذه التحسينات في الأداء وتوفير التكاليف في غضون دقائق. يقوم بذلك عن طريق تجميع النماذج في ملفات تنفيذية محسّنة من خلال العديد من المكتبات مفتوحة المصدر ، والتي يمكن استضافتها بعد ذلك على الأجهزة المدعومة على الحافة أو على الأمازون SageMaker نقاط النهاية. Neo متوافق مع ثمانية أطر مختلفة للتعلم الآلي (ML)، وفي سياق خوارزميات الشجرة المعززة بالتدرج اللوني مثل XGBoost، يستخدم نيو التريلايت لتحسين عيوب النموذج. نظرًا لشعبية XGBoost وتصنيفه الفريد كإطار عمل ML الكلاسيكي ، فإننا نستخدمه كإطار عمل نختاره طوال هذا المنشور. سيتم عرض سرعة تقارب 3x لنموذج XGBoost المحسّن مقارنة بالنموذج غير المحسّن. ال مجموعة بيانات أذن البحر من UCI لتدريب النموذج. لا تتردد في استخدام النموذج ومجموعة البيانات الخاصة بك ، مع ذلك ، وأخبرنا في التعليقات بنوع التسريع الذي تم تحقيقه.

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

حل نظرة عامة

يوضح الرسم البياني التالي الخدمات التي نستخدمها لهذا الحل وكيفية تفاعلها مع بعضها البعض.

خطوات تنفيذ الحل هي كما يلي:

  1. تحميل ومعالجة الشعبية أذن البحر مجموعة بيانات باستخدام دفتر ملاحظات Jupyter ، ثم قم بتشغيل مهمة تدريب XGBoost SageMaker على البيانات المعالجة. نحن نستخدم وظيفة تدريب SageMaker على الوضع المحلي لإنتاج نموذج XGBoost غير المحسن ، والذي يمكن أن يكون أسرع وأسهل في وضع النموذج الأولي مقارنةً بالطراز البعيد.
  2. قم بنشر عنصر نموذج XGBoost غير المحسن إلى نقطة نهاية SageMaker.
  3. خذ الأداة غير المحسّنة وحسّنها بوظيفة تجميع جديدة.
  4. انشر أداة XGBoost المحسّنة حديثًا إلى نقطة نهاية SageMaker.
  5. خلق الأمازون CloudWatch لوحة معلومات من دفتر SageMaker لمراقبة سرعة الاستدلال والأداء في ظل الحمل الثقيل لكلا نقطتي النهاية.
  6. نشر المدفعية بلا خوادم من دفتر SageMaker ، والذي نستخدمه كأداة لاختبار الحمل. أنشأنا مدفعية بدون خادم بالكامل من دفتر SageMaker ، واستدعاء نقاط نهاية SageMaker الخاصة بك مباشرة من الإنترنت من خلال التوقيع يدويًا AWS Signature الإصدار 4 طلبات - لا حاجة لها بوابة أمازون API كوسيط.
  7. قم بإجراء اختبارات التحميل على كلا نقطتي النهاية.
  8. قم بتحليل أداء كلا نقطتي النهاية تحت الحمل في لوحة معلومات CloudWatch ، وانظر كيف تتفوق نقطة النهاية المحسّنة على النقطة غير المحسّنة.

المتطلبات الأساسية المسبقة

قبل البدء ، يجب أن يكون لديك حق وصول المسؤول إلى حساب AWS ، وإكمال الخطوات التالية:

  1. خلق إدارة الهوية والوصول AWS (انا) دور SageMaker التي لديها AmazonSageMakerFullAccess سياسة مُدارة مرفقة مع سياسة مضمنة تحتوي على أذونات إضافية مطلوبة.

لقطة الشاشة التالية هي مثال لدور تم تكوينه بشكل صحيح يسمى NeoBlog.

AdditionalRequiredPermissionsForSageMaker تحتوي السياسة المضمنة على JSON التالي:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "cloudwatch:PutDashboard", "Resource": "arn:aws:cloudwatch::*:dashboard/NeoDemo" }, { "Effect": "Allow", "Action": [ "s3:CreateBucket", "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:PutObject", "s3:DeleteBucket", "s3:DeleteObject", "s3:DeleteObjectVersion", "s3:PutLifeCycleConfiguration", "s3:GetEncryptionConfiguration", "s3:PutEncryptionConfiguration", "s3:PutBucketPolicy", "s3:DeleteBucketPolicy", "s3:GetBucketPolicy", "s3:GetBucketPolicyStatus" ], "Resource": "arn:aws:s3:::serverless-artillery-*" }, { "Effect": "Allow", "Action": [ "cloudformation:CreateStack", "cloudformation:UpdateStack", "cloudformation:DeleteStack", "cloudformation:DescribeStacks", "cloudformation:DescribeStackEvents", "cloudformation:DescribeStackResource", "cloudformation:DescribeStackResources", "cloudformation:ListStackResources" ], "Resource": "arn:aws:cloudformation:*:*:stack/serverless-artillery-*" }, { "Effect": "Allow", "Action": [ "cloudformation:ValidateTemplate" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iam:GetRole", "iam:CreateRole", "iam:DeleteRolePolicy", "iam:PutRolePolicy", "iam:DeleteRole", "iam:PassRole" ], "Resource": "arn:aws:iam::*:role/serverless-artillery-*" }, { "Effect": "Allow", "Action": [ "sns:CreateTopic", "sns:DeleteTopic", "sns:GetTopicAttributes" ], "Resource": "arn:aws:sns:*:*:serverless-artillery-*" }, { "Effect": "Allow", "Action": [ "lambda:UpdateFunctionCode", "lambda:ListVersionsByFunction", "lambda:PublishVersion", "lambda:InvokeFunction", "lambda:GetFunction", "lambda:CreateFunction", "lambda:DeleteFunction", "lambda:GetFunctionConfiguration", "lambda:AddPermission" ], "Resource": "arn:aws:lambda:*:*:function:serverless-artillery-*" }, { "Effect": "Allow", "Action": [ "logs:DescribeLogGroups", "logs:CreateLogGroup" ], "Resource": "arn:aws:logs:*:*:log-group:serverless-artillery-*" }, { "Effect": "Allow", "Action": [ "logs:DeleteLogGroup", "lambda:RemovePermission" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "events:DescribeRule", "events:PutRule", "events:DeleteRule", "events:PutTargets", "events:RemoveTargets" ], "Resource": "arn:aws:events:*:*:rule/serverless-artillery-*" } ]
}

خطوتنا التالية هي إنشاء مثيل دفتر ملاحظات SageMaker.

  1. على وحدة تحكم SageMaker ، تحت دفاتر، اختر مثيلات دفتر الملاحظات.
  2. اختار إنشاء مثيل دفتر.
  3. في حالة اسم مثيل دفتر الملاحظات، أدخل NeoBlog.
  4. في حالة نوع مثيل دفتر الملاحظات، اختر مثلك (بالنسبة لهذا المنشور ، يجب أن يكون الملف الافتراضي ml.t2.medium كافيًا).
  5. في حالة دور IAM، اختر ال NeoBlog الدور الذي قمت بإنشائه.
  6. في مجلة مستودعات Git القسم، حدد استنساخ مستودع Git عام لمثيل دفتر الملاحظات هذا فقط.
  7. في حالة عنوان URL لمستودع git، أدخل https://github.com/aws-samples/amazon-sagemaker-neo-performance-gains.
  8. اختار إنشاء مثيل دفتر.
  9. بعد أن وصل دفتر الملاحظات إلى ملف Running الحالة ، اختر فتح كوكب المشتري للاتصال بمثيل الكمبيوتر الدفتري الخاص بك.
  10. انتقل إلى neo-blog المستودع في Jupyter واختر ملف NeoBlog.ipynb دفتر لبدء تشغيله.

أنت الآن جاهز لتصفح بقية هذا المنشور وتشغيل محتويات دفتر الملاحظات.

تجول دفتر الملاحظات

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

أولاً ، يجب علينا استرداد مجموعة بيانات Abalone وتقسيمها إلى مجموعات تدريب وتحقق من الصحة. نقوم بتخزين البيانات في lightsvm تنسيق.

  1. قم بتشغيل الخليتين التاليتين في دفتر Jupyter:
from pathlib import Path
import boto3 for p in ['raw_data', 'training_data', 'validation_data']: Path(p).mkdir(exist_ok=True) s3 = boto3.client('s3')
s3.download_file('sagemaker-sample-files', 'datasets/tabular/uci_abalone/abalone.libsvm', 'raw_data/abalone')

from sklearn.datasets import load_svmlight_file, dump_svmlight_file
from sklearn.model_selection import train_test_split X, y = load_svmlight_file('raw_data/abalone')
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=1984, shuffle=True) dump_svmlight_file(x_train, y_train, 'training_data/abalone.train')
dump_svmlight_file(x_test, y_test, 'validation_data/abalone.test')

الآن بعد أن تم خلط بياناتنا وإعدادها ، يمكننا تدريب نموذج XGBoost غير مُحسَّن. ارجع إلى التعليق في دفتر ملاحظات Jupyter للحصول على تفاصيل تتعلق بإصدار إطار عمل الحاوية والمعلمات الفائقة ووضع التدريب المستخدم.

  1. قم بتدريب النموذج عن طريق تشغيل خلية التعليمات البرمجية التالية:
import sagemaker
from sagemaker.xgboost.estimator import XGBoost
from sagemaker.session import Session
from sagemaker.inputs import TrainingInput bucket = Session().default_bucket()
role = sagemaker.get_execution_role() # initialize hyperparameters
hyperparameters = { "max_depth":"5", "eta":"0.2", "gamma":"4", "min_child_weight":"6", "subsample":"0.7", "verbosity":"1", "objective":"reg:squarederror", "num_round":"10000"
} # construct a SageMaker XGBoost estimator
# specify the entry_point to your xgboost training script
estimator = XGBoost(entry_point = "entrypoint.py", framework_version='1.2-1', # 1.x MUST be used hyperparameters=hyperparameters, role=role, instance_count=1, instance_type='local', output_path=f's3://{bucket}/neo-demo') # gets saved in bucket/neo-demo/job_name/model.tar.gz # define the data type and paths to the training and validation datasets
content_type = "libsvm"
train_input = TrainingInput('file://training_data', content_type=content_type)
validation_input = TrainingInput('file://validation_data', content_type=content_type) # execute the XGBoost training job
estimator.fit({'train': train_input, 'validation': validation_input}, logs=['Training'])

عندما تنتهي مهمة التدريب المحلي من العمل (يجب أن تستغرق بضع دقائق فقط) ، فإن الخطوة التالية هي نشر أداة نموذج XGBoost إلى نقطة نهاية SageMaker. يحتوي دفتر Jupyter على معلومات إضافية تتعلق بسبب استخدامنا لفئة عائلة مثيل c5 ، جنبًا إلى جنب مع كيفية حفظ الأداة النموذجية في خدمة تخزين أمازون البسيطة (أمازون S3).

  1. قم بنشر الأداة النموذجية عن طريق تشغيل الخلية التالية:
from sagemaker.xgboost.model import XGBoostModel # grab the model artifact that was written out by the local training job
s3_model_artifact = estimator.latest_training_job.describe()['ModelArtifacts']['S3ModelArtifacts'] # we have to switch from local mode to remote mode
xgboost_model = XGBoostModel( model_data=s3_model_artifact, role=role, entry_point="entrypoint.py", framework_version='1.2-1',
) unoptimized_endpoint_name = 'unoptimized-c5' xgboost_model.deploy( initial_instance_count = 1, instance_type='ml.c5.large', endpoint_name=unoptimized_endpoint_name
)

بعد نشر النموذج غير المُحسَّن (توقفت الخلية عن العمل) ، نقوم بتشغيل وظيفة تجميع Neo لتحسين الأداة النموذجية. في الكود التالي ، نستخدم عائلة نوع المثيل c5 ، ونختار إطار عمل XGBoost ، ونقوم بتضمين متجه شكل الإدخال. شكل الإدخال غير مستخدم من قبل Neo ، لكن وظيفة الترجمة تلقي خطأ إذا لم يتم توفير قيمة. تستخدم وظيفة التجميع أيضًا الإصدار 1.2.1 من XGBoost افتراضيًا ، وهذا هو سبب تحديدنا لإصدار إطار العمل 1.2-1 أثناء تدريب النموذج.

  1. قم بتشغيل مهمة التحويل البرمجي Neo باستخدام الكود التالي:
job_name = s3_model_artifact.split("/")[-2]
neo_model = xgboost_model.compile( target_instance_family="ml_c5", role=role, input_shape =f'{{"data": [1, {X.shape[1]}]}}', output_path =f's3://{bucket}/neo-demo/{job_name}', # gets saved in bucket/neo-demo/model-ml_c5.tar.gz framework = "xgboost", job_name=job_name # what it shows up as in console
)

  1. عندما تتوقف الخلية عن العمل وتكتمل مهمة الترجمة ، ننشر النموذج المحسن الجديد إلى نقطة نهاية SageMaker المنفصلة الخاصة به:
optimized_endpoint_name = 'neo-optimized-c5' neo_model.deploy( initial_instance_count = 1, instance_type='ml.c5.large', endpoint_name=optimized_endpoint_name
)

  1. بعد ذلك ، نتحقق من أن نقاط النهاية تعمل على النحو المتوقع. عند تشغيل كتلة التعليمات البرمجية التالية ، يجب أن تشاهد التنبؤات الرقمية التي تم إرجاعها من كلا نقطتي النهاية.
import boto3 smr = boto3.client('sagemaker-runtime') resp = smr.invoke_endpoint(EndpointName='neo-optimized-c5', Body=b'2,0.675,0.55,0.175,1.689,0.694,0.371,0.474', ContentType='text/csv')
print('neo-optimized model response: ', resp['Body'].read())
resp = smr.invoke_endpoint(EndpointName='unoptimized-c5', Body=b'2,0.675,0.55,0.175,1.689,0.694,0.371,0.474', ContentType='text/csv')
print('unoptimized model response: ', resp['Body'].read())

مع تشغيل كل من نقاط النهاية وتشغيلها ، يمكننا إنشاء لوحة معلومات CloudWatch التي نستخدمها لتحليل أداء نقطة النهاية. في هذا المنشور ، نراقب المقاييس CPUUtilization, ModelLatency (التي تقيس الوقت الذي يستغرقه النموذج لإرجاع توقع) ، و Invocations (مما يساعدنا على مراقبة تقدم اختبار الحمل مقابل نقاط النهاية).

  1. قم بتشغيل الخلية التالية لإنشاء لوحة المعلومات:
import json cw = boto3.client('cloudwatch') dashboard_name = 'NeoDemo'
region = Session().boto_region_name # get region we're currently in body = { "widgets": [ { "type": "metric", "x": 0, "y": 0, "width": 24, "height": 12, "properties": { "metrics": [ [ "AWS/SageMaker", "Invocations", "EndpointName", optimized_endpoint_name, "VariantName", "AllTraffic", { "stat": "Sum", "yAxis": "left" } ], [ "...", unoptimized_endpoint_name, ".", ".", { "stat": "Sum", "yAxis": "left" } ], [ ".", "ModelLatency", ".", ".", ".", "." ], [ "...", optimized_endpoint_name, ".", "." ], [ "/aws/sagemaker/Endpoints", "CPUUtilization", ".", ".", ".", ".", { "yAxis": "right" } ], [ "...", unoptimized_endpoint_name, ".", ".", { "yAxis": "right" } ] ], "view": "timeSeries", "stacked": False, "region": region, "stat": "Average", "period": 60, "title": "Performance Metrics", "start": "-PT1H", "end": "P0D" } } ]
} cw.put_dashboard(DashboardName=dashboard_name, DashboardBody=json.dumps(body)) print('link to dashboard:')
print(f'https://console.aws.amazon.com/cloudwatch/home?region={region}#dashboards:name={dashboard_name}')

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

الآن بعد أن تم إنشاء لوحة القيادة ، يمكننا المضي قدمًا في إعداد Serverless Artillery CLI. للقيام بذلك ، نقوم بتثبيت نود.جي إسأطلقت حملة إطار بدون خادم، و Serverless Artillery على مثيل دفتر الملاحظات SageMaker الخاص بنا. يمكن أن تستغرق الخلية التي تثبت Node.js وقتًا طويلاً للتشغيل ، وهذا أمر طبيعي.

  1. قم بتشغيل الخلية التالية لتثبيت Node.js و Serverless Framework:
%conda install -c conda-forge nodejs 

!npm install -g serverless@1.80.0 serverless-artillery@0.4.9

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

قمنا بإعداد Serverless Artillery للوصول مباشرة إلى نقاط نهاية SageMaker الخاصة بنا من خلال الطلبات الموقعة يدويًا باستخدام خوارزمية AWS Signature Version 4. تكمن فائدة هذا النهج في أننا نصل إلى ونقيس أداء نقاط النهاية بشكل حصري أثناء اختبار الحمل. إذا واجهنا نقاط النهاية الخاصة بنا بخدمات وسيطة مثل بوابة واجهة برمجة التطبيقات المدعومة من Lambda ، فإن نتائج اختبار الحمل تلتقط خصائص أداء الخدمات الثلاث معًا بدلاً من موارد SageMaker فقط.

  1. انشر مدفعية بدون خادم بالرمز التالي:
!cd serverless_artillery && npm install && slsart deploy --stage dev

بعد تشغيل هذه الخلايا ، يجب أن يكون لديك Node.js الإصدار 12.4.0 أو أعلى ، و Serverless Framework الإصدار 1.80.0 ، و Serverless Artillery الإصدار 0.4.9.

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

يحتوي تعريف الاختبار على ست مراحل ، كل منها تستغرق دقيقتين. تبدأ المرحلة الأولى بمعدل وصول يبلغ 2 مستخدمًا في الثانية ، مما يعني أنه يتم إنشاء 20 طلبات تقريبًا وإرسالها إلى كل نقطة نهاية كل ثانية لمدة دقيقتين. يتم قياس المراحل الثلاث التالية بواسطة 10 مستخدمًا إضافيًا في الثانية ، ويتم توسيع المرحلتين الأخيرتين بمقدار 20. يحتوي كل طلب على 40 صفًا للاستدلال. ال المدفعية تعد الوثائق (الأداة التي تعتمد عليها المدفعية بدون خادم) مصدرًا جيدًا للتعرف على الهيكل والميزات الإضافية لتعريفات اختبار الحمل.

  1. قم بإنشاء تعريف اختبار الحمل باستخدام الكود التالي:
from IPython.core.magic import register_line_cell_magic @register_line_cell_magic
def writefilewithvariables(line, cell): with open(line, 'w') as f: f.write(cell.format(**globals())) # Get region that we're currently in
region = Session().boto_region_name

%%writefilewithvariables script.yaml config: variables: unoptimizedEndpointName: {unoptimized_endpoint_name} # the xgboost model has 10000 trees optimizedEndpointName: {optimized_endpoint_name} # the xgboost model has 10000 trees numRowsInRequest: 125 # Each request to the endpoint contains 125 rows target: 'https://runtime.sagemaker.{region}.amazonaws.com' phases: - duration: 120 arrivalRate: 20 # 1200 total invocations per minute (600 per endpoint) - duration: 120 arrivalRate: 40 # 2400 total invocations per minute (1200 per endpoint) - duration: 120 arrivalRate: 60 # 3600 total invocations per minute (1800 per endpoint) - duration: 120 arrivalRate: 80 # 4800 invocations per minute (2400 per endpoint... this is the max of the unoptimized endpoint) - duration: 120 arrivalRate: 120 # only the neo endpoint can handle this load... - duration: 120 arrivalRate: 160 processor: './processor.js' scenarios: - flow: - post: url: '/endpoints/{{{{ unoptimizedEndpointName }}}}/invocations' beforeRequest: 'setRequest' - flow: - post: url: '/endpoints/{{{{ optimizedEndpointName }}}}/invocations' beforeRequest: 'setRequest'

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

  1. قم بإجراء اختبار الحمل باستخدام الكود التالي:
!slsart invoke --stage dev --path script.yaml

print("Here's the link to the dashboard again:")
print(f'https://console.aws.amazon.com/cloudwatch/home?region={region}#dashboards:name={dashboard_name}')

راجع مقاييس 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 (وتكوينات نقطة النهاية الخاصة بهما) التي تم نشرها ، وتدمر الخلية الثانية موارد مدفعية بدون خادم.

# delete endpoints and endpoint configurations sm = boto3.client('sagemaker') for name in [unoptimized_endpoint_name, optimized_endpoint_name]: sm.delete_endpoint(EndpointName=name) sm.delete_endpoint_config(EndpointConfigName=name)

!slsart remove --stage dev

بعد تشغيل الخلايا السابقة ، قم بإنهاء دفتر الملاحظات هذا وإيقاف مثيل دفتر الملاحظات أو حذفه. لإيقاف مثيل دفتر الملاحظات ، في وحدة تحكم 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/

بقعة_صورة

أحدث المعلومات الاستخباراتية

بقعة_صورة

الدردشة معنا

أهلاً! كيف يمكنني مساعدك؟