برنامه نویسی

سرویس در حال بررسی: Sagemaker Modeling Pipelines

معرفی


به وبلاگ من خوش آمدید، جایی که من اطلاعات و نکاتی را در مورد گردش کار یادگیری ماشین با استفاده از Sagemaker Pipelines به اشتراک می گذارم. اگر در اینجا تازه کار هستید، توصیه می کنم برای کسب اطلاعات بیشتر در مورد این سرویس یادگیری ماشینی کاملاً مدیریت شده AWS، اولین پست من را بررسی کنید. در پست دومم، در مورد اینکه چگونه پارامترسازی می‌تواند به شما کمک کند گردش کار را سفارشی کنید و آن را انعطاف‌پذیرتر و کارآمدتر کنید، بحث کردم.

پس از استفاده گسترده از Sagemaker Pipelines در پروژه های واقعی، به درک جامعی از این سرویس دست یافتم. در این پست، مزایای کلیدی استفاده از Sagemaker Pipelines و محدودیت هایی که باید قبل از اجرای آن در نظر بگیرید را خلاصه می کنم. چه یک تازه وارد به این سرویس باشید یا یک کاربر باتجربه، از این بررسی مختصر، بینش های ارزشمندی به دست خواهید آورد.

ویژگی های کلیدی


1.Sagemaker ادغام

این سرویس به طور مستقیم با Sagemaker یکپارچه شده است، بنابراین کاربر مجبور نیست با سایر خدمات AWS سروکار داشته باشد. همچنین، به لطف ادغام Sagemaker Python SDK می توان خطوط لوله را به صورت برنامه نویسی ایجاد کرد. علاوه بر این، به دلیل ادغام یکپارچه با Sagemaker Studio، می توان از داخل کنسول استفاده کرد.

2.ردیابی نسب داده

اصل و نسب داده فرآیند ردیابی و مستندسازی مبدا، حرکت، تبدیل و مقصد داده ها در طول چرخه حیات آن است. به توانایی ردیابی مسیر داده ها از زمان ایجاد تا وضعیت فعلی آن اشاره دارد و دید کاملی از حرکت داده ها از جمله منابع داده، تبدیل ها و مقصدها ارائه می دهد.

خطوط لوله Sagemaker همانطور که در زیر مشاهده می شود این فرآیند را آسان تر می کند 1.

فراداده Lineage

3.لیست انتخاب شده از مراحل برای تمام چرخه زندگی ML

خط لوله Sagemaker یک راه راحت برای مدیریت فرآیند بسیار تکراری توسعه ML از طریق چیزی به نام مراحل ارائه می دهد. این امکان توسعه و نگهداری آسان تر را به صورت فردی یا تیمی فراهم می کند. در حال حاضر، شامل لیست زیر از انواع مرحله است.

راهنمای جامع تری در مورد این مراحل در این پست بیان شده است

مراحل کارکرد

4.موازی سازی

راه های مختلفی برای اجرای موازی گردش های کاری ML با استفاده از خطوط لوله Sagemaker وجود دارد. به عنوان مثال، می توان از آن برای تغییر داده، الگوریتم یا هر دو استفاده کرد. توانایی ادغام هموار با سایر قابلیت‌های Sagemaker، فرآیند ایجاد گردش‌های کاری یادگیری ماشینی قابل تکرار و سازمان‌یافته را بسیار ساده می‌کند.

یک برنامه ساده پایتون برای ناهار دادن بسیاری از خطوط لوله به صورت موازی می تواند چیزی شبیه قطعه کد زیر باشد:

from sagemaker.workflow.pipeline import Pipeline
from multiprocessing import Process
from concurrent.futures import ThreadPoolExecutor
import datetime

def start_pipeline(Pipeline_Parameters, execution_parameters):
    try:
        ct_start = datetime.datetime.now() 
        print(f'Executing pipeline: {execution_parameters["pipeline_name"]} with the following parameters:\n')
        print(Pipeline_Parameters)
        for k,v in Pipeline_Parameters.items():
            print(f"{k}: {v}")

        pipeline = Pipeline(name = execution_parameters["pipeline_name"])

        execution = pipeline.start(execution_display_name = execution_parameters["disp_name"],
                                       execution_description = execution_parameters["execution_description"],
                                       parameters=Pipeline_Parameters)
        if execution_parameters["wait"]:
            print("Waiting for the pipeline to finish...")
            print(execution.describe())

            ## Wait for maximum 8.3 (30 seconds * 1000 attempts)  hours before raising waiter error. 
            execution.wait(delay = 30, # The polling interval
                           max_attempts = 1000 # The maximum number of polling attempts. (Defaults to 60 polling attempts)
                          ) 
            print(execution.list_steps())
        else:
            print("Executing the pipeline without waiting to finish...")
        print(f'Executing pipeline: {execution_parameters["pipeline_name"]} done')
        ct_end = datetime.datetime.now()
        ET = (ct_end - ct_start)
        print(f"Time Elapsed: {ET} (hh:mm:ss.ms)")
        return execution

    except Exception as E:
        import sys
        sys.exit(f"Couldn't run pipeline: {execution_parameters['disp_name']} due to:\n{E}")

