Thành phần đường ống Tuner TFX

Thành phần Tuner điều chỉnh các siêu tham số cho mô hình.

Thành phần Tuner và Thư viện KerasTuner

Thành phần Tuner sử dụng rộng rãi API Python KerasTuner để điều chỉnh siêu tham số.

Thành phần

Bộ điều chỉnh mất:

  • tf.Examples được sử dụng để đào tạo và đánh giá.
  • Tệp mô-đun do người dùng cung cấp (hoặc mô-đun fn) xác định logic điều chỉnh, bao gồm định nghĩa mô hình, không gian tìm kiếm siêu tham số, mục tiêu, v.v.
  • Định nghĩa Protobuf của train args và eval args.
  • (Tùy chọn) Định nghĩa Protobuf của đối số điều chỉnh.
  • (Tùy chọn) biểu đồ biến đổi được tạo bởi thành phần Biến đổi ngược dòng.
  • (Tùy chọn) Lược đồ dữ liệu được tạo bởi thành phần đường dẫn SchemaGen và được nhà phát triển thay đổi tùy ý.

Với dữ liệu, mô hình và mục tiêu nhất định, Tuner điều chỉnh các siêu tham số và đưa ra kết quả tốt nhất.

Hướng dẫn

Cần có chức năng mô-đun người dùng tuner_fn có chữ ký sau cho 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.
  """
  ...

Trong hàm này, bạn xác định cả không gian tìm kiếm mô hình và siêu tham số, đồng thời chọn mục tiêu và thuật toán để điều chỉnh. Thành phần Tuner lấy mã mô-đun này làm đầu vào, điều chỉnh các siêu tham số và đưa ra kết quả tốt nhất.

Người đào tạo có thể lấy siêu tham số đầu ra của Tuner làm đầu vào và sử dụng chúng trong mã mô-đun người dùng. Định nghĩa đường ống trông như thế này:

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

Bạn có thể không muốn điều chỉnh các siêu tham số mỗi khi đào tạo lại mô hình của mình. Sau khi sử dụng Tuner để xác định một tập hợp siêu tham số tốt, bạn có thể xóa Tuner khỏi quy trình của mình và sử dụng ImporterNode để nhập cấu phần mềm Tuner từ lần chạy đào tạo trước đó để cung cấp cho 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'])

Điều chỉnh trên Google Cloud Platform (GCP)

Khi chạy trên Google Cloud Platform (GCP), thành phần Tuner có thể tận dụng hai dịch vụ:

AI Platform Vizier là phần phụ trợ của việc điều chỉnh siêu tham số

AI Platform Vizier là một dịch vụ được quản lý thực hiện tối ưu hóa hộp đen, dựa trên công nghệ Google Vizier .

CloudTuner là một triển khai KerasTuner kết nối với dịch vụ AI Platform Vizier làm chương trình phụ trợ nghiên cứu. Vì CloudTuner là một lớp con của keras_tuner.Tuner nên nó có thể được sử dụng như một sự thay thế tùy ý trong mô-đun tuner_fn và thực thi như một phần của thành phần TFX Tuner.

Dưới đây là đoạn mã hướng dẫn cách sử dụng CloudTuner . Lưu ý rằng cấu hình CloudTuner yêu cầu các mục dành riêng cho GCP, chẳng hạn như 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={...}
  )

Điều chỉnh song song trên nhóm công nhân phân tán Đào tạo nền tảng AI trên nền tảng đám mây

Khung KerasTuner với tư cách là triển khai cơ bản của thành phần Tuner có khả năng tiến hành tìm kiếm siêu tham số song song. Mặc dù thành phần Tuner gốc không có khả năng thực thi song song nhiều nhân viên tìm kiếm, nhưng bằng cách sử dụng thành phần Tuner mở rộng Google Cloud AI Platform , nó cung cấp khả năng chạy điều chỉnh song song, sử dụng Công việc đào tạo nền tảng AI như một nhóm công nhân phân tán giám đốc. TuneArgs là cấu hình được cung cấp cho thành phần này. Đây là sản phẩm thay thế sẵn có của thành phần Tuner có sẵn.

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

Hoạt động và đầu ra của thành phần Tuner mở rộng giống như thành phần Tuner gốc, ngoại trừ việc nhiều tìm kiếm siêu tham số được thực hiện song song trên các máy công nhân khác nhau và do đó, num_trials sẽ được hoàn thành nhanh hơn. Điều này đặc biệt hiệu quả khi thuật toán tìm kiếm có thể song song hóa một cách đáng xấu hổ, chẳng hạn như RandomSearch . Tuy nhiên, nếu thuật toán tìm kiếm sử dụng thông tin từ kết quả của các thử nghiệm trước đó, chẳng hạn như thuật toán Google Vizier được triển khai trong AI Platform Vizier, thì việc tìm kiếm song song quá mức sẽ ảnh hưởng tiêu cực đến hiệu quả của tìm kiếm.

Ví dụ về E2E

Ví dụ về E2E CloudTuner trên GCP

Hướng dẫn KerasTuner

Hướng dẫn về CloudTuner

Đề xuất

Thông tin chi tiết hơn có sẵn trong phần tham khảo API Tuner .