از اسکریپت های آموزشی خود استفاده کنید و به طور خودکار بهترین مدل را با استفاده از بهینه سازی هایپرپارامتر در Amazon SageMaker PlatoBlockchain Data Intelligence انتخاب کنید. جستجوی عمودی Ai.

از اسکریپت های آموزشی خود استفاده کنید و به طور خودکار بهترین مدل را با استفاده از بهینه سازی هایپرپارامتر در Amazon SageMaker انتخاب کنید

موفقیت هر خط لوله یادگیری ماشینی (ML) فقط به کیفیت مدل مورد استفاده بستگی ندارد، بلکه به توانایی آموزش و تکرار بر روی این مدل نیز بستگی دارد. یکی از راه‌های کلیدی برای بهبود مدل ML، انتخاب پارامترهای قابل تنظیم بهتر است که به نام شناخته می‌شوند هایپرپارامترها. این به عنوان بهینه سازی هایپرپارامتر (HPO) شناخته می شود. با این حال، انجام این تنظیم به صورت دستی اغلب می تواند به دلیل اندازه فضای جستجو دشوار باشد و گاهی اوقات شامل هزاران تکرار آموزشی می شود.

این پست نشان می دهد که چگونه آمازون SageMaker شما را قادر می سازد نه تنها الگوریتم مدل خود را با استفاده از حالت اسکریپت بیاورید، بلکه از الگوریتم HPO داخلی نیز استفاده کنید. شما یاد خواهید گرفت که چگونه به راحتی معیار ارزیابی انتخابی را به خروجی بدهید CloudWatch آمازون، که می توانید این معیار را برای هدایت الگوریتم خودکار HPO استخراج کنید. سپس می توانید یک کار تنظیم HPO ایجاد کنید که چندین شغل آموزشی و منابع محاسباتی مرتبط را هماهنگ می کند. پس از اتمام، می توانید بهترین شغل آموزشی را با توجه به معیار ارزیابی مشاهده کنید.

بررسی اجمالی راه حل

مراحل زیر را طی می کنیم:

  1. از حالت اسکریپت SageMaker استفاده کنید تا مدل خود را در بالای کانتینر مدیریت شده AWS بیاورید.
  2. اسکریپت آموزشی ما را اصلاح کنید تا معیار ارزیابی ما چاپ شود.
  3. معیار را در CloudWatch Logs پیدا کنید.
  4. متریک را از CloudWatch استخراج کنید.
  5. با تنظیم این معیار ارزیابی، از HPO برای انتخاب بهترین مدل استفاده کنید.
  6. HPO را زیر نظر بگیرید و بهترین شغل آموزشی را پیدا کنید.

پیش نیازها

برای این راهنما، شما باید پیش نیازهای زیر را داشته باشید:

از الگوریتم های سفارشی در یک کانتینر با مدیریت AWS استفاده کنید

به مراجعه مدل خود را با حالت اسکریپت Amazon SageMaker بیاورید برای نگاهی دقیق تر به آوردن یک مدل سفارشی به SageMaker با استفاده از یک کانتینر مدیریت شده توسط AWS.

