کامپوننت خط لوله تیونر TFX

مؤلفه 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 به عنوان پشتیبان تنظیم هایپرپارامتر

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 پیاده‌سازی شده است، جستجوی بیش از حد موازی بر کارایی جستجو تأثیر منفی می‌گذارد.

مثال E2E

E2E CloudTuner در GCP مثال

آموزش KerasTuner

آموزش CloudTuner

پیشنهاد

جزئیات بیشتر در مرجع Tuner API موجود است.