רכיב צינור טיונר TFX

רכיב Tuner מכוון את היפר -פרמטרים לדגם.

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

המרכיב טיונר עושה שימוש נרחב של פיתון KerasTuner API עבור hyperparameters כוונון.

רְכִיב

מקלט לוקח:

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

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

הוראות

פונקצית מודול המשתמש 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 (GCP)

בעת הפעלה על פלטפורמת הענן של Google (GCP), רכיב Tuner יכול לנצל שני שירותים:

AI Platform Vizier כתומך תומך בכוונון היפר -פרמטר

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

CloudTuner מהווה יישום של KerasTuner המדבר לשירות וזיר פלטפורמת AI כמו backend המחקר. מאז CloudTuner היא תת מחלקה של 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={...}
  )

כוונון מקביל על ענן AI AI Platform המפיץ עדר עובדים

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

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

E2E דוגמה

E2E CloudTuner בדוגמה של GCP

הדרכת KerasTuner

הדרכת CloudTuner

הצעה

פרטים נוספים זמינים פניית API טיונר .