TFX dla urządzeń mobilnych

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

Wstęp

W tym przewodniku pokazano, jak Tensorflow Extended (TFX) może tworzyć i oceniać modele uczenia maszynowego, które zostaną wdrożone na urządzeniu. TFX zapewnia teraz natywne wsparcie dla TFLite , co umożliwia wykonywanie wysoce wydajnego wnioskowania na urządzeniach mobilnych.

Ten przewodnik przeprowadzi Cię przez zmiany, które można wprowadzić w dowolnym potoku, aby wygenerować i ocenić modele TFLite. Podajemy tutaj kompletny przykład, pokazujący, w jaki sposób TFX może trenować i oceniać modele TFLite, które są wytrenowane z zestawu danych MNIST . Ponadto pokazujemy, w jaki sposób ten sam potok może być użyty do jednoczesnego eksportu zarówno standardowego SavedModel opartego na Keras, jak i TFLite, umożliwiając użytkownikom porównanie jakości obu.

Zakładamy, że znasz TFX, nasze komponenty i nasze potoki. Jeśli nie, zapoznaj się z tym samouczkiem .

Kroki

Tylko dwa kroki są wymagane do stworzenia i oceny modelu TFLite w TFX. Pierwszym krokiem jest wywołanie rewritera TFLite w kontekście TFX Trainer , aby przekonwertować wytrenowany model TensorFlow na model TFLite. Drugim krokiem jest skonfigurowanie Ewaluatora do oceny modeli TFLite. Omówimy teraz każdy z nich po kolei.

Wywoływanie programu do przepisywania TFLite w Trainerze.

Trener TFX oczekuje, że zdefiniowany przez użytkownika run_fn zostanie określony w pliku modułu. Ten run_fn definiuje model do przeszkolenia, trenuje go dla określonej liczby iteracji i eksportuje przeszkolony model.

W pozostałej części tej sekcji udostępniamy fragmenty kodu, które pokazują zmiany wymagane do wywołania programu do ponownego zapisywania TFLite i wyeksportowania modelu TFLite. Cały ten kod znajduje się w run_fn modułu MNIST TFLite .

Jak pokazano w poniższym kodzie, musimy najpierw utworzyć podpis, który jako dane wejściowe przyjmuje Tensor dla każdej funkcji. Zauważ, że jest to odejście od większości istniejących modeli w TFX, które przyjmują serializowane protosy tf.Example jako dane wejściowe.

 signatures = {
      'serving_default':
          _get_serve_tf_examples_fn(
              model, tf_transform_output).get_concrete_function(
                  tf.TensorSpec(
                      shape=[None, 784],
                      dtype=tf.float32,
                      name='image_floats'))
  }

Następnie model Keras jest zapisywany jako SavedModel w taki sam sposób, jak zwykle.

  temp_saving_model_dir = os.path.join(fn_args.serving_model_dir, 'temp')
  model.save(temp_saving_model_dir, save_format='tf', signatures=signatures)

Na koniec tworzymy instancję rewritera TFLite ( tfrw ) i wywołujemy go na SavedModel, aby uzyskać model TFLite. Przechowujemy ten model TFLite w katalogu serving_model_dir dostarczonym przez obiekt wywołujący run_fn . W ten sposób model TFLite jest przechowywany w lokalizacji, w której wszystkie dalsze komponenty TFX będą oczekiwały znalezienia modelu.

  tfrw = rewriter_factory.create_rewriter(
      rewriter_factory.TFLITE_REWRITER, name='tflite_rewriter')
  converters.rewrite_saved_model(temp_saving_model_dir,
                                 fn_args.serving_model_dir,
                                 tfrw,
                                 rewriter.ModelType.TFLITE_MODEL)

Ocena modelu TFLite.

TFX Evaluator zapewnia możliwość analizowania wytrenowanych modeli w celu zrozumienia ich jakości w szerokim zakresie metryk. Oprócz analizy SavedModels, TFX Evaluator jest teraz w stanie analizować również modele TFLite.

Poniższy fragment kodu (odtworzony z potoku MNIST ) pokazuje, jak skonfigurować Evaluator, który analizuje model TFLite.

  # Informs the evaluator that the model is a TFLite model.
  eval_config_lite.model_specs[0].model_type = 'tf_lite'

  ...

  # Uses TFMA to compute the evaluation statistics over features of a TFLite
  # model.
  model_analyzer_lite = Evaluator(
      examples=example_gen.outputs['examples'],
      model=trainer_lite.outputs['model'],
      eval_config=eval_config_lite,
  ).with_id('mnist_lite')

Jak pokazano powyżej, jedyną zmianą, jaką musimy wprowadzić, jest ustawienie pola model_type na tf_lite . Do analizy modelu TFLite nie są wymagane żadne inne zmiany konfiguracji. Niezależnie od tego, czy analizowany jest model TFLite, czy SavedModel, dane wyjściowe Evaluator będą miały dokładnie taką samą strukturę.

Należy jednak pamiętać, że Ewaluator zakłada, że ​​model TFLite jest zapisany w pliku o nazwie tflite w trainer_lite.outputs['model'].