مؤلفه Tuner فراپارامترها را برای مدل تنظیم می کند.
کامپوننت تیونر و کتابخانه KerasTuner
مؤلفه Tuner به طور گسترده از Python KerasTuner API برای تنظیم هایپرپارامترها استفاده می کند.
جزء
تیونر می گیرد:
- tf. مثال هایی که برای آموزش و ارزیابی استفاده می شوند.
- کاربر یک فایل ماژول (یا ماژول fn) ارائه کرده است که منطق تنظیم، از جمله تعریف مدل، فضای جستجوی فراپارامتر، هدف و غیره را تعریف میکند.
- تعریف Protobuf از قطار ارگ و ارگ eval.
- (اختیاری) تعریف Protobuf از تنظیم args.
- (اختیاری) تبدیل گراف تولید شده توسط یک جزء Transform بالادست.
- (اختیاری) یک طرح داده ایجاد شده توسط یک جزء خط لوله SchemaGen و به صورت اختیاری توسط توسعه دهنده تغییر می کند.
با داده ها، مدل و هدف داده شده، تیونر فراپارامترها را تنظیم می کند و بهترین نتیجه را منتشر می کند.
دستورالعمل ها
یک تابع ماژول کاربر tuner_fn
با امضای زیر برای تیونر مورد نیاز است:
...
from keras_tuner.engine import base_tuner
TunerFnResult = NamedTuple('TunerFnResult', [('tuner', base_tuner.BaseTuner),
('fit_kwargs', Dict[Text, Any])])
def tuner_fn(fn_args: FnArgs) -> TunerFnResult:
"""Build the tuner using the KerasTuner API.
Args:
fn_args: Holds args as name/value pairs.
- working_dir: working dir for tuning.
- train_files: List of file paths containing training tf.Example data.
- eval_files: List of file paths containing eval tf.Example data.
- train_steps: number of train steps.
- eval_steps: number of eval steps.
- schema_path: optional schema of the input data.
- transform_graph_path: optional transform graph produced by TFT.
Returns:
A namedtuple contains the following:
- tuner: A BaseTuner that will be used for tuning.
- fit_kwargs: Args to pass to tuner's run_trial function for fitting the
model , e.g., the training and validation dataset. Required
args depend on the above tuner's implementation.
"""
...
در این تابع، فضاهای جستجوی مدل و هایپرپارامتر را تعریف میکنید و هدف و الگوریتم را برای تنظیم انتخاب میکنید. مؤلفه Tuner این کد ماژول را به عنوان ورودی می گیرد، هایپرپارامترها را تنظیم می کند و بهترین نتیجه را منتشر می کند.
ترینر می تواند هایپرپارامترهای خروجی تیونر را به عنوان ورودی گرفته و از آنها در کد ماژول کاربر خود استفاده کند. تعریف خط لوله به صورت زیر است:
...
tuner = Tuner(
module_file=module_file, # Contains `tuner_fn`.
examples=transform.outputs['transformed_examples'],
transform_graph=transform.outputs['transform_graph'],
train_args=trainer_pb2.TrainArgs(num_steps=20),
eval_args=trainer_pb2.EvalArgs(num_steps=5))
trainer = Trainer(
module_file=module_file, # Contains `run_fn`.
examples=transform.outputs['transformed_examples'],
transform_graph=transform.outputs['transform_graph'],
schema=schema_gen.outputs['schema'],
# This will be passed to `run_fn`.
hyperparameters=tuner.outputs['best_hyperparameters'],
train_args=trainer_pb2.TrainArgs(num_steps=100),
eval_args=trainer_pb2.EvalArgs(num_steps=5))
...
ممکن است نخواهید هر بار که مدل خود را مجدداً آموزش می دهید، هایپرپارامترها را تنظیم کنید. هنگامی که از Tuner برای تعیین مجموعه خوبی از هایپرپارامترها استفاده کردید، می توانید Tuner را از خط لوله خود حذف کنید و از ImporterNode
برای وارد کردن آرتیفکت Tuner از یک دوره آموزشی قبلی برای تغذیه به Trainer استفاده کنید.
hparams_importer = Importer(
# This can be Tuner's output file or manually edited file. The file contains
# text format of hyperparameters (keras_tuner.HyperParameters.get_config())
source_uri='path/to/best_hyperparameters.txt',
artifact_type=HyperParameters,
).with_id('import_hparams')
trainer = Trainer(
...
# An alternative is directly use the tuned hyperparameters in Trainer's user
# module code and set hyperparameters to None here.
hyperparameters = hparams_importer.outputs['result'])
تنظیم در Google Cloud Platform (GCP)
هنگام اجرا در Google Cloud Platform (GCP)، مؤلفه Tuner میتواند از دو سرویس استفاده کند:
- AI Platform Vizier (از طریق اجرای CloudTuner)
- آموزش پلتفرم هوش مصنوعی (به عنوان مدیر گله برای تنظیم توزیع شده)
AI Platform Vizier به عنوان پشتیبان تنظیم هایپرپارامتر
AI Platform Vizier یک سرویس مدیریت شده است که بهینه سازی جعبه سیاه را بر اساس فناوری Google Vizier انجام می دهد.
CloudTuner پیاده سازی KerasTuner است که با سرویس AI Platform Vizier به عنوان پشتوانه مطالعه صحبت می کند. از آنجایی که CloudTuner یک زیر کلاس از keras_tuner.Tuner
است، می توان از آن به عنوان یک جایگزین در ماژول tuner_fn
استفاده کرد و به عنوان بخشی از مولفه TFX Tuner اجرا شد.
در زیر یک قطعه کد است که نحوه استفاده از CloudTuner
را نشان می دهد. توجه داشته باشید که پیکربندی در CloudTuner
به مواردی نیاز دارد که مختص GCP هستند، مانند project_id
و region
.
...
from tensorflow_cloud import CloudTuner
...
def tuner_fn(fn_args: FnArgs) -> TunerFnResult:
"""An implementation of tuner_fn that instantiates CloudTuner."""
...
tuner = CloudTuner(
_build_model,
hyperparameters=...,
...
project_id=..., # GCP Project ID
region=..., # GCP Region where Vizier service is run.
)
...
return TuneFnResult(
tuner=tuner,
fit_kwargs={...}
)
تنظیم موازی در Cloud AI Platform Training گله کارگران را توزیع کرد
فریم ورک KerasTuner به عنوان پیادهسازی زیربنایی مولفه Tuner، توانایی انجام جستجوی فراپارامتر را به صورت موازی دارد. در حالی که مؤلفه استوک تیونر توانایی اجرای موازی بیش از یک جستجوگر را ندارد، با استفاده از مؤلفه Tuner افزونه پلتفرم هوش مصنوعی Google Cloud ، توانایی اجرای تنظیم موازی را با استفاده از یک شغل آموزشی پلتفرم هوش مصنوعی به عنوان گله کارگری توزیع شده فراهم میکند. مدیر. TuneArgs پیکربندی داده شده به این کامپوننت است. این یک جایگزین کشویی جزء استوک تیونر است.
tuner = google_cloud_ai_platform.Tuner(
... # Same kwargs as the above stock Tuner component.
tune_args=proto.TuneArgs(num_parallel_trials=3), # 3-worker parallel
custom_config={
# Configures Cloud AI Platform-specific configs . For for details, see
# https://cloud.google.com/ai-platform/training/docs/reference/rest/v1/projects.jobs#traininginput.
TUNING_ARGS_KEY:
{
'project': ...,
'region': ...,
# Configuration of machines for each master/worker in the flock.
'masterConfig': ...,
'workerConfig': ...,
...
}
})
...
رفتار و خروجی کامپوننت تیونر الحاقی همانند کامپوننت استوک تیونر است، با این تفاوت که چندین جستجوی فراپارامتر به صورت موازی بر روی ماشین های کارگر مختلف انجام می شود و در نتیجه، num_trials
سریعتر تکمیل می شود. این به ویژه زمانی مؤثر است که الگوریتم جستجو به طرز شرم آور قابل موازی سازی باشد، مانند RandomSearch
. با این حال، اگر الگوریتم جستجو از اطلاعات حاصل از آزمایشهای قبلی استفاده کند، مانند الگوریتم Google Vizier که در پلتفرم AI Vizier پیادهسازی شده است، جستجوی بیش از حد موازی بر کارایی جستجو تأثیر منفی میگذارد.
پیوندها
جزئیات بیشتر در مرجع Tuner API موجود است.