Tuner 구성요소는 모델의 하이퍼파라미터를 조정합니다.
튜너 구성요소 및 KerasTuner 라이브러리
Tuner 구성요소는 하이퍼파라미터 조정을 위해 Python KerasTuner API를 광범위하게 사용합니다.
요소
튜너는 다음을 수행합니다.
- tf.훈련 및 평가에 사용되는 예제입니다.
- 모델 정의, 하이퍼파라미터 검색 공간, 목표 등을 포함한 튜닝 로직을 정의하는 사용자 제공 모듈 파일(또는 모듈 fn)입니다.
- train 인수 및 평가 인수의 Protobuf 정의입니다.
- (선택 사항) 튜닝 인수의 Protobuf 정의입니다.
- (선택 사항) 업스트림 변환 구성 요소에서 생성된 변환 그래프입니다.
- (선택 사항) SchemaGen 파이프라인 구성 요소에 의해 생성되고 선택적으로 개발자에 의해 변경되는 데이터 스키마입니다.
Tuner는 주어진 데이터, 모델 및 목표를 사용하여 하이퍼파라미터를 조정하고 최상의 결과를 내보냅니다.
지침
Tuner에는 다음 서명이 있는 사용자 모듈 함수 tuner_fn
이 필요합니다.
...
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.
"""
...
이 함수에서는 모델과 하이퍼파라미터 검색 공간을 모두 정의하고 튜닝을 위한 목표와 알고리즘을 선택합니다. Tuner 구성 요소는 이 모듈 코드를 입력으로 사용하여 하이퍼파라미터를 조정하고 최상의 결과를 내보냅니다.
Trainer는 Tuner의 출력 하이퍼파라미터를 입력으로 가져와 사용자 모듈 코드에서 활용할 수 있습니다. 파이프라인 정의는 다음과 같습니다.
...
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))
...
모델을 재교육할 때마다 하이퍼파라미터를 조정하고 싶지 않을 수도 있습니다. Tuner를 사용하여 적절한 하이퍼파라미터 세트를 결정한 후에는 파이프라인에서 Tuner를 제거하고 ImporterNode
사용하여 이전 교육 실행에서 Tuner 아티팩트를 가져와 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'])
Google Cloud Platform(GCP)에서 조정
Google Cloud Platform(GCP)에서 실행되는 경우 Tuner 구성요소는 다음 두 가지 서비스를 활용할 수 있습니다.
- AI Platform Vizier (CloudTuner 구현을 통해)
- AI Platform Training (분산 튜닝을 위한 무리 관리자)
초매개변수 조정의 백엔드인 AI Platform Vizier
AI Platform Vizier 는 Google Vizier 기술을 기반으로 블랙박스 최적화를 수행하는 관리형 서비스입니다.
CloudTuner는 학습 백엔드로 AI Platform Vizier 서비스와 통신하는 KerasTuner 의 구현입니다. CloudTuner는 keras_tuner.Tuner
의 서브클래스이므로 tuner_fn
모듈에서 즉시 대체품으로 사용할 수 있고 TFX Tuner 구성요소의 일부로 실행할 수 있습니다.
다음은 CloudTuner
사용 방법을 보여주는 코드 조각입니다. CloudTuner
구성하려면 project_id
및 region
과 같은 GCP 관련 항목이 필요합니다.
...
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 분산 작업자 무리에 대한 병렬 조정
Tuner 구성 요소의 기본 구현인 KerasTuner 프레임워크에는 하이퍼파라미터 검색을 병렬로 수행하는 기능이 있습니다. 기본 Tuner 구성요소에는 둘 이상의 검색 작업자를 병렬로 실행할 수 있는 기능이 없지만 Google Cloud AI Platform 확장 Tuner 구성요소를 사용하면 AI Platform Training 작업을 분산 작업자 무리로 사용하여 병렬 조정을 실행하는 기능을 제공합니다. 관리자. TuneArgs는 이 구성 요소에 제공된 구성입니다. 이것은 순정 튜너 구성 요소를 즉시 교체하는 것입니다.
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': ...,
...
}
})
...
확장 Tuner 구성 요소의 동작과 출력은 여러 하이퍼 매개 변수 검색이 여러 작업자 컴퓨터에서 병렬로 실행되고 결과적으로 num_trials
더 빨리 완료된다는 점을 제외하면 기본 Tuner 구성 요소와 동일합니다. 이는 RandomSearch
와 같이 검색 알고리즘이 당황스러울 정도로 병렬화될 때 특히 효과적입니다. 하지만 AI Platform Vizier에 구현된 Google Vizier 알고리즘처럼 검색 알고리즘이 이전 시도 결과의 정보를 사용하는 경우 과도한 병렬 검색은 검색 효율성에 부정적인 영향을 미칠 수 있습니다.
모래밭
자세한 내용은 Tuner API 참조 에서 확인할 수 있습니다.