Komponen Tuner menyetel hyperparameter untuk model.
Komponen Tuner dan Perpustakaan KerasTuner
Komponen Tuner banyak menggunakan API Python KerasTuner untuk menyetel hyperparameter.
Komponen
Penyetel mengambil:
- tf.Contoh yang digunakan untuk pelatihan dan evaluasi.
- File modul (atau modul fn) yang disediakan pengguna yang mendefinisikan logika penyetelan, termasuk definisi model, ruang pencarian hyperparameter, tujuan, dll.
- Definisi Protobuf dari argumen kereta dan argumen eval.
- (Opsional) Definisi Protobuf dari argumen penyetelan.
- (Opsional) grafik transformasi yang dihasilkan oleh komponen Transform upstream.
- (Opsional) Skema data yang dibuat oleh komponen alur SchemaGen dan diubah secara opsional oleh pengembang.
Dengan data, model, dan tujuan yang diberikan, Tuner menyesuaikan hyperparameter dan memberikan 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 ruang pencarian model dan hyperparameter, serta memilih tujuan dan algoritme untuk penyetelan. Komponen Tuner mengambil kode modul ini sebagai masukan, menyetel hyperparameter, dan memberikan hasil terbaik.
Pelatih dapat mengambil hyperparameter keluaran Tuner sebagai masukan dan menggunakannya dalam kode modul penggunanya. Definisi pipeline 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 menyesuaikan hyperparameter setiap kali melatih ulang model Anda. Setelah Anda menggunakan Tuner untuk menentukan kumpulan hyperparameter yang baik, Anda dapat menghapus Tuner dari pipeline Anda dan menggunakan ImporterNode
untuk mengimpor artefak Tuner dari proses pelatihan sebelumnya untuk diumpankan ke 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'])
Penyetelan di Google Cloud Platform (GCP)
Saat dijalankan di Google Cloud Platform (GCP), komponen Tuner dapat memanfaatkan dua layanan:
- Wazir Platform AI (melalui implementasi CloudTuner)
- Pelatihan Platform AI (sebagai manajer kawanan untuk penyetelan terdistribusi)
AI Platform Vizier sebagai backend penyetelan hyperparameter
AI Platform Vizier adalah layanan terkelola yang melakukan optimasi kotak hitam, berdasarkan teknologi Google Vizier .
CloudTuner adalah implementasi KerasTuner yang terhubung dengan layanan AI Platform Vizier sebagai backend studi. Karena CloudTuner adalah subkelas dari 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 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 pada kawanan pekerja terdistribusi Pelatihan Platform Cloud AI
Framework KerasTuner sebagai implementasi yang mendasari komponen Tuner memiliki kemampuan untuk melakukan pencarian hyperparameter secara paralel. Meskipun komponen Tuner stok tidak memiliki kemampuan untuk mengeksekusi lebih dari satu pekerja penelusuran secara paralel, dengan menggunakan komponen Tuner ekstensi Google Cloud AI Platform , komponen ini menyediakan kemampuan untuk menjalankan penyetelan paralel, menggunakan Pekerjaan Pelatihan AI Platform sebagai kumpulan pekerja terdistribusi manajer. TuneArgs adalah konfigurasi yang diberikan pada komponen ini. Ini adalah pengganti komponen Stock Tuner.
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 keluaran komponen Tuner ekstensi sama dengan komponen Tuner stok, hanya saja beberapa pencarian hyperparameter dijalankan secara paralel pada mesin pekerja yang berbeda, dan sebagai hasilnya, num_trials
akan diselesaikan lebih cepat. Hal ini sangat efektif ketika algoritma pencarian dapat diparalelkan secara memalukan, seperti RandomSearch
. Namun, jika algoritme penelusuran menggunakan informasi dari hasil uji coba sebelumnya, seperti algoritme Google Vizier yang diterapkan di AI Platform Vizier, penelusuran paralel yang berlebihan akan berdampak negatif terhadap kemanjuran penelusuran.
Tautan
E2E CloudTuner pada Contoh GCP
Detail lebih lanjut tersedia di referensi Tuner API .