ما با استفاده از مجموعه داده MNIST برای این مثال MNIST یک مجموعه داده پرکاربرد برای طبقه‌بندی ارقام دست‌نویس است که شامل 70,000 تصویر 28×28 پیکسلی با مقیاس خاکستری از ارقام دست‌نویس است. مجموعه داده به 60,000 تصویر آموزشی و 10,000 تصویر آزمایشی، شامل 10 کلاس (یکی برای هر رقم) تقسیم شده است.

  1. نمونه نوت بوک خود را باز کنید و دستور زیر را برای دانلود اجرا کنید mnist.py فایل:
    !wget https://raw.githubusercontent.com/aws/amazon-sagemaker-examples/main/hyperparameter_tuning/pytorch_mnist/mnist.py

    قبل از اینکه داده ها را دریافت و ذخیره کنیم، اجازه دهید یک جلسه SageMaker ایجاد کنیم. همچنین باید سطل و پیشوند S3 را برای استفاده برای آموزش و داده های مدل مشخص کنیم. این باید در همان منطقه ای باشد که نمونه نوت بوک، آموزش، و میزبانی. کد زیر از سطل پیش فرض اگر از قبل وجود داشته باشد، یا اگر وجود نداشته باشد، یک مورد جدید ایجاد کند. ما همچنین باید نقش IAM ARN را برای دسترسی آموزش و میزبانی به داده‌های شما لحاظ کنیم. ما استفاده می کنیم get_execution_role() برای دریافت نقش IAM که برای نمونه نوت بوک خود ایجاد کرده اید.

  2. یک جلسه با کد زیر ایجاد کنید:
    import sagemaker
    from sagemaker.tuner import (
    IntegerParameter,
    CategoricalParameter,
    ContinuousParameter,
    HyperparameterTuner,
    )
    session = sagemaker.Session()
    bucket = session.default_bucket()
    prefix = "sagemaker/DEMO-custom-hpo"
    role = sagemaker.get_execution_role()

  3. حالا بیایید داده ها را دریافت کنیم، آنها را در پوشه محلی خود ذخیره کنیم /dataو آن را در آمازون S3 آپلود کنید:
    from torchvision.datasets import MNIST
    from torchvision import transforms
    MNIST.mirrors = ["https://sagemaker-sample-files.s3.amazonaws.com/datasets/image/MNIST/"]
    MNIST(
    "data",
    download=True,
    transform=transforms.Compose(
    [transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,))]
    ),
    )
    inputs = session.upload_data(path="data", bucket=bucket, key_prefix=prefix)

    اکنون می‌توانیم یک تخمین‌گر برای راه‌اندازی کار آموزش PyTorch ایجاد کنیم. ما در اینجا روی کد آموزشی واقعی تمرکز نمی کنیم (mnist.py) با جزئیات زیاد. بیایید ببینیم چگونه می توانیم به راحتی از این اسکریپت آموزشی برای مقداردهی اولیه یک کار آموزشی استفاده کنیم.

  4. در کد زیر، یک اسکریپت نقطه ورودی به نام mnist.py قرار می دهیم که حاوی کد آموزشی سفارشی ما است:
    from sagemaker.pytorch import PyTorch
    estimator = PyTorch(
    entry_point="mnist.py",
    role=role,
    py_version="py3",
    framework_version="1.8.0",
    instance_count=1,
    instance_type="ml.c5.2xlarge",
    hyperparameters={"epochs": 5},
    )

  5. برای اطمینان از اینکه این کار آموزشی به درستی پیکربندی شده است، با کد آموزشی کار می‌توانیم با تطبیق آن با داده‌هایی که در Amazon S3 آپلود کرده‌ایم، یک کار آموزشی را شروع کنیم. SageMaker اطمینان حاصل می کند که داده های ما در سیستم فایل محلی موجود است، بنابراین اسکریپت آموزشی ما فقط می تواند داده ها را از دیسک بخواند:
    estimator.fit({"training": inputs})

با این حال، ما یک شغل آموزشی ایجاد نمی کنیم. ما از قابلیت تنظیم خودکار مدل SageMaker با استفاده از یک کار تنظیم فراپارامتر استفاده می کنیم. تنظیم مدل کاملاً با الگوریتم مدل واقعی تضاد دارد. برای اطلاعات بیشتر در مورد تمام هایپرپارامترهایی که می توانید تنظیم کنید، به آن مراجعه کنید تنظیم خودکار مدل را با SageMaker انجام دهید.

برای هر هایپرپارامتری که می خواهیم بهینه سازی کنیم، باید موارد زیر را تعریف کنیم:

  • یک اسم
  • یک نوع (پارامترها می توانند یک عدد صحیح، پیوسته یا طبقه ای باشند)
  • طیفی از ارزش ها برای کشف
  • یک نوع مقیاس بندی (خطی، لگاریتمی، لگاریتمی معکوس، یا خودکار)؛ این به ما امکان می دهد کنترل کنیم که یک محدوده پارامتر خاص چگونه کاوش می شود

