مكون خط أنابيب Tuner TFX

يقوم مكون Tuner بضبط المعلمات الفائقة للنموذج.

مكون الموالف ومكتبة KerasTuner

يستخدم مكون Tuner واجهة برمجة التطبيقات Python KerasTuner على نطاق واسع لضبط المعلمات الفائقة.

عنصر

موالف يأخذ:

  • tf.الأمثلة المستخدمة للتدريب والتقييم.
  • يقدم المستخدم ملف الوحدة النمطية (أو الوحدة النمطية fn) الذي يحدد منطق الضبط، بما في ذلك تعريف النموذج ومساحة بحث المعلمة التشعبية والهدف وما إلى ذلك.
  • تعريف Protobuf لوسائط القطار ووسائط التقييم.
  • (اختياري) تعريف Protobuf لضبط الوسائط.
  • (اختياري) الرسم البياني للتحويل الناتج عن مكون التحويل الأولي.
  • (اختياري) مخطط بيانات تم إنشاؤه بواسطة مكون خط أنابيب 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))
...

قد لا ترغب في ضبط المعلمات الفائقة في كل مرة تقوم فيها بإعادة تدريب النموذج الخاص بك. بمجرد استخدام Tuner لتحديد مجموعة جيدة من المعلمات الفائقة، يمكنك إزالة Tuner من المسار الخاص بك واستخدام ImporterNode لاستيراد عنصر Tuner من عملية تدريب سابقة لتغذية المدرب.

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)، يمكن لمكون Tuner الاستفادة من خدمتين:

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 على قطيع العمال الموزع

يتمتع إطار عمل KerasTuner باعتباره التطبيق الأساسي لمكون Tuner بالقدرة على إجراء بحث عن المعلمات الفائقة بالتوازي. على الرغم من أن مكون Tuner الخاص بالمخزون ليس لديه القدرة على تنفيذ أكثر من عامل بحث بالتوازي، فإنه باستخدام مكون Tuner ملحق Google Cloud AI Platform ، فإنه يوفر القدرة على تشغيل الضبط المتوازي، باستخدام وظيفة تدريب منصة 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': ...,
                ...
            }
    })
...

إن سلوك وإخراج مكون Tuner الملحق هو نفس مكون Tuner الخاص بالمخزون، فيما عدا أنه يتم تنفيذ عمليات بحث متعددة للمعلمات الفائقة بالتوازي على أجهزة عاملة مختلفة، ونتيجة لذلك، سيتم إكمال num_trials بشكل أسرع. يكون هذا فعالًا بشكل خاص عندما تكون خوارزمية البحث قابلة للتوازي بشكل محرج، مثل RandomSearch . ومع ذلك، إذا كانت خوارزمية البحث تستخدم معلومات من نتائج التجارب السابقة، مثل خوارزمية Google Vizier المطبقة في منصة Vizier للذكاء الاصطناعي، فإن البحث المتوازي بشكل مفرط سيؤثر سلبًا على فعالية البحث.

مثال E2E

E2E CloudTuner على مثال GCP

البرنامج التعليمي KerasTuner

البرنامج التعليمي CloudTuner

عرض

تتوفر المزيد من التفاصيل في مرجع Tuner API .