نظّم رحلة التعلم الآلي الخاصة بك مع Amazon SageMaker Experiments و Amazon SageMaker Pipelines PlatoBlockchain Data Intelligence. البحث العمودي. عاي.

نظّم رحلة التعلم الآلي الخاصة بك مع Amazon SageMaker Experiments و Amazon SageMaker Pipelines

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

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

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

لماذا من المهم الحفاظ على تنظيم تجاربك؟

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

في البداية ، تكون العملية مليئة بعدم اليقين ومتكررة للغاية. نتيجةً لذلك ، يمكن لمرحلة التجريب هذه إنتاج نماذج متعددة ، يتم إنشاء كل منها من مدخلاتها الخاصة (مجموعات البيانات ، ونصوص التدريب ، والمعلمات الفائقة) وإنتاج مخرجاتها الخاصة (المصنوعات النموذجية ومقاييس التقييم). التحدي إذن هو تتبع كل هذه المدخلات والمخرجات لكل تكرار.

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

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

فوائد تجارب SageMaker

تتيح تجارب SageMaker لعلماء البيانات تنظيم وتتبع ومقارنة وتقييم تكرارات التدريب الخاصة بهم.

لنبدأ أولاً بنظرة عامة على ما يمكنك فعله بالتجارب:

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

لمعرفة المزيد حول Experiments APIs and SDKs ، نوصي بالوثائق التالية: قم بإنشاء تجربة و يقوم Amazon SageMaker باختبار Python SDK.

إذا كنت تريد الغوص بشكل أعمق ، فنحن نوصي بالبحث في amazon-sagemaker- أمثلة / تجارب sagemaker-مستودع جيثب لمزيد من الأمثلة.

التكامل بين خطوط الأنابيب والتجارب

تم تصميم خطوط أنابيب بناء النموذج التي تعد جزءًا من خطوط الأنابيب خصيصًا لـ ML وتسمح لك بتنسيق مهام بناء النموذج الخاص بك باستخدام أداة خط أنابيب تتضمن تكاملات أصلية مع ميزات SageMaker الأخرى بالإضافة إلى المرونة لتوسيع خط الأنابيب الخاص بك مع تنفيذ خطوات خارج SageMaker . تحدد كل خطوة الإجراء الذي يتخذه خط الأنابيب. يتم تحديد التبعيات بين الخطوات بواسطة رسم بياني لا دوري مباشر (DAG) تم إنشاؤه باستخدام خطوط الأنابيب Python SDK. يمكنك إنشاء خط أنابيب SageMaker برمجيًا عبر نفس SDK. بعد نشر خط الأنابيب ، يمكنك بشكل اختياري تصور سير العمل داخل Studio.

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

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

كود SageMaker Pipelines

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

تمكّنك خطوط الأنابيب من تمرير المعلمات في وقت التشغيل. نحدد هنا أنواع مثيلات المعالجة والتدريب وأعدادها في وقت التشغيل مع الإعدادات الافتراضية المحددة مسبقًا:

base_job_prefix = "pipeline-experiment-sample"
model_package_group_name = "pipeline-experiment-model-package"

processing_instance_count = ParameterInteger(
  name="ProcessingInstanceCount", default_value=1
)

training_instance_count = ParameterInteger(
  name="TrainingInstanceCount", default_value=1
)

processing_instance_type = ParameterString(
  name="ProcessingInstanceType", default_value="ml.m5.xlarge"
)
training_instance_type = ParameterString(
  name="TrainingInstanceType", default_value="ml.m5.xlarge"
)

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

تتيح لنا خطوط الأنابيب تحقيق إصدار البيانات بطريقة برمجية باستخدام متغيرات خاصة بالتنفيذ مثل ExecutionVariables.PIPELINE_EXECUTION_ID، وهو المعرف الفريد لتشغيل خط الأنابيب. يمكننا ، على سبيل المثال ، إنشاء مفتاح فريد لتخزين مجموعات البيانات الناتجة فيه خدمة تخزين أمازون البسيطة (Amazon S3) التي تربطها بخط أنابيب معين. للحصول على القائمة الكاملة للمتغيرات ، يرجى الرجوع إلى متغيرات التنفيذ.

