ट्यूनर टीएफएक्स पाइपलाइन घटक

ट्यूनर घटक मॉडल के लिए हाइपरपैरामीटर को ट्यून करता है।

ट्यूनर कंपोनेंट और केराट्यूनर लाइब्रेरी

ट्यूनर घटक हाइपरपैरामीटर ट्यूनिंग के लिए पायथन केराट्यूनर एपीआई का व्यापक उपयोग करता है।

अवयव

ट्यूनर लेता है:

  • tf.प्रशिक्षण और मूल्यांकन के लिए प्रयुक्त उदाहरण।
  • एक उपयोगकर्ता ने मॉड्यूल फ़ाइल (या मॉड्यूल एफएन) प्रदान की है जो ट्यूनिंग तर्क को परिभाषित करती है, जिसमें मॉडल परिभाषा, हाइपरपैरामीटर खोज स्थान, उद्देश्य आदि शामिल हैं।
  • ट्रेन आर्ग्स और इवल आर्ग्स की प्रोटोबफ परिभाषा।
  • (वैकल्पिक) ट्यूनिंग आर्ग्स की प्रोटोबफ़ परिभाषा।
  • (वैकल्पिक) अपस्ट्रीम ट्रांसफ़ॉर्म घटक द्वारा निर्मित ट्रांसफ़ॉर्म ग्राफ़।
  • (वैकल्पिक) स्कीमजेन पाइपलाइन घटक द्वारा बनाया गया एक डेटा स्कीमा और डेवलपर द्वारा वैकल्पिक रूप से बदला गया।

दिए गए डेटा, मॉडल और उद्देश्य के साथ, ट्यूनर हाइपरपैरामीटर को ट्यून करता है और सर्वोत्तम परिणाम देता है।

निर्देश

ट्यूनर के लिए निम्नलिखित हस्ताक्षर वाला एक उपयोगकर्ता मॉड्यूल फ़ंक्शन 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(
    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 क्लाउड प्लेटफ़ॉर्म (GCP) पर ट्यूनिंग

Google क्लाउड प्लेटफ़ॉर्म (GCP) पर चलते समय, ट्यूनर घटक दो सेवाओं का लाभ उठा सकता है:

हाइपरपैरामीटर ट्यूनिंग के बैकएंड के रूप में एआई प्लेटफ़ॉर्म विज़ियर

एआई प्लेटफ़ॉर्म विज़ियर एक प्रबंधित सेवा है जो Google विज़ियर तकनीक पर आधारित ब्लैक बॉक्स अनुकूलन करती है।

CloudTuner KerasTuner का कार्यान्वयन है जो अध्ययन बैकएंड के रूप में AI प्लेटफ़ॉर्म विज़ियर सेवा से बात करता है। चूँकि 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={...}
  )

क्लाउड एआई प्लेटफ़ॉर्म प्रशिक्षण पर समानांतर ट्यूनिंग वितरित कार्यकर्ता झुंड

ट्यूनर घटक के अंतर्निहित कार्यान्वयन के रूप में केराट्यूनर ढांचे में समानांतर में हाइपरपैरामीटर खोज करने की क्षमता है। जबकि स्टॉक ट्यूनर घटक में Google क्लाउड एआई प्लेटफ़ॉर्म एक्सटेंशन ट्यूनर घटक का उपयोग करके समानांतर में एक से अधिक खोज कार्यकर्ता को निष्पादित करने की क्षमता नहीं है, यह एक वितरित कार्यकर्ता झुंड के रूप में एआई प्लेटफ़ॉर्म ट्रेनिंग जॉब का उपयोग करके समानांतर ट्यूनिंग चलाने की क्षमता प्रदान करता है। प्रबंधक। 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': ...,
                ...
            }
    })
...

एक्सटेंशन ट्यूनर घटक का व्यवहार और आउटपुट स्टॉक ट्यूनर घटक के समान है, सिवाय इसके कि कई हाइपरपैरामीटर खोजों को विभिन्न कार्यकर्ता मशीनों पर समानांतर में निष्पादित किया जाता है, और परिणामस्वरूप, num_trials तेजी से पूरा हो जाएगा। यह विशेष रूप से तब प्रभावी होता है जब खोज एल्गोरिदम शर्मनाक रूप से समानांतर होता है, जैसे कि RandomSearch । हालाँकि, यदि खोज एल्गोरिदम पूर्व परीक्षणों के परिणामों से जानकारी का उपयोग करता है, जैसे कि एआई प्लेटफ़ॉर्म विज़ियर में कार्यान्वित Google विज़ियर एल्गोरिदम करता है, तो अत्यधिक समानांतर खोज खोज की प्रभावकारिता को नकारात्मक रूप से प्रभावित करेगी।

E2E उदाहरण

GCP उदाहरण पर E2E CloudTuner

केराट्यूनर ट्यूटोरियल

क्लाउडट्यूनर ट्यूटोरियल

प्रस्ताव

अधिक विवरण ट्यूनर एपीआई संदर्भ में उपलब्ध हैं।