ترجمت واجهة Cloud Translation API‏ هذه الصفحة.
Switch to English

TensorFlow 2.x في TFX

تم إصدار TensorFlow 2.0 في عام 2019 ، مع تكامل ضيق بين Keras ، وتنفيذ حريص افتراضيًا ، وتنفيذ وظائف Pythonic ، من بين الميزات والتحسينات الجديدة الأخرى.

يقدم هذا الدليل نظرة عامة فنية شاملة عن TF 2.x في TFX.

الإصدار الذي سيتم استخدامه؟

تتوافق TFX مع TensorFlow 2.x ، وتستمر واجهات برمجة التطبيقات عالية المستوى التي كانت موجودة في TensorFlow 1.x (خاصة المقدرين) في العمل.

بدء مشاريع جديدة في TensorFlow 2.x

نظرًا لأن TensorFlow 2.x يحتفظ بالقدرات عالية المستوى لـ TensorFlow 1.x ، فلا توجد ميزة لاستخدام الإصدار الأقدم في المشاريع الجديدة ، حتى إذا كنت لا تخطط لاستخدام الميزات الجديدة.

لذلك ، إذا كنت تبدأ مشروع TFX جديدًا ، نوصي باستخدام TensorFlow 2.x. قد ترغب في تحديث التعليمات البرمجية الخاصة بك في وقت لاحق عندما يتوفر الدعم الكامل لـ Keras والميزات الجديدة الأخرى ، وسيكون نطاق التغييرات أكثر محدودية إذا بدأت باستخدام TensorFlow 2.x ، بدلاً من محاولة الترقية من TensorFlow 1.x في المستقبل.

تحويل المشاريع الموجودة إلى TensorFlow 2.x

الرمز المكتوب لـ TensorFlow 1.x متوافق إلى حد كبير مع TensorFlow 2.x وسيستمر في العمل في TFX.

ومع ذلك ، إذا كنت ترغب في الاستفادة من التحسينات والميزات الجديدة عندما تصبح متاحة في TF 2.x ، يمكنك اتباع الإرشادات الخاصة بالترحيل إلى TF 2.x.

مقدر

تم الاحتفاظ بواجهة برمجة التطبيقات التقديرية في TensorFlow 2.x ، ولكنها ليست محور الميزات الجديدة والتطوير. التعليمات البرمجية المكتوبة في TensorFlow 1.x أو 2.x باستخدام المُقدِّرين ستستمر في العمل كما هو متوقع في TFX.

فيما يلي مثال TFX من طرف إلى طرف باستخدام مقدر خالص: مثال تاكسي (مقدر)

Keras مع model_to_estimator

يمكن لف tf.keras.estimator.model_to_estimator بوظيفة tf.keras.estimator.model_to_estimator ، والتي تتيح لهم العمل كما لو كانوا مقدرين. لاستخدام هذا:

  1. قم ببناء نموذج Keras.
  2. قم بتمرير النموذج model_to_estimator إلى model_to_estimator .
  3. استخدم نتيجة model_to_estimator في Trainer ، بالطريقة التي تستخدم بها عادةً المُقدِّر.
 # Build a Keras model.
def _keras_model_builder():
  """Creates a Keras model."""
  ...

  model = tf.keras.Model(inputs=inputs, outputs=output)
  model.compile()

  return model


# Write a typical trainer function
def trainer_fn(trainer_fn_args, schema):
  """Build the estimator, using model_to_estimator."""
  ...

  # Model to estimator
  estimator = tf.keras.estimator.model_to_estimator(
      keras_model=_keras_model_builder(), config=run_config)

  return {
      'estimator': estimator,
      ...
  }
 

بخلاف ملف وحدة المستخدم الخاص بـ Trainer ، يظل خط الأنابيب المتبقي دون تغيير. فيما يلي مثال TFX من طرف إلى طرف باستخدام Keras مع model_to_estimator: مثال Iris (model_to_estimator)

Keras الأصلية (أي Keras بدون model_to_estimator )

أمثلة و Colab

فيما يلي عدة أمثلة مع Keras الأصلي:

لدينا أيضًا Keras Colab لكل مكون.

مكونات TFX

توضح الأقسام التالية كيف تدعم مكونات TFX ذات الصلة Keras الأصلية.

تحول

لدى Transform حاليًا دعم تجريبي لنماذج Keras.

يمكن استخدام مكون التحويل نفسه لـ Keras الأصلية دون تغيير. يبقى تعريف preprocessing_fn كما هو ، باستخدام TensorFlow و tf.Transform ops.

يتم تغيير وظيفة التقديم ووظيفة التقييم لكراس الأصلية. سيتم مناقشة التفاصيل في قسمي المدرب والمقيم التاليين.

مدرب

لتكوين Keras الأصلي ، يحتاج GenericExecutor إلى تعيين مكون Trainer ليحل محل المنفذ الافتراضي المستند إلى المُقدر. لمزيد من التفاصيل ، يرجى التحقق هنا .

ملف وحدة Keras مع التحويل