framework_version = "0.23-1"

sklearn_processor = SKLearnProcessor(
    framework_version=framework_version,
    instance_type=processing_instance_type,
    instance_count=processing_instance_count,
    base_job_name="sklearn-ca-housing",
    role=role,
)

process_step = ProcessingStep(
    name="ca-housing-preprocessing",
    processor=sklearn_processor,
    outputs=[
        ProcessingOutput(
            output_name="train",
            source="/opt/ml/processing/train",
            destination=Join(
                on="/",
                values=[
                    "s3://{}".format(bucket),
                    prefix,
                    ExecutionVariables.PIPELINE_EXECUTION_ID,
                    "train",
                ],
            ),
        ),
        ProcessingOutput(
            output_name="validation",
            source="/opt/ml/processing/validation",
            destination=Join(
                on="/",
                values=[
                    "s3://{}".format(bucket),
                    prefix,
                    ExecutionVariables.PIPELINE_EXECUTION_ID,
                    "validation",
                ],
            )
        ),
        ProcessingOutput(
            output_name="test",
            source="/opt/ml/processing/test",
            destination=Join(
                on="/",
                values=[
                    "s3://{}".format(bucket),
                    prefix,
                    ExecutionVariables.PIPELINE_EXECUTION_ID,
                    "test",
                ],
            )
        ),
    ],
    code="california-housing-preprocessing.py",
)

ثم ننتقل إلى إنشاء كائن مقدر لتدريب نموذج XGBoost. قمنا بتعيين بعض المعلمات التشعبية الثابتة التي يتم استخدامها بشكل شائع مع XGBoost:

model_path = f"s3://{default_bucket}/{base_job_prefix}/ca-housing-experiment-pipeline"

image_uri = sagemaker.image_uris.retrieve(
    framework="xgboost",
    region=region,
    version="1.2-2",
    py_version="py3",
    instance_type=training_instance_type,
)

xgb_train = Estimator(
    image_uri=image_uri,
    instance_type=training_instance_type,
    instance_count=training_instance_count,
    output_path=model_path,
    base_job_name=f"{base_job_prefix}/ca-housing-train",
    sagemaker_session=sagemaker_session,
    role=role,
)

xgb_train.set_hyperparameters(
    eval_metric="rmse",
    objective="reg:squarederror",  # Define the object metric for the training job
    num_round=50,
    max_depth=5,
    eta=0.2,
    gamma=4,
    min_child_weight=6,
    subsample=0.7
)

نقوم بضبط المعلمات الفائقة للنماذج التي نقوم بإنشائها باستخدام ملف ContinuousParameter النطاق ل lambda. اختيار مقياس واحد ليكون المقياس الموضوعي يخبر الموالف (المثال الذي يدير وظائف ضبط المعلمات الفائقة) أنك ستقيم وظيفة التدريب بناءً على هذا المقياس المحدد. يُرجع الموالف أفضل تركيبة بناءً على أفضل قيمة لهذا المقياس الموضوعي ، مما يعني أفضل تركيبة تقلل من أفضل جذر متوسط ​​الخطأ التربيعي (RMSE).

objective_metric_name = "validation:rmse"

hyperparameter_ranges = {
    "lambda": ContinuousParameter(0.01, 10, scaling_type="Logarithmic")
}

tuner = HyperparameterTuner(estimator,
                            objective_metric_name,
                            hyperparameter_ranges,
                            objective_type=objective_type,
                            strategy="Bayesian",
                            max_jobs=10,
                            max_parallel_jobs=3)

tune_step = TuningStep(
    name="HPTuning",
    tuner=tuner_log,
    inputs={
        "train": TrainingInput(
            s3_data=process_step.properties.ProcessingOutputConfig.Outputs[
                "train"
            ].S3Output.S3Uri,
            content_type="text/csv",
        ),
        "validation": TrainingInput(
            s3_data=process_step.properties.ProcessingOutputConfig.Outputs[
                "validation"
            ].S3Output.S3Uri,
            content_type="text/csv",
        ),
    } 
)

