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

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 KerasTuner của Python để điều chỉnh siêu đường kính.

Thành phần

Bộ thu sóng mất:

  • tf.Ví dụ đượ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.
  • Protobuf định nghĩa các đối số đào tạo và đối số eval.
  • (Tùy chọn) Định nghĩa protobuf của các đố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 ống SchemaGen và được nhà phát triển tùy ý thay đổi.

Với dữ liệu, mô hình và mục tiêu đã cho, 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

Chức năng mô-đun người dùng tuner_fn với chữ ký sau là bắt buộc đối với 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 chức năng 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 siêu tham số và đưa ra kết quả tốt nhất.

Huấn luyện viên 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 của mình. Đị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 bạn đào tạo lại mô hình của mình. Sau khi bạn đã sử dụng Bộ điều chỉnh để xác định một bộ siêu tham số tốt, bạn có thể xóa Bộ điều chỉnh khỏi quy trình của mình và sử dụng ImporterNode để nhập phần mềm Bộ điều chỉnh từ lần đào tạo trước đó để cung cấp cho Người huấn luyện.

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ụ:

Nền tảng AI Vizier là phần phụ trợ của đ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 của KerasTuner nói chuyện với dịch vụ AI Platform Vizier dưới dạng 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ế thả vào 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ã cho biết cách sử dụng CloudTuner . Lưu ý rằng cấu hình cho 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 nền tảng Cloud AI Đào tạo đàn công nhân phân tán

Khung KerasTuner 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 Stock Tuner không có khả năng thực thi song song nhiều hơn một nhân viên tìm kiếm, nhưng bằng cách sử dụng thành phần Tiện ích 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 dưới dạng một nhóm nhân viê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ự thay thế thả vào của thành phần Tuner gốc.

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 worker khác nhau và kết quả là 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 Nền tảng AI Vizier, thì một 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

E2E CloudTuner trên GCP Ví dụ

Hướng dẫn KerasTuner

Hướng dẫn CloudTuner

Đề xuất

Thông tin chi tiết có sẵn trong tài liệu tham khảo Tuner API .