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

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

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 các siêu tham số.

Thành phần

Tuner mất:

  • tf. Các 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 về args train và eval args.
  • (Tùy chọn) Định nghĩa Protobuf về vòng điều chỉnh.
  • (Tùy chọn) đồ thị biến đổi do thành phần Biến đổi ngược dòng tạo ra.
  • (Tùy chọn) Một 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 chọn.

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à tạo ra kết quả tốt nhất.

Hướng dẫn

Cần có hàm mô-đun người dùng tuner_fn với 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 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 các siêu tham số và phát ra kết quả tốt nhất.

Người huấn luyện có thể lấy các 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 nó. Định nghĩa đường ống trông giống như sau:

...
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. Khi bạn đã 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 đường dẫn của mình và sử dụng ImporterNode để nhập cấu phần Tuner từ lần chạy huấn luyện trước đó để cung cấp cho Huấn luyện viê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ụ trợ của điều chỉnh siêu thông số

Nền tảng AI 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ệ Vizier của Google .

CloudTuner là một triển khai của KerasTuner nói chuyện với dịch vụ AI Platform Vizier như một chương trình phụ trợ nghiên cứu. Vì CloudTuner là một lớp con của keras_tuner.Tuner , nó có thể được sử dụng như một phần thay thế 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ã hiển thị 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 nhóm nhân viên phân tán

Khung KerasTuner như là phần triển khai cơ bản của thành phần Tuner có khả năng thực hiện tìm kiếm siêu tham số song song. Mặc dù thành phần Bộ điều chỉnh cổ phiếu không có khả năng thực thi nhiều nhân viên tìm kiếm song song, bằng cách sử dụng thành phần Bộ điều chỉnh mở rộng Nền tảng AI của Google Cloud , 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 nhân viên phân tán người quản lý. TuneArgs là cấu hình được cấp cho thành phần này. Đây là sự thay thế thả xuống 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': ...,
                ...
            }
    })
...

Hành vi và đầu ra của thành phần Tuner mở rộng cũng giống như thành phần Bộ điều chỉnh cổ phiếu, 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à kết quả là các 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 mà Vizier thực hiện, 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

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

Hướng dẫn KerasTuner

Hướng dẫn về CloudTuner

Đề nghị

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