تجري خطوة الضبط تجارب متعددة بهدف تحديد أفضل نموذج بين نطاقات المعلمات التي تم اختبارها. مع الطريقة get_top_model_s3_uri، نحن نصنف أفضل 50 إصدارًا أداءً من نموذج S3 URI ونستخرج فقط الإصدار الأفضل أداءً (نحدده k=0 للأفضل) لإنشاء نموذج SageMaker.

model_bucket_key = f"{default_bucket}/{base_job_prefix}/ca-housing-experiment-pipeline"
model_candidate = Model(
    image_uri=image_uri,
    model_data=tune_step.get_top_model_s3_uri(top_k=0, s3_bucket=model_bucket_key),
    sagemaker_session=sagemaker_session,
    role=role,
    predictor_cls=XGBoostPredictor,
)

create_model_step = CreateModelStep(
    name="CreateTopModel",
    model=model_candidate,
    inputs=sagemaker.inputs.CreateModelInput(instance_type="ml.m4.large"),
)

عند تشغيل خط الأنابيب ، فإنه يُنشئ مكونات تجريبية لكل وظيفة ضبط للمعلمات الفائقة ولكل وظيفة من وظائف SageMaker تم إنشاؤها بواسطة خطوات خط الأنابيب.

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

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

#Pipeline experiment config
ca_housing_experiment_config = PipelineExperimentConfig(
    experiment_name,
    Join(
        on="-",
        values=[
            "pipeline-execution",
            ExecutionVariables.PIPELINE_EXECUTION_ID
        ],
    )
)

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

pipeline_name = f"CAHousingExperimentsPipeline"

pipeline = Pipeline(
    name=pipeline_name,
    pipeline_experiment_config=ca_housing_experiment_config,
    parameters=[
        processing_instance_count,
        processing_instance_type,
        training_instance_count,
        training_instance_type
    ],
    steps=[process_step,tune_step,create_model_step],
)

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

pipeline.upsert(role_arn=sagemaker.get_execution_role())
execution = pipeline.start()

تظهر لقطة الشاشة السابقة باللون الأخضر مسار تشغيل ناجحًا. نحصل على مقاييس تجربة واحدة من تشغيل خط الأنابيب بالشفرة التالية:

# SM Pipeline injects the Execution ID into trial component names
execution_id = execution.describe()['PipelineExecutionArn'].split('/')[-1]
source_arn_filter = Filter(
    name="TrialComponentName", operator=Operator.CONTAINS, value=execution_id
)

source_type_filter = Filter(
    name="Source.SourceType", operator=Operator.EQUALS, value="SageMakerTrainingJob"
)

search_expression = SearchExpression(
    filters=[source_arn_filter, source_type_filter]
)

trial_component_analytics = ExperimentAnalytics(
    sagemaker_session=sagemaker_session,
    experiment_name=experiment_name,
    search_expression=search_expression.to_boto()
)

analytic_table = trial_component_analytics.dataframe()
analytic_table.head()

قارن المقاييس لكل مكون تجريبي

يمكنك رسم نتائج ضبط المعلمة الفائقة في Studio أو عبر مكتبات تخطيط Python الأخرى. نعرض كلا الطريقتين للقيام بذلك.

استكشف مقاييس التدريب والتقييم في Studio

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

  1. اختار التجارب والمحاكمات من موارد SageMaker رمز على الشريط الجانبي الأيسر.
  2. اختر تجربتك لفتحها.
  3. اختر (انقر بزر الماوس الأيمن) التجربة التي تريدها.
  4. اختار فتح في قائمة المكونات التجريبية.
  5. صحافة تغير لتحديد مكونات التجربة التي تمثل وظائف التدريب.
  6. اختار أضف الرسم البياني.
  7. اختار مخطط جديد وقم بتخصيصه لرسم المقاييس المجمعة التي تريد تحليلها. لحالة الاستخدام الخاصة بنا ، اختر ما يلي:
    1. في حالة نوع البياناتتحديد احصائيات ملخصة.
    2. في حالة نوع الرسم البيانيتحديد مخطط مبعثر.
    3. في حالة المحور السيني، اختر lambda.
    4. في حالة المحور ص، اختر validation:rmse_last.

