Komponen Pipa Tuner TFX

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

Komponen Tuner menyetel hyperparameter untuk model.

Komponen Tuner dan Pustaka KerasTuner

Komponen Tuner menggunakan API Python KerasTuner secara ekstensif untuk menyetel hyperparameter.

Komponen

Tuner mengambil:

  • tf.Contoh yang digunakan untuk pelatihan dan evaluasi.
  • File modul yang disediakan pengguna (atau modul fn) yang mendefinisikan logika penyetelan, termasuk definisi model, ruang pencarian hyperparameter, tujuan, dll.
  • Definisi protobuf dari argumen kereta api dan argumen evaluasi.
  • (Opsional) Definisi protobuf dari argumen penyetelan.
  • (Opsional) grafik transformasi yang dihasilkan oleh komponen Transform upstream.
  • (Opsional) Skema data yang dibuat oleh komponen pipeline SchemaGen dan secara opsional diubah oleh developer.

Dengan data, model, dan tujuan yang diberikan, Tuner menyetel hyperparameter dan memancarkan hasil terbaik.

instruksi

Fungsi modul pengguna tuner_fn dengan tanda tangan berikut diperlukan untuk Tuner:

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

Dalam fungsi ini, Anda menentukan model dan ruang pencarian hyperparameter, dan memilih tujuan dan algoritme untuk penyetelan. Komponen Tuner mengambil kode modul ini sebagai input, menyetel hyperparameter, dan memancarkan hasil terbaik.

Pelatih dapat mengambil hyperparameter keluaran Tuner sebagai masukan dan menggunakannya dalam kode modul penggunanya. Definisi pipa terlihat seperti ini:

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

Anda mungkin tidak ingin menyetel hyperparameter setiap kali Anda melatih kembali model Anda. Setelah Anda menggunakan Tuner untuk menentukan kumpulan hyperparameter yang baik, Anda dapat menghapus Tuner dari saluran Anda dan menggunakan ImporterNode untuk mengimpor artefak Tuner dari pelatihan sebelumnya untuk diumpankan ke Pelatih.

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'])

Penyesuaian di Google Cloud Platform (GCP)

Saat berjalan di Google Cloud Platform (GCP), komponen Tuner dapat memanfaatkan dua layanan:

AI Platform Wazier sebagai backend penyetelan hyperparameter

AI Platform Wazier adalah layanan terkelola yang melakukan pengoptimalan kotak hitam, berdasarkan teknologi Google Wazir .

CloudTuner adalah implementasi KerasTuner yang berbicara dengan layanan Wazir Platform AI sebagai backend studi. Karena CloudTuner adalah subkelas keras_tuner.Tuner , CloudTuner dapat digunakan sebagai pengganti drop-in di modul tuner_fn , dan dijalankan sebagai bagian dari komponen TFX Tuner.

Di bawah ini adalah cuplikan kode yang menunjukkan cara menggunakan CloudTuner . Perhatikan bahwa konfigurasi ke CloudTuner memerlukan item yang khusus untuk GCP, seperti project_id dan 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={...}
  )

Penyetelan paralel di Cloud AI Platform Training mendistribusikan kawanan pekerja

Kerangka kerja KerasTuner sebagai implementasi yang mendasari komponen Tuner memiliki kemampuan untuk melakukan pencarian hyperparameter secara paralel. Meskipun komponen Stock Tuner tidak memiliki kemampuan untuk mengeksekusi lebih dari satu pekerja penelusuran secara paralel, dengan menggunakan komponen Tuner ekstensi AI Platform Google Cloud, komponen ini memberikan kemampuan untuk menjalankan penyetelan paralel, menggunakan Tugas Pelatihan AI Platform sebagai kawanan pekerja terdistribusi Pengelola. TuneArgs adalah konfigurasi yang diberikan untuk komponen ini. Ini adalah pengganti drop-in dari komponen Tuner saham.

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

Perilaku dan output dari komponen Tuner ekstensi sama dengan komponen Tuner stok, kecuali bahwa beberapa pencarian hyperparameter dieksekusi secara paralel pada mesin pekerja yang berbeda, dan sebagai hasilnya, num_trials akan diselesaikan lebih cepat. Ini sangat efektif ketika algoritme pencarian dapat diparalelkan secara memalukan, seperti RandomSearch . Namun, jika algoritme penelusuran menggunakan informasi dari hasil uji coba sebelumnya, seperti algoritme Google Wazir yang diterapkan di AI Platform Wazir, penelusuran paralel yang berlebihan akan berdampak negatif pada efektivitas penelusuran.

Contoh E2E

Contoh E2E CloudTuner di GCP

Tutorial KerasTuner

Tutorial CloudTuner

Usul

Detail lebih lanjut tersedia di referensi Tuner API .