TFX dla telefonów komórkowych

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 natywną obsługę TFLite , co umożliwia przeprowadzanie wysoce wydajnych wnioskowań na urządzeniach mobilnych.

Ten przewodnik przeprowadzi Cię przez zmiany, które można wprowadzić w dowolnym potoku w celu wygenerowania i oceny modeli TFLite. Podajemy tutaj kompletny przykład, pokazujący, jak TFX może trenować i oceniać modele TFLite wytrenowane na podstawie zbioru danych MNIST . Ponadto pokazujemy, jak można wykorzystać ten sam potok 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 rurociągi. Jeśli nie, zapoznaj się z tym tutorialem .

Kroki

Aby utworzyć i ocenić model TFLite w TFX, wymagane są tylko dwa kroki. Pierwszym krokiem jest wywołanie narzędzia rewriterskiego TFLite w kontekście TFX Trainer w celu konwersji wyszkolonego modelu TensorFlow na model TFLite. Drugim krokiem jest skonfigurowanie Evaluatora do oceny modeli TFLite. Omówimy teraz każdy z nich po kolei.

Wywoływanie narzędzia do ponownego zapisu TFLite w Trainerze.

Trener TFX oczekuje, że w pliku modułu zostanie określony zdefiniowany przez użytkownika run_fn . Ta run_fn definiuje model, który ma być szkolony, trenuje go przez określoną liczbę iteracji i eksportuje wyszkolony model.

W pozostałej części tej sekcji udostępniamy fragmenty kodu, które pokazują zmiany wymagane do wywołania narzędzia do ponownego zapisu 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 jako dane wejściowe przyjmują serializowane protos tf.Example .

 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ę narzędzia do ponownego zapisu TFLite ( tfrw ) i wywołujemy ją w SavedModel, aby uzyskać model TFLite. Przechowujemy ten model TFLite w serving_model_dir dostarczonym przez osobę wywołującą run_fn . W ten sposób model TFLite jest przechowywany w lokalizacji, w której wszystkie dalsze komponenty TFX będą oczekiwać 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.

Narzędzie TFX Evaluator zapewnia możliwość analizowania wytrenowanych modeli w celu zrozumienia ich jakości w szerokim zakresie wskaźników. 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ć moduł oceniający, 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ą, którą musimy wprowadzić, jest ustawienie pola model_type na tf_lite . Do analizy modelu TFLite nie są wymagane żadne inne zmiany konfiguracyjne. Niezależnie od tego, czy analizowany jest model TFLite, czy SavedModel, dane wyjściowe modułu Evaluator będą miały dokładnie tę samą strukturę.

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