يظهر الرسم البياني الجديد في الجزء السفلي من النافذة ، بعنوان "8".

يمكنك تضمين وظائف تدريبية أكثر أو أقل بالضغط تغير واختيار رمز العين للحصول على تجربة تفاعلية أكثر.

نظّم رحلة التعلم الآلي الخاصة بك مع Amazon SageMaker Experiments و Amazon SageMaker Pipelines PlatoBlockchain Data Intelligence. البحث العمودي. عاي.

التحليلات مع تجارب SageMaker

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

analytic_table.plot.scatter("lambda", "validation:rmse - Last", grid=True)

وفي الختام

يتيح التكامل الأصلي بين SageMaker Pipelines و SageMaker Experiments لعلماء البيانات تنظيم التجارب وتتبعها وتصورها تلقائيًا أثناء أنشطة تطوير النموذج. يمكنك إنشاء تجارب لتنظيم جميع أعمال تطوير النموذج ، مثل ما يلي:

  • حالة استخدام العمل التي تعالجها ، مثل إنشاء تجربة للتنبؤ بضخ العميل
  • تجربة يملكها فريق علوم البيانات بخصوص تحليلات التسويق ، على سبيل المثال
  • علم بيانات محدد ومشروع ML

في هذا المنشور ، نتعمق في خطوط الأنابيب لإظهار كيف يمكنك استخدامها جنبًا إلى جنب مع التجارب لتنظيم سير عمل مؤتمت بالكامل من طرف إلى طرف.

كخطوة تالية ، يمكنك استخدام ميزات SageMaker الثلاث - الاستوديو والتجارب وخطوط الأنابيب - لمشروع ML التالي الخاص بك.

قراءات المقترحة


عن المؤلفين

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

نظّم رحلة التعلم الآلي الخاصة بك مع Amazon SageMaker Experiments و Amazon SageMaker Pipelines PlatoBlockchain Data Intelligence. البحث العمودي. عاي.ماريو بورجوين هو مهندس حلول شريك أول في AWS ، ومتخصص في الذكاء الاصطناعي / تعلم الآلة ، وقائد تقني عالمي في MLOps. إنه يعمل مع عملاء المؤسسات والشركاء الذين ينشرون حلول الذكاء الاصطناعي في السحابة. يتمتع بخبرة تزيد عن 30 عامًا في التعلم الآلي والذكاء الاصطناعي في الشركات الناشئة والمؤسسات ، بدءًا من إنشاء أحد أنظمة التعلم الآلي التجارية الأولى للبيانات الضخمة. يقضي ماريو وقت فراغه في اللعب مع ترفورين البلجيكيين الثلاثة ، وطهي العشاء لعائلته ، وتعلم الرياضيات وعلم الكونيات.

نظّم رحلة التعلم الآلي الخاصة بك مع Amazon SageMaker Experiments و Amazon SageMaker Pipelines PlatoBlockchain Data Intelligence. البحث العمودي. عاي.جاناباثي كريشنامورثي هو كبير مهندسي حلول ML في AWS. يوفر Ganapathi إرشادات توجيهية لعملاء بدء التشغيل والشركات لمساعدتهم على تصميم التطبيقات السحابية ونشرها على نطاق واسع. وهو متخصص في التعلم الآلي ويركز على مساعدة العملاء في الاستفادة من الذكاء الاصطناعي / التعلم الآلي من أجل نتائج أعمالهم. عندما لا يكون في العمل ، يستمتع بالاستكشاف في الهواء الطلق والاستماع إلى الموسيقى.

نظّم رحلة التعلم الآلي الخاصة بك مع Amazon SageMaker Experiments و Amazon SageMaker Pipelines PlatoBlockchain Data Intelligence. البحث العمودي. عاي.فاليري سونثاكيث هو مهندس حلول لـ AWS ، ويعمل في صناعة الألعاب ومع شركاء ينشرون حلول الذكاء الاصطناعي. تهدف إلى بناء حياتها المهنية حول رؤية الكمبيوتر. خلال وقت فراغها ، تقضي فاليري ذلك في السفر واكتشاف أماكن طعام جديدة وتغيير الديكورات الداخلية لمنزلها.

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

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