def worer_func(process:Process):
    process.join()
    return process.exitcode


if __name__ == '__main__':
    proc = []
    # List of all required executions such as display name. Each configuation should be a dictionary
    Execution_args_list = [] 
    # List of parameters per execution. Each configuation should be a dictionary
    pipeline_parameters_list = []
    for Execution_args, pipeline_parameters in zip(Execution_args_list, pipeline_parameters_list):
        p = Process(target=start_pipeline, args=(pipeline_parameters, Execution_args))
        p.start()
        proc.append(p)
        with ThreadPoolExecutor(len(proc)) as pool:
            tasks = []
            for index,p in enumerate(proc):
                tasks.append(pool.submit(worer_func, p))
            for item in as_completed(tasks):
                if item.result() != 0:
                    for process in proc:
                        try:
                            process.terminate()
                        except PermissionError:
                            pass
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

محدودیت ها و زمینه های بهبود

  • خطوط لوله با شرایط

    • SageMaker Pipelines از استفاده از مراحل شرط تودرتو پشتیبانی نمی کند. شما نمی توانید یک مرحله شرط را به عنوان ورودی برای یک مرحله شرط دیگر ارسال کنید.
    • یک مرحله شرط نمی تواند از مراحل یکسان در هر دو شاخه استفاده کند. اگر در هر دو شاخه به یک عملکرد مرحله نیاز دارید، مرحله را کپی کرده و نام دیگری برای آن بگذارید.
  • حلقه ها:

    خطوط لوله Sagemaker راه مستقیمی برای تکرار برخی از مراحل جریان ML ارائه نمی دهد. به عنوان مثال، اگر نیاز به تکرار پردازش داده ها و آموزش مدل دارید تا دقت خاصی حاصل شود، باید خودتان این منطق را پیاده سازی کنید.

  • انتقال داده بین مراحل:

    این یک موقعیت معمولی در توسعه ML است که تعداد زیادی آرایه داده بین مراحل مختلف منتقل شود. در حالی که Pipelines را می توان به گونه ای سفارشی کرد که توسعه دهنده بتواند فایل های داده را از S3 ذخیره و بارگذاری کند، این یک گلوگاه توسعه در نمونه سازی سریع ایجاد می کند. خواندن/نوشتن داده‌ها در فایل‌ها ماهیت مستعد خطا است و توسعه‌دهنده باید به طور موثر خطاهای این فرآیند را مدیریت کند تا از اجرای ناموفق خطوط لوله جلوگیری کند.

  • عملیات بر روی پارامترهای خط لوله:

    Sagemaker استفاده از متغیرهایی را در خط لوله فعال می کند که می توانند در زمان اجرا با استفاده از پارامترهای خط لوله تغییر کنند. من این پست را به خلاصه کردن عمیق این ویژگی کلیدی خط لوله اختصاص دادم.

نتیجه گیری


در نتیجه، خطوط لوله ساختمان مدل Sagemaker یک سرویس ارزشمند است که ایجاد، مدیریت و نظارت بر گردش کار یادگیری ماشین را ساده می‌کند. ادغام آن با Sagemaker استفاده از آن را بدون نیاز به سایر سرویس‌های AWS آسان می‌کند و در دسترس بودن Python SDK امکان ایجاد خطوط لوله را به صورت برنامه‌ریزی می‌کند. این سرویس فهرستی از مراحل را برای تمام مراحل چرخه حیات ML ارائه می‌کند و ردیابی دودمان داده را امکان‌پذیر می‌کند و ردیابی مسیر داده‌ها را در طول چرخه عمر آن آسان‌تر می‌کند. علاوه بر این، این سرویس از اجرای موازی گردش‌های کاری ML پشتیبانی می‌کند که هنگام پردازش مقادیر زیادی داده مفید است. با این حال، هنوز محدودیت‌هایی وجود دارد که سرویس باید آنها را برطرف کند، مانند ناتوانی در حلقه زدن از طریق بخش خاصی از مراحل خطوط لوله. به طور کلی، Sagemaker Model Building Pipelines ابزاری قدرتمند برای دانشمندان داده و مهندسان یادگیری ماشین است و ویژگی‌های فراوان آن، آن را به اکوسیستم یادگیری ماشینی افزوده شده است.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا