TFX'te TensorFlow 2.x

Koleksiyonlar ile düzeninizi koruyun İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.

TensorFlow 2.0 2019 yılında piyasaya sürüldü ile keras sıkı entegrasyonu , istekli yürütme varsayılan olarak ve Pythonic fonksiyon icra diğer yanı sıra yeni özellikler ve geliştirmeler .

Bu kılavuz, TFX'te TF 2.x'e kapsamlı bir teknik genel bakış sağlar.

Hangi sürümü kullanmalı?

TFX, TensorFlow 2.x ile uyumludur ve TensorFlow 1.x'te (özellikle Tahminciler) bulunan üst düzey API'ler çalışmaya devam eder.

TensorFlow 2.x'te yeni projeler başlatın

TensorFlow 2.x, TensorFlow 1.x'in üst düzey özelliklerini koruduğundan, yeni özellikleri kullanmayı planlamıyor olsanız bile eski sürümü yeni projelerde kullanmanın hiçbir avantajı yoktur.

Bu nedenle, yeni bir TFX projesine başlıyorsanız TensorFlow 2.x kullanmanızı öneririz. Keras ve diğer yeni özellikler için tam destek kullanıma sunuldukça kodunuzu daha sonra güncellemek isteyebilirsiniz ve TensorFlow 1.x'ten yükseltmeye çalışmak yerine TensorFlow 2.x ile başlarsanız değişikliklerin kapsamı çok daha sınırlı olacaktır. gelecek.

Mevcut projeleri TensorFlow 2.x'e dönüştürme

TensorFlow 1.x için yazılan kod, TensorFlow 2.x ile büyük ölçüde uyumludur ve TFX'te çalışmaya devam edecektir.

Eğer onlar TF 2.x kullanılabilir hale geldikçe iyileştirmeler ve yeni özelliklerden yararlanmak istiyorsanız Ancak, takip edebilirsiniz TF 2.x geçiş için talimat .

tahmin edici

Estimator API, TensorFlow 2.x'te tutulmuştur, ancak yeni özelliklerin ve geliştirmenin odak noktası değildir. Tahminciler kullanılarak TensorFlow 1.x veya 2.x'te yazılan kod, TFX'te beklendiği gibi çalışmaya devam edecektir.

Burada saf Tahmincisi kullanılarak bir uç uca TFX örneğidir: taksi örneği (Tahmin)

İle Keras model_to_estimator

Keras modelleri ile sarılmış olabilir tf.keras.estimator.model_to_estimator onlar Kestirimciler sanki onları çalışma olanağı sağlar fonksiyonu. Bunu kullanmak için:

  1. Bir Keras modeli oluşturun.
  2. Derlenmiş modeli geçirin model_to_estimator .
  3. Sonucunu kullanın model_to_estimator Eğiticisi'nde, genellikle bir Tahmincimizi kullanacağı şekilde.
# 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'ın kullanıcı modülü dosyası dışında, ardışık düzenin geri kalanı değişmeden kalır.

Yerli Keras (yani Keras olmadan model_to_estimator )

Örnekler ve İşbirliği

İşte yerel Keras ile birkaç örnek:

Biz de başına bileşen var Keras CoLab .

TFX Bileşenleri

Aşağıdaki bölümlerde, ilgili TFX bileşenlerinin yerel Keras'ı nasıl desteklediği açıklanmaktadır.

dönüştürmek

Transform şu anda Keras modelleri için deneysel desteğe sahiptir.

Dönüştür bileşeninin kendisi, yerel Keras için değişiklik yapılmadan kullanılabilir. preprocessing_fn tanımı kullanılarak, aynı kalır TensorFlow ve tf.Transform ops.

Yerel Keras için sunum işlevi ve değerlendirme işlevi değiştirilir. Detaylar aşağıdaki Eğitmen ve Değerlendirici bölümlerinde tartışılacaktır.

Eğitimci

Yerli keras yapılandırmak için GenericExecutor varsayılan Tahmincisi tabanlı vasisi yerine Eğitmen bileşeni için ayarlanması gerekir. Ayrıntılar için lütfen kontrol edin burada .

Dönüşümlü Keras Modül dosyası

Eğitim modülü dosyası zorunluluk bir içeriyor run_fn tarafından çağrılır GenericExecutor , tipik bir Keras run_fn şu şekilde görünecektir:

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 schema from tft.
  train_dataset = _input_fn(fn_args.train_files, fn_args.data_accessor,
                            tf_transform_output.transformed_metadata.schema)
  eval_dataset = _input_fn(fn_args.eval_files, fn_args.data_accessor,
                           tf_transform_output.transformed_metadata.schema)

  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)

Gelen run_fn eğitimli modeli dışa aktarılırken bu modelin tahmini için ham örneklerini alabilir bu yüzden yukarıda, bir porsiyon imza gereklidir. Tipik bir sunum işlevi şöyle görünür:

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

İşlevine hizmet Yukarıda, tf.Transform dönüşümler kullanılarak çıkarım için ham verilere uygulanması gereken tft.TransformFeaturesLayer tabakası. Bir önceki _serving_input_receiver_fn Tahminleyicileri için gerekli artık keras ile gerekli olacaktır.

Dönüşümsüz Keras Modül dosyası

Bu, yukarıda gösterilen modül dosyasına benzer, ancak dönüşümler olmadan:

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 data schema.
  train_dataset = _input_fn(fn_args.train_files, fn_args.data_accessor, schema)
  eval_dataset = _input_fn(fn_args.eval_files, fn_args.data_accessor, schema)

  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)
tf.distribute.Strateji

Şu anda TFX sadece tek işçi stratejileri (örn destekler MirroredStrategy , OneDeviceStrategy ).

Bir dağıtım stratejisi kullanmak için uygun bir tf.distribute.Strategy oluşturun ve Keras modelinin oluşturulmasını ve derlenmesini bir strateji kapsamı içine taşıyın.

Örneğin, yukarıda belirtilen değiştirme model = _build_keras_model() ile:

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

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

Tarafından kullanılan cihaz (CPU / grafik işlemcisi) doğrulamak için MirroredStrategy , bilgi seviyesi tensorflow günlük sağlar:

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

ve görmek gerekir Using MirroredStrategy with devices (...) günlüğüne.

Değerlendirici

TFMA v0.2x olarak, ModelValidator ve Değerlendirici tek altında birleştirilmiştir yeni Değerlendirici bileşeni . Yeni Değerlendirici bileşeni, hem tekli model değerlendirmesini gerçekleştirebilir hem de önceki modellerle karşılaştırıldığında mevcut modeli doğrulayabilir. Bu değişiklikle, Pusher bileşeni artık ModelValidator yerine Evaluator'dan bir onay sonucu tüketiyor.

Yeni Evaluator, Keras modellerinin yanı sıra Estimator modellerini de destekler. _eval_input_receiver_fn Değerlendirici şimdi aynı dayalı olduğu daha önceden istendi ve eval kaydedilmiş modelinin artık, keras ile ihtiyaç duyulacak SavedModel sunma için kullanılır.

Daha fazla bilgi için Değerlendiricisi Bkz .