Komponent Tuner dostraja hiperparametry modelu.
Komponent tunera i biblioteka KerasTuner
Komponent Tuner w szerokim zakresie wykorzystuje interfejs API języka Python KerasTuner do dostrajania hiperparametrów.
Część
Tuner pobiera:
- tf.Przykłady użyte do szkolenia i ewaluacji.
- Dostarczony przez użytkownika plik modułu (lub moduł fn), który definiuje logikę dostrajania, w tym definicję modelu, przestrzeń wyszukiwania hiperparametrów, cel itp.
- Definicja protobufa argumentów pociągowych i argumentów ewaluacyjnych.
- (Opcjonalnie) Definicja argumentów dostrajających w protobufie .
- (Opcjonalnie) wykres transformacji utworzony przez nadrzędny komponent Transform.
- (Opcjonalnie) Schemat danych utworzony przez komponent potoku SchemaGen i opcjonalnie zmieniony przez programistę.
Mając podane dane, model i cel, Tuner dostraja hiperparametry i emituje najlepszy wynik.
Instrukcje
Dla Tunera wymagana jest funkcja modułu użytkownika tuner_fn
z następującą sygnaturą:
...
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.
"""
...
W tej funkcji definiujesz zarówno przestrzeń poszukiwań modelu, jak i hiperparametrów, a także wybierasz cel i algorytm dostrajania. Komponent Tuner pobiera ten kod modułu jako dane wejściowe, dostraja hiperparametry i emituje najlepszy wynik.
Trainer może przyjąć hiperparametry wyjściowe Tunera jako dane wejściowe i wykorzystać je w kodzie modułu użytkownika. Definicja potoku wygląda następująco:
...
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))
...
Możesz nie chcieć dostrajać hiperparametrów za każdym razem, gdy ponownie szkolisz swój model. Po użyciu narzędzia Tuner do określenia dobrego zestawu hiperparametrów można usunąć narzędzie Tuner z potoku i użyć ImporterNode
do zaimportowania artefaktu narzędzia Tuner z poprzedniego przebiegu szkoleniowego w celu przesłania go do narzędzia 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'])
Dostrajanie na platformie Google Cloud (GCP)
Działając na platformie Google Cloud Platform (GCP), komponent Tuner może korzystać z dwóch usług:
- Wezyr platformy AI (poprzez implementację CloudTuner)
- Szkolenie dotyczące platformy AI (jako menedżer stada w zakresie tuningu rozproszonego)
AI Platform Vizier jako backend dostrajania hiperparametrów
AI Platform Vizier to usługa zarządzana, która wykonuje optymalizację czarnej skrzynki w oparciu o technologię Google Vizier .
CloudTuner to implementacja KerasTuner , która komunikuje się z usługą AI Platform Vizier jako zapleczem badawczym. Ponieważ CloudTuner jest podklasą keras_tuner.Tuner
, można go użyć jako zamiennika w module tuner_fn
i wykonać jako część komponentu TFX Tuner.
Poniżej znajduje się fragment kodu pokazujący, jak korzystać CloudTuner
. Zwróć uwagę, że konfiguracja CloudTuner
wymaga elementów specyficznych dla GCP, takich jak project_id
i 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={...}
)
Równoległe strojenie rozproszonego stada pracowników Cloud AI Platform Training
Framework KerasTuner jako podstawowa implementacja komponentu Tuner ma możliwość równoległego wyszukiwania hiperparametrów. Chociaż standardowy komponent Tuner nie umożliwia równoległego wykonywania więcej niż jednego procesu wyszukiwania, korzystając z komponentu rozszerzenia Google Cloud AI Platform Tuner , zapewnia on możliwość uruchamiania strojenia równoległego przy użyciu zadania szkoleniowego platformy AI jako rozproszonego stada pracowników menedżer. TuneArgs to konfiguracja nadana temu komponentowi. Jest to zamiennik standardowego tunera.
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': ...,
...
}
})
...
Zachowanie i dane wyjściowe komponentu rozszerzenia Tuner są takie same jak podstawowego komponentu Tuner, z tą różnicą, że wiele przeszukiwań hiperparametrów jest wykonywanych równolegle na różnych komputerach roboczych, w wyniku czego num_trials
zostaną ukończone szybciej. Jest to szczególnie skuteczne, gdy algorytm wyszukiwania jest żenująco równoległy, jak na przykład RandomSearch
. Jeśli jednak algorytm wyszukiwania wykorzysta informacje z wyników wcześniejszych prób, tak jak robi to algorytm Google Vizier zaimplementowany w AI Platform Vizier, nadmiernie równoległe wyszukiwanie negatywnie wpłynie na skuteczność wyszukiwania.
Spinki do mankietów
E2E CloudTuner na przykładzie GCP
Poradnik dotyczący KerasTunera
Poradnik dotyczący CloudTunera
Więcej szczegółów można znaleźć w dokumentacji API tunera .