ما همچنین باید معیاری را که برای آن بهینه سازی می کنیم تعریف کنیم. این می تواند هر مقدار عددی باشد تا زمانی که در گزارش آموزشی قابل مشاهده است و می توانید یک عبارت منظم برای استخراج آن ارسال کنید.

اگر به خط 181 در mnist.py نگاه کنیم، می‌توانیم ببینیم که چگونه در لاگر چاپ می‌کنیم:

logger.info(
"Test set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)n".format(
test_loss, correct, len(test_loader.dataset), 100.0 * correct / len(test_loader.dataset)
)

در واقع، ما می‌توانیم این خروجی را در گزارش‌های شغل آموزشی که اخیراً اجرا کردیم، ببینیم. با باز کردن گروه log /aws/sagemaker/TrainingJobs در کنسول CloudWatch، باید یک رویداد ثبت نام داشته باشیم که با آن شروع می شود pytorch-training- به دنبال آن یک مهر زمان و نام ایجاد شده است.

اسکرین شات زیر گزارش مورد نظر ما را برجسته می کند.

بیایید اکنون شروع به ساخت کار تنظیم فراپارامتر خود کنیم.

  1. همانطور که گفته شد ابتدا باید اطلاعاتی در مورد هایپرپارامترها در زیر شیء به صورت زیر تعریف کنیم:
    hyperparameter_ranges = {
    "lr": ContinuousParameter(0.001, 0.1),
    "batch-size": CategoricalParameter([32, 64, 128, 256, 512]),
    }

    در اینجا ما دو ابرپارامتر خود را تعریف کردیم. نرخ یادگیری (lr) یک پارامتر پیوسته (بنابراین یک مقدار پیوسته) در محدوده 0.001 و 0.1 است. اندازه دسته (بچ-اندازه) یک پارامتر طبقه بندی شده با مقادیر گسسته قبلی است.

    سپس، متریک هدفی را که می‌خواهیم تنظیم کنیم و تعریف آن را مشخص می‌کنیم. این شامل عبارت منظم (regex) مورد نیاز برای استخراج آن معیار از گزارش‌های CloudWatch از کار آموزشی است که قبلاً دیده‌ایم. ما همچنین یک نام توصیفی از دست دادن میانگین آزمون و نوع هدف را به‌عنوان Minimize مشخص می‌کنیم، بنابراین تنظیم فراپارامتر به دنبال به حداقل رساندن متریک هدف در هنگام جستجو برای بهترین تنظیم فراپارامتر است.

  2. متریک را با کد زیر مشخص کنید:
    metric_definitions = [{"Name": "average test loss", "Regex": "Test set: Average loss: ([0-9.]+)"}]
    objective_metric_name = "average test loss"
    objective_type = "Minimize"

    اکنون ما آماده هستیم تا خود را ایجاد کنیم HyperparameterTuner هدف - شی. علاوه بر نام متریک هدف، نوع و تعریف، ما از آن عبور می کنیم hyperparameter_ranges آبجکت و برآوردگر که قبلا ایجاد کردیم. همچنین تعداد کارهایی را که می خواهیم در مجموع اجرا کنیم، به همراه تعداد کارهایی که باید به صورت موازی اجرا شوند را مشخص می کنیم. ما حداکثر تعداد کارها را 9 انتخاب کرده‌ایم، اما شما معمولاً تعداد بسیار بالاتری (مانند 50) را برای عملکرد بهینه انتخاب می‌کنید.

  3. ایجاد HyperparameterTuner شی با کد زیر:
    tuner = HyperparameterTuner(
    estimator,
    objective_metric_name,
    hyperparameter_ranges,
    metric_definitions,
    max_jobs=9,
    max_parallel_jobs=3,
    objective_type=objective_type,
    )

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

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

با این حال، می‌توانید استراتژی‌های جستجوی دیگری را مشخص کنید. استراتژی های زیر در SageMaker پشتیبانی می شوند:

  • جستجوی شبکه ای - هر ترکیب ممکنی را در میان طیف فراپارامترهای مشخص شده امتحان می کند.
  • جستجوی تصادفی - ترکیبات تصادفی را در بین محدوده مقادیر مشخص شده امتحان می کند. این به نتایج کارهای آموزشی قبلی بستگی ندارد، بنابراین می توانید حداکثر تعداد کارهای آموزشی همزمان را بدون تأثیر بر عملکرد تنظیم اجرا کنید.
  • جستجوی ابرباند - از نتایج میانی و نهایی مشاغل آموزشی برای تخصیص مجدد دوره ها به پیکربندی هایپرپارامترهای به خوبی استفاده شده استفاده می کند و به طور خودکار مواردی را که عملکرد ضعیفی دارند متوقف می کند.

همانطور که در توضیح داده شد، همچنین می توانید الگوریتم خود را بیاورید الگوریتم بهینه سازی هایپرپارامتر خود را در Amazon SageMaker بیاورید.

  1. سپس آموزش را بر روی خود شی تیونر (نه برآوردگر) راه اندازی می کنیم و فراخوانی می کنیم .fit() و عبور از مسیر S3 به قطار و مجموعه داده آزمایشی ما:
    tuner.fit({"training": inputs})

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

سپس مشاهده تمام مشاغل آموزشی فردی که تکمیل شده یا در حال انجام است، به همراه مقدار متریک هدف مرتبط با آنها آسان است. در اسکرین شات زیر مشاهده می کنیم که اولین دسته از کارهای آموزشی کامل شده است که در مجموع شامل سه مورد مطابق با مشخص شده ما می باشد. max_parallel_jobs مقدار 3. پس از تکمیل، می‌توانیم بهترین شغل آموزشی را پیدا کنیم - کاری که میانگین ضرر آزمون را به حداقل می‌رساند. بهترین شغل آموزشی تب.

اسکرین شات از لیست مشاغل آموزشی

پاک کردن

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

نتیجه

در این پست، ما بحث کردیم که چگونه می‌توانیم مدل خود را به SageMaker بیاوریم و سپس از بهینه‌سازی هایپرپارامتر خودکار برای انتخاب بهترین کار آموزشی استفاده کنیم. ما از مجموعه داده محبوب MNIST استفاده کردیم تا ببینیم چگونه می‌توانیم یک معیار هدف سفارشی را مشخص کنیم که کار HPO باید برای آن بهینه شود. با استخراج این متریک هدف از CloudWatch، و تعیین مقادیر مختلف هایپرپارامتر، می‌توانیم به راحتی کار HPO را راه‌اندازی و نظارت کنیم.

اگر به اطلاعات بیشتری نیاز دارید یا می خواهید ببینید مشتریان ما چگونه از HPO استفاده می کنند، به آن مراجعه کنید تنظیم خودکار مدل Amazon SageMaker. امروز مدل خود را برای بهینه سازی هایپرپارامتر خودکار در SageMaker تطبیق دهید.


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

از اسکریپت های آموزشی خود استفاده کنید و به طور خودکار بهترین مدل را با استفاده از بهینه سازی هایپرپارامتر در Amazon SageMaker PlatoBlockchain Data Intelligence انتخاب کنید. جستجوی عمودی Ai.سام پرایس یک مشاور خدمات حرفه ای متخصص در AI/ML و تجزیه و تحلیل داده ها در خدمات وب آمازون است. او برای حل مشکلات چالش برانگیز با مشتریان بخش دولتی در مراقبت های بهداشتی و علوم زیستی همکاری نزدیک دارد. وقتی سام این کار را نمی کند، از نواختن گیتار و تنیس و دیدن گروه های مستقل مورد علاقه خود لذت می برد.

تمبر زمان:

بیشتر از آموزش ماشین AWS