يضبط مكون الموالف المعلمات الفائقة للنموذج.
مكون الموالف ومكتبة KerasTuner
يستخدم مكون الموالف استخدامًا مكثفًا لواجهة برمجة تطبيقات Python KerasTuner لضبط المعلمات الفائقة.
عنصر
يأخذ الموالف:
- tf أمثلة مستخدمة للتدريب والتقييم.
- ملف الوحدة النمطية التي قدمها المستخدم (أو الوحدة النمطية fn) التي تحدد منطق الضبط ، بما في ذلك تعريف النموذج ، ومساحة البحث عن المعلمات الفائقة ، والهدف وما إلى ذلك.
- تعريف Protobuf لـ Train args و EVAL args.
- (اختياري) تعريف 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(
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
لاستيراد عنصر الموالف من دورة تدريبية سابقة للتغذية إلى Trainer.
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 للصدر (عبر تطبيق CloudTuner)
- تدريب منصة الذكاء الاصطناعي (كمدير قطيع للضبط الموزع)
منصة AI 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 باعتباره التطبيق الأساسي لمكون الموالف لديه القدرة على إجراء بحث عن المعلمات الفائقة بالتوازي. على الرغم من أن مكون موالف الأسهم ليس لديه القدرة على تنفيذ أكثر من عامل بحث واحد بشكل متوازٍ ، باستخدام مكون Google Cloud AI Platform extension Tuner ، فإنه يوفر القدرة على تشغيل الضبط المتوازي ، باستخدام وظيفة تدريب منصة 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': ...,
...
}
})
...
سلوك وإخراج مكون موالف الامتداد هو نفسه مكون موالف المخزون ، باستثناء أنه يتم تنفيذ العديد من عمليات البحث عن المعلمات الفائقة بالتوازي على أجهزة عاملة مختلفة ، ونتيجة لذلك ، سيتم إكمال num_trials
بشكل أسرع. هذا فعال بشكل خاص عندما تكون خوارزمية البحث متوازنة بشكل محرج ، مثل RandomSearch
. ومع ذلك ، إذا كانت خوارزمية البحث تستخدم معلومات من نتائج التجارب السابقة ، مثل خوارزمية Google Vizier المطبقة في AI Platform Vizier ، فإن البحث الموازي المفرط سيؤثر سلبًا على فعالية البحث.
الروابط
تتوفر المزيد من التفاصيل في مرجع Tuner API .