Tuner TFX Pipeline Component

จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ

คอมโพเนนต์ Tuner จะปรับแต่งไฮเปอร์พารามิเตอร์สำหรับโมเดล

Tuner Component และ KerasTuner Library

องค์ประกอบจูนเนอร์ที่ทำให้การใช้งานที่กว้างขวางของงูหลาม KerasTuner API สำหรับการปรับแต่ง hyperparameters

ส่วนประกอบ

จูนเนอร์ใช้เวลา:

  • tf.ตัวอย่างที่ใช้ในการฝึกอบรมและประเมินผล
  • ผู้ใช้จัดเตรียมไฟล์โมดูล (หรือโมดูล fn) ที่กำหนดตรรกะการปรับแต่ง รวมถึงคำจำกัดความของโมเดล พื้นที่ค้นหาไฮเปอร์พารามิเตอร์ วัตถุประสงค์ ฯลฯ
  • protobuf นิยามของ args รถไฟและ args EVAL
  • (อุปกรณ์เสริม) Protobuf ความหมายของการปรับแต่ง args
  • (ไม่บังคับ) กราฟการแปลงที่สร้างโดยองค์ประกอบการแปลงต้นน้ำ
  • (ไม่บังคับ) สคีมาข้อมูลที่สร้างโดยคอมโพเนนต์ไปป์ไลน์ 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 ใช้โค้ดโมดูลนี้เป็นอินพุต ปรับแต่งไฮเปอร์พารามิเตอร์ และให้ผลลัพธ์ที่ดีที่สุด

ผู้ฝึกสอนสามารถใช้ไฮเปอร์พารามิเตอร์เอาต์พุตของ 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))
...

คุณอาจไม่ต้องการปรับไฮเปอร์พารามิเตอร์ทุกครั้งที่คุณฝึกโมเดลของคุณใหม่ เมื่อคุณได้ใช้จูนเนอร์เพื่อตรวจสอบชุดที่ดีของ hyperparameters คุณสามารถลบจูนเนอร์จากท่อและการใช้งานของคุณ 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 แพลตฟอร์มอัครมหาเสนาบดี เป็นบริการที่มีการจัดการที่มีประสิทธิภาพในการเพิ่มประสิทธิภาพกล่องดำอยู่บนพื้นฐานของ Google อัครมหาเสนาบดี เทคโนโลยี

CloudTuner คือการดำเนินการ KerasTuner ซึ่งพูดในการให้บริการเอไอแพลทฟอร์มอัครมหาเสนาบดีเป็นแบ็กเอนด์การศึกษา ตั้งแต่ CloudTuner เป็น subclass ของ keras_tuner.Tuner ก็สามารถนำมาใช้เป็นดรอปแทนใน tuner_fn โมดูลและดำเนินการเป็นส่วนหนึ่งขององค์ประกอบ TFX จูนเนอร์

ด้านล่างเป็นโค้ดซึ่งแสดงให้เห็นถึงวิธีการใช้ CloudTuner ขอให้สังเกตว่าการกำหนดค่า CloudTuner ต้องการรายการที่มีความเฉพาะเจาะจงกับ GCP เช่น project_id และ region

...
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 ที่เป็นการใช้งานพื้นฐานของคอมโพเนนต์ Tuner มีความสามารถในการค้นหาไฮเปอร์พารามิเตอร์แบบคู่ขนาน ในขณะที่องค์ประกอบหุ้นจูนเนอร์ไม่ได้มีความสามารถในการดำเนินการของผู้ปฏิบัติงานมากกว่าหนึ่งค้นหาในแบบคู่ขนานโดยใช้ องค์ประกอบการขยายจูนเนอร์ Google Cloud AI แพลตฟอร์ม ก็มีความสามารถในการเรียกใช้การปรับแต่งขนานใช้ AI แพลตฟอร์มการฝึกงานเป็นฝูงคนงานกระจาย ผู้จัดการ. TuneArgs คือการกำหนดค่าให้กับส่วนนี้ นี่คือการแทนที่ส่วนประกอบ Tuner ของสต็อกแบบดรอปอิน

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 จะแล้วเสร็จเร็วขึ้น นี้จะมีประสิทธิภาพโดยเฉพาะอย่างยิ่งเมื่ออัลกอริทึมการค้นหาเป็น parallelizable เปิ่นเช่น RandomSearch อย่างไรก็ตาม หากอัลกอริธึมการค้นหาใช้ข้อมูลจากผลการทดลองก่อนหน้านี้ เช่น อัลกอริธึม Google Vizier ที่ใช้ใน AI Platform Vizier การค้นหาแบบคู่ขนานมากเกินไปจะส่งผลเสียต่อประสิทธิภาพของการค้นหา

ตัวอย่าง E2E

E2E CloudTuner บนตัวอย่าง GCP

กวดวิชา KerasTuner

กวดวิชา CloudTuner

ข้อเสนอ

รายละเอียดเพิ่มเติมที่มีอยู่ใน การอ้างอิง API จูนเนอร์