ML 커뮤니티 데이는 11월 9일입니다! TensorFlow, JAX에서 업데이트를 우리와 함께, 더 자세히 알아보기

튜너 TFX 파이프라인 구성 요소

Tuner 구성 요소는 모델의 하이퍼파라미터를 조정합니다.

튜너 구성 요소 및 KerasTuner 라이브러리

튜너의 구성 요소는 파이썬의 광범위한 사용하게 KerasTuner의 튜닝 하이퍼 파라미터에 대한 API를.

요소

튜너 소요:

  • 훈련 및 평가에 사용되는 tf.Examples.
  • 모델 정의, 하이퍼파라미터 검색 공간, 목표 등을 포함하여 조정 논리를 정의하는 사용자 제공 모듈 파일(또는 모듈 fn)입니다.
  • Protobuf 기차 인수 및 평가 인수의 정의.
  • (선택 사항) Protobuf 튜닝 인수의 정의.
  • (선택 사항) 업스트림 Transform 구성 요소에서 생성된 변환 그래프.
  • (선택 사항) SchemaGen 파이프라인 구성 요소에 의해 생성되고 개발자가 선택적으로 변경한 데이터 스키마입니다.

주어진 데이터, 모델 및 목표를 사용하여 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))
...

모델을 재학습할 때마다 초매개변수를 조정하고 싶지 않을 수 있습니다. 당신이 하이퍼 파라미터의 좋은 세트를 결정하는 튜너를 사용하면, 당신은 당신의 파이프 라인 및 사용에서 튜너를 제거 할 수 있습니다 ImporterNode 트레이너로 피드에 실행 이전 훈련에서 튜너 이슈를 가져올 수 있습니다.

hparams_importer = ImporterNode(
    instance_name='import_hparams',
    # 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)

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

AI 플랫폼 고관은 에 기초, 블랙 박스 최적화를 수행하는 관리 서비스 인 구글 고관의 기술.

CloudTuner는 의 구현입니다 KerasTuner 연구 백엔드로 AI 플랫폼 고관 서비스를 말한다. CloudTuner는 서브 클래스이므로 keras_tuner.Tuner , 그것은 드롭에서의 대체로서 사용할 수있다 tuner_fn 모듈 및 TFX 튜너 컴포넌트의 일부로서 실행한다.

다음은 쇼하는 방법을 사용하는 코드입니다 CloudTuner . 의 구성을 알 수 있습니다 CloudTuner 같은 같은 GCP에 특정 항목이 필요 project_idregion .

...
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 분산 작업자 무리에 대한 병렬 조정

튜너 구성 요소의 기본 구현인 KerasTuner 프레임워크는 하이퍼파라미터 검색을 병렬로 수행할 수 있습니다. 주식 튜너의 구성 요소가 사용하여 병렬로 하나 명 이상의 검색 노동자를 수행 할 수있는 능력이없는 동안 Google 클라우드 AI 플랫폼 확장 튜너 구성 요소를 ,이 분산 작업자 무리와 같은 AI 플랫폼 교육 작업을 사용하여 병렬 튜닝을 실행할 수있는 기능을 제공합니다 관리자. 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': ...,
                ...
            }
    })
...

동작과 확장 튜너 컴포넌트의 출력은 여러 hyperparameter 검색 다른 작업자의 컴퓨터에서 병렬로 실행되는 것을 제외하고는 스톡 튜너 컴포넌트와 동일하며, 결과적으로 num_trials 빨리 완료한다. 탐색 알고리즘과 같은, 황당 병렬 인 경우에 특히 효과적이다 RandomSearch . 그러나 검색 알고리즘이 AI Platform Vizier에 구현된 Google Vizier 알고리즘과 같이 이전 시도 결과의 정보를 사용하는 경우 과도한 병렬 검색은 검색 효율성에 부정적인 영향을 미칩니다.

E2E 예

GCP의 E2E CloudTuner 예

케라스튜너 튜토리얼

CloudTuner 튜토리얼

제안

자세한 내용은에서 사용할 수있는 튜너 API 참조 .