רכיב הטיונר TFX Pipeline

רכיב הטיונר מכוון את ההיפרפרמטרים עבור הדגם.

רכיב טיונר וספריית KerasTuner

רכיב הטיונר עושה שימוש נרחב ב- Python KerasTuner API עבור כוונון היפרפרמטרים.

רְכִיב

הטיונר לוקח:

  • tf.דוגמאות המשמשות לאימון והערכה.
  • קובץ מודול שסופק על ידי המשתמש (או מודול fn) המגדיר את היגיון הכוונון, כולל הגדרת מודל, מרחב חיפוש היפרפרמטר, מטרה וכו'.
  • הגדרת פרוטובוף של ארג'ים רכבת וארג'ים eval.
  • (אופציונלי) הגדרת Protobuf של tuning args.
  • (אופציונלי) גרף טרנספורמציה המופק על ידי רכיב טרנספורמציה במעלה הזרם.
  • (אופציונלי) סכימת נתונים שנוצרה על ידי רכיב SchemaGen צינור ושונתה באופן אופציונלי על ידי המפתח.

עם הנתונים, המודל והמטרה הנתונים, Tuner מכוון את הפרמטרים ההיפר ופולט את התוצאה הטובה ביותר.

הוראות

נדרשת פונקציית מודול משתמש tuner_fn עם החתימה הבאה עבור 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.
  """
  ...

בפונקציה זו, אתה מגדיר גם את מרחבי החיפוש של המודל וגם ההיפרפרמטרים, ובוחר את המטרה והאלגוריתם לכוונון. רכיב הטיונר לוקח את קוד המודול הזה כקלט, מכוון את הפרמטרים ההיפר, ופולט את התוצאה הטובה ביותר.

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 = 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'])

כוונון ב-Google Cloud Platform (GCP)

כאשר פועל ב-Google Cloud Platform (GCP), רכיב הטיונר יכול לנצל שני שירותים:

AI Platform Vizier כקצה האחורי של כוונון היפרפרמטרים

AI Platform Vizier הוא שירות מנוהל המבצע אופטימיזציה של קופסה שחורה, המבוסס על טכנולוגיית Google Vizier .

CloudTuner הוא יישום של KerasTuner שמדבר עם שירות AI Platform Vizier בתור הקצה העורפי של המחקר. מכיוון ש-CloudTuner הוא תת-מחלקה של keras_tuner.Tuner , ניתן להשתמש בו כתחליף נפתח במודול tuner_fn , ולהפעיל אותו כחלק מרכיב ה-TFX Tuner.

להלן קטע קוד שמראה כיצד להשתמש 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 Platform הרחבת Tuner , הוא מספק את היכולת להפעיל כוונון מקביל, תוך שימוש ב-AI Platform Training Job בתור להקת עובדים מבוזרת מְנַהֵל. 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': ...,
                ...
            }
    })
...

ההתנהגות והפלט של רכיב ה-Tuner של ההרחבה זהים לרכיב ה-Tuner של המניות, אלא שחיפושי היפרפרמטרים מרובים מתבצעים במקביל במכונות עבודה שונות, וכתוצאה מכך, ה- num_trials יושלמו מהר יותר. זה יעיל במיוחד כאשר אלגוריתם החיפוש ניתן להקביל בצורה מביכה, כגון RandomSearch . עם זאת, אם אלגוריתם החיפוש משתמש במידע מתוצאות של ניסויים קודמים, כמו אלגוריתם Google Vizier המיושם בפלטפורמת AI Vizier, חיפוש מקביל מדי ישפיע לרעה על יעילות החיפוש.

E2E דוגמה

E2E CloudTuner ב-GCP דוגמה

הדרכה של KerasTuner

הדרכה של CloudTuner

הַצָעָה

פרטים נוספים זמינים בהפניה ל-Tuner API .