Tuner TFX İşlem Hattı Bileşeni

Tuner bileşeni, modelin hiper parametrelerini ayarlar.

Ayarlayıcı Bileşeni ve KerasTuner Kitaplığı

Tuner bileşeni, hiperparametreleri ayarlamak için Python KerasTuner API'sinden kapsamlı bir şekilde yararlanı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).
  • Train argümanlarının ve değerlendirme argümanlarının protobuf tanımı.
  • (İsteğe bağlı) Ayarlama argümanlarının Protobuf tanımı.
  • Yukarı akışlı bir Transform bileşeni tarafından üretilen (İsteğe bağlı) dönüşüm grafiği.
  • (İsteğe bağlı) 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 veriler, model ve hedefle hiperparametreleri ayarlar ve en iyi sonucu verir.

Talimatlar

Tuner için aşağıdaki imzaya sahip bir kullanıcı modülü fonksiyonu 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 fonksiyonda 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.

Eğitmen, Tuner'ın çıkış hiperparametrelerini girdi olarak alabilir ve bunları kullanıcı modülü kodunda kullanabilir. Boru hattı tanımı şuna benzer:

...
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 kümesini belirlemek için Tuner'ı kullandıktan sonra, Tuner'ı işlem hattınızdan kaldırabilir ve Trainer'a beslemek üzere önceki bir eğitim çalıştırmasından Tuner yapıtını içe aktarmak için ImporterNode kullanabilirsiniz.

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 ayarlamanın arka ucu olarak AI Platform Vizier

AI Platform Vizier, Google Vizier teknolojisini temel alarak kara kutu optimizasyonu gerçekleştiren yönetilen bir hizmettir.

CloudTuner, çalışmanın 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 bir yedek parça 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 pasajı bulunmaktadır. CloudTuner yapılandırmasının project_id ve region gibi GCP'ye özel öğeler gerektirdiğini unutmayın.

...
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={...}
  )

Bulut Yapay Zeka Platformu Eğitiminde dağıtılmış işçi 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 Ayarlayıcı bileşeni birden fazla arama çalışanını paralel olarak yürütme becerisine sahip olmasa da, Google Cloud AI Platform uzantısı Tuner bileşenini kullanarak, dağıtılmış bir çalışan sürüsü olarak bir AI Platform Eğitim İşini kullanarak paralel ayarlama çalıştırma yeteneği sağlar. müdür. TuneArgs bu bileşene verilen konfigürasyondur. Bu, stok Tuner bileşeninin anında değiştirilmesidir.

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ı Tuner bileşeninin davranışı ve çıktısı, birden fazla hiperparametre aramasının farklı çalışan makinelerde paralel olarak yürütülmesi ve sonuç olarak num_trials daha hızlı tamamlanması dışında stok Tuner bileşeniyle aynıdır. Bu, özellikle arama algoritması RandomSearch gibi utanç verici derecede paralelleştirilebilir olduğunda etkilidir. Ancak arama algoritması, AI Platform Vizier'da uygulanan Google Vizier algoritmasının kullandığı gibi önceki denemelerin sonuçlarından elde edilen bilgileri kullanıyorsa, aşırı derecede paralel bir arama, aramanın etkinliğini olumsuz yönde etkileyecektir.

E2E Örneği

GCP'de E2E CloudTuner Örneği

KerasTuner öğreticisi

CloudTuner öğreticisi

Teklif

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