يجب أن يحتوي ملف وحدة التدريب على run_fn الذي سيتم استدعاؤه من قبل GenericExecutor ، سيبدو run_fn run_fn النموذجي كما يلي:

 def run_fn(fn_args: TrainerFnArgs):
  """Train the model based on given args.

  Args:
    fn_args: Holds args used to train the model as name/value pairs.
  """
  tf_transform_output = tft.TFTransformOutput(fn_args.transform_output)

  # Train and eval files contains transformed examples.
  # _input_fn read dataset based on transformed feature_spec from tft.
  train_dataset = _input_fn(fn_args.train_files, tf_transform_output, 40)
  eval_dataset = _input_fn(fn_args.eval_files, tf_transform_output, 40)

  model = _build_keras_model()

  model.fit(
      train_dataset,
      steps_per_epoch=fn_args.train_steps,
      validation_data=eval_dataset,
      validation_steps=fn_args.eval_steps)

  signatures = {
      'serving_default':
          _get_serve_tf_examples_fn(model,
                                    tf_transform_output).get_concrete_function(
                                        tf.TensorSpec(
                                            shape=[None],
                                            dtype=tf.string,
                                            name='examples')),
  }
  model.save(fn_args.serving_model_dir, save_format='tf', signatures=signatures)
 

في run_fn أعلاه ، يلزم توقيع العرض عند تصدير النموذج المدرب بحيث يمكن لهذا النموذج أن يأخذ أمثلة أولية للتنبؤ. تبدو وظيفة العرض النموذجية كما يلي:

 def _get_serve_tf_examples_fn(model, tf_transform_output):
  """Returns a function that parses a serialized tf.Example."""

  # the layer is added as an attribute to the model in order to make sure that
  # the model assets are handled correctly when exporting.
  model.tft_layer = tf_transform_output.transform_features_layer()

  @tf.function
  def serve_tf_examples_fn(serialized_tf_examples):
    """Returns the output to be used in the serving signature."""
    feature_spec = tf_transform_output.raw_feature_spec()
    feature_spec.pop(_LABEL_KEY)
    parsed_features = tf.io.parse_example(serialized_tf_examples, feature_spec)

    transformed_features = model.tft_layer(parsed_features)

    return model(transformed_features)

  return serve_tf_examples_fn
 

في وظيفة العرض أعلاه ، يجب تطبيق تحويلات التحويل tf على البيانات الأولية للاستدلال ، باستخدام طبقة tft.TransformFeaturesLayer . السابق _serving_input_receiver_fn لن تكون هناك حاجة الذي كان مطلوبا لالمقدرون مع Keras.

ملف وحدة Keras بدون تحويل

هذا مشابه لملف الوحدة النمطية الموضح أعلاه ، ولكن بدون التحويلات:

 def _get_serve_tf_examples_fn(model, schema):

  @tf.function
  def serve_tf_examples_fn(serialized_tf_examples):
    feature_spec = _get_raw_feature_spec(schema)
    feature_spec.pop(_LABEL_KEY)
    parsed_features = tf.io.parse_example(serialized_tf_examples, feature_spec)
    return model(parsed_features)

  return serve_tf_examples_fn


def run_fn(fn_args: TrainerFnArgs):
  schema = io_utils.parse_pbtxt_file(fn_args.schema_file, schema_pb2.Schema())

  # Train and eval files contains raw examples.
  # _input_fn reads the dataset based on raw feature_spec from schema.
  train_dataset = _input_fn(fn_args.train_files, schema, 40)
  eval_dataset = _input_fn(fn_args.eval_files, schema, 40)

  model = _build_keras_model()

  model.fit(
      train_dataset,
      steps_per_epoch=fn_args.train_steps,
      validation_data=eval_dataset,
      validation_steps=fn_args.eval_steps)

  signatures = {
      'serving_default':
          _get_serve_tf_examples_fn(model, schema).get_concrete_function(
              tf.TensorSpec(shape=[None], dtype=tf.string, name='examples')),
  }
  model.save(fn_args.serving_model_dir, save_format='tf', signatures=signatures)
 
استراتيجية التوزيع

في الوقت الحالي ، يدعم TFX فقط استراتيجيات العامل الواحد (على سبيل المثال ، MirroredStrategy ، OneDeviceStr Strategy ).

لاستخدام استراتيجية توزيع ، قم بإنشاء استراتيجية tf.distribute.Strit مناسبة وتحريك إنشاء وتجميع نموذج Keras داخل نطاق الإستراتيجية.

على سبيل المثال ، model = _build_keras_model() أعلاه model = _build_keras_model() بـ:

   mirrored_strategy = tf.distribute.MirroredStrategy()
  with mirrored_strategy.scope():
    model = _build_keras_model()

  # Rest of the code can be unchanged.
  model.fit(...)
 

للتحقق من الجهاز (CPU / GPU) الذي تستخدمه MirroredStrategy ، قم بتمكين تسجيل tensorflow لمستوى المعلومات:

 import logging
logging.getLogger("tensorflow").setLevel(logging.INFO)
 

ويجب أن تكون قادرًا على رؤية Using MirroredStrategy with devices (...) في السجل.

مقيم

في TFMA v0.2x ، تم دمج ModelValidator والمقيم في مكون مقيِّم جديد . يمكن لعنصر المُقيِّم الجديد إجراء تقييم للنموذج الواحد والتحقق من صحة النموذج الحالي مقارنة بالنماذج السابقة. مع هذا التغيير ، يستهلك مكون Pusher الآن نتيجة مباركة من المُقيم بدلاً من ModelValidator.

المقيم الجديد يدعم نماذج Keras وكذلك نماذج المقدر. و _eval_input_receiver_fn لن تكون هناك حاجة إلى نموذج وحدة التقييم المحفوظة التي كانت مطلوبة في السابق مع Keras، منذ يستند مقيم الآن على نفس SavedModel التي يتم استخدامها لخدمة.

انظر المقيم لمزيد من المعلومات .