Tuner TFX Boru Hattı Bileşeni

Ayarlayıcı bileşeni, model için hiperparametreleri ayarlar.

Tuner Bileşeni ve KerasTuner Kitaplığı

Tuner bileşeni, hiperparametreleri ayarlamak için Python KerasTuner API'sini kapsamlı bir şekilde kullanır.

Bileşen

Ayarlayıcı şunları alır:

  • tf.Eğitim ve değerlendirme için kullanılan örnekler.
  • Model tanımı, hiperparametre arama alanı, amaç vb. dahil olmak üzere ayarlama mantığını tanımlayan, kullanıcı tarafından sağlanan bir modül dosyası (veya modül fn).
  • Tren argümanlarının ve eval argümanlarının protobuf tanımı.
  • (İsteğe bağlı) Ayar argümanlarının Protobuf tanımı.
  • (İsteğe bağlı) bir yukarı akış Dönüşüm bileşeni tarafından üretilen dönüşüm grafiği.
  • (İsteğe bağlı) Bir SchemaGen işlem hattı bileşeni tarafından oluşturulan ve isteğe bağlı olarak geliştirici tarafından değiştirilen bir veri şeması.

Tuner, verilen veri, model ve amaç ile hiperparametreleri ayarlar ve en iyi sonucu verir.

Talimatlar

Tuner için aşağıdaki imzaya sahip bir kullanıcı modülü işlevi tuner_fn gereklidir:

...
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.
  """
  ...

Bu işlevde, hem modeli hem de hiperparametre arama alanlarını tanımlarsınız ve ayarlama için hedefi ve algoritmayı seçersiniz. Tuner bileşeni bu modül kodunu girdi olarak alır, hiperparametreleri ayarlar ve en iyi sonucu verir.

Trainer, Tuner'ın çıkış hiperparametrelerini girdi olarak alabilir ve bunları kendi kullanıcı modülü kodunda kullanabilir. Boru hattı tanımı şöyle görünür:

...
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))
...

Modelinizi her yeniden eğittiğinizde hiperparametreleri ayarlamak istemeyebilirsiniz. İyi bir hiperparametre seti belirlemek için Tuner'ı kullandıktan sonra, Tuner'ı boru hattınızdan kaldırabilir ve ImporterNode kullanarak önceki bir eğitim çalışmasından Tuner yapısını Trainer'a beslemek üzere içe aktarabilirsiniz.

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'da (GCP) ayarlama

Tuner bileşeni, Google Cloud Platform'da (GCP) çalışırken iki hizmetten yararlanabilir:

Hiperparametre ayarının arka ucu olarak AI Platform Vizier

AI Platform Vizier, Google Vizier teknolojisine dayalı olarak kara kutu optimizasyonu gerçekleştiren yönetilen bir hizmettir.

CloudTuner, çalışma arka ucu olarak AI Platform Vizier hizmetiyle konuşan bir KerasTuner uygulamasıdır. CloudTuner, keras_tuner.Tuner bir alt sınıfı olduğundan, tuner_fn modülünde yedek olarak kullanılabilir ve TFX Tuner bileşeninin bir parçası olarak çalıştırılabilir.

Aşağıda, CloudTuner nasıl kullanılacağını gösteren bir kod parçacığı bulunmaktadır. CloudTuner yapılandırmasının, project_id ve region gibi GCP'ye özgü öğeler gerektirdiğine dikkat edin.

...
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'de dağıtılmış çalışan sürüsünde paralel ayarlama

Tuner bileşeninin temel uygulaması olan KerasTuner çerçevesi, hiperparametre aramasını paralel olarak yürütme yeteneğine sahiptir. Stok Tuner bileşeni , Google Cloud AI Platform uzantısı Tuner bileşenini kullanarak birden fazla arama çalışanını paralel olarak yürütme yeteneğine sahip olmasa da, dağıtılmış bir çalışan sürüsü olarak bir AI Platform Eğitim İşi kullanarak paralel ayarlama yapma yeteneği sağlar. müdür. TuneArgs , bu bileşene verilen yapılandırmadır. Bu, stok Ayarlayıcı bileşeninin yerine takılan bir parçadır.

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': ...,
                ...
            }
    })
...

Uzantı Ayarlayıcı bileşeninin davranışı ve çıktısı, stok Ayarlayıcı bileşeni ile aynıdır, ancak farklı çalışan makinelerde paralel olarak birden çok hiper parametre araması yürütülür ve sonuç olarak, num_trials daha hızlı tamamlanır. Bu, özellikle arama algoritması RandomSearch gibi utanç verici bir şekilde paralelleştirilebilir olduğunda etkilidir. Bununla birlikte, arama algoritması, AI Platform Vizier'de uygulanan Google Vizier algoritması gibi önceki denemelerin sonuçlarından gelen bilgileri kullanırsa, aşırı derecede paralel bir arama, aramanın etkinliğini olumsuz yönde etkiler.

E2E Örneği

GCP Örneğinde E2E CloudTuner

KerasTuner eğitimi

CloudTuner eğitimi

Teklif

Daha fazla ayrıntı Tuner API referansında mevcuttur.