TFX לנייד

מבוא

מדריך זה מדגים כיצד Tensorflow Extended (TFX) יכול ליצור ולהעריך מודלים של למידת מכונה שייפרסו במכשיר. TFX מספקת כעת תמיכה מקורית עבור TFLite , המאפשרת לבצע הסקה יעילה ביותר במכשירים ניידים.

מדריך זה מנחה אותך בשינויים שניתן לבצע בכל צינור כדי ליצור ולהעריך מודלים של TFLite. אנו מספקים כאן דוגמה מלאה, המדגימה כיצד TFX יכול לאמן ולהעריך מודלים של TFLite שהוכשרו מתוך מערך הנתונים של MNIST . בנוסף, אנו מראים כיצד ניתן להשתמש באותו צינור לייצוא בו-זמנית הן את SavedModel הסטנדרטי מבוסס Keras והן את ה-TFLite, מה שמאפשר למשתמשים להשוות את האיכות של השניים.

אנו מניחים שאתה מכיר את TFX, את הרכיבים שלנו ואת הצינורות שלנו. אם לא, אנא עיין במדריך זה.

צעדים

נדרשים שני שלבים בלבד כדי ליצור ולהעריך מודל TFLite ב-TFX. הצעד הראשון הוא הפעלת ה-Rewriter TFLite בהקשר של TFX Trainer כדי להמיר את מודל TensorFlow המאומן לדגם TFLite. השלב השני הוא הגדרת ה-Evaluator להערכת מודלים של TFLite. כעת אנו דנים בכל אחד בתורו.

הפעלת הסופר TFLite מחדש בתוך המאמן.

ה-TFX Trainer מצפה run_fn המוגדר על ידי המשתמש יצוין בקובץ מודול. run_fn זה מגדיר את המודל שיש לאמן, מאמן אותו למספר האיטרציות שצוין, ומייצא את המודל המאומן.

בהמשך הסעיף הזה, אנו מספקים קטעי קוד המציגים את השינויים הנדרשים כדי להפעיל את TFLite rewriter ולייצא מודל TFLite. כל הקוד הזה ממוקם ב- run_fn של מודול MNIST TFLite .

כפי שמוצג בקוד למטה, עלינו ליצור תחילה חתימה שלוקחת Tensor עבור כל תכונה כקלט. שים לב שזוהי סטייה מרוב הדגמים הקיימים ב-TFX, אשר לוקחים פרוטו 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'))
  }

לאחר מכן, הדגם של Keras נשמר כ-SaveModel באותו אופן שהוא בדרך כלל.

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

לבסוף, אנו יוצרים מופע של TFLite rewriter ( tfrw ), ומפעילים אותו על SavedModel כדי להשיג את מודל TFLite. אנו מאחסנים מודל TFLite זה ב- serving_model_dir שסופק על ידי המתקשר של run_fn . בדרך זו, מודל TFLite מאוחסן במיקום שבו כל רכיבי ה-TFX במורד הזרם יצפו למצוא את הדגם.

  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)

הערכת מודל TFLite.

ה- TFX Evaluator מספק את היכולת לנתח מודלים מאומנים כדי להבין את איכותם על פני מגוון רחב של מדדים. בנוסף לניתוח SavedModels, ה-TFX Evaluator מסוגל כעת לנתח גם מודלים של TFLite.

קטע הקוד הבא (משוכפל מצינור MNIST ), מראה כיצד להגדיר מעריך שמנתח מודל 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')

כפי שמוצג לעיל, השינוי היחיד שעלינו לעשות הוא להגדיר את השדה model_type ל- tf_lite . אין צורך בשינויי תצורה אחרים כדי לנתח את מודל TFLite. לא משנה אם מנותח מודל TFLite או SavedModel, הפלט של ה- Evaluator יהיה בדיוק אותו מבנה.

עם זאת, שים לב שהמעריך מניח שמודל TFLite נשמר בקובץ בשם tflite בתוך trainer_lite.outputs['model'].