TFX-এ TensorFlow 2.x

টেনসরফ্লো 2.0 2019 সালে মুক্তি পায় , অন্যান্য নতুন বৈশিষ্ট্য এবং উন্নতিগুলির মধ্যে কেরাসের কঠোর ইন্টিগ্রেশন , ডিফল্টরূপে আগ্রহী সম্পাদন এবং পাইথনিক ফাংশন এক্সিকিউশন সহ।

এই নির্দেশিকাটি TFX-এ TF 2.x-এর একটি ব্যাপক প্রযুক্তিগত ওভারভিউ প্রদান করে।

কোন সংস্করণ ব্যবহার করতে?

TFX TensorFlow 2.x-এর সাথে সামঞ্জস্যপূর্ণ, এবং TensorFlow 1.x-এ বিদ্যমান উচ্চ-স্তরের API (বিশেষ করে এস্টিমেটর) কাজ চালিয়ে যাচ্ছে।

TensorFlow 2.x-এ নতুন প্রকল্প শুরু করুন

যেহেতু TensorFlow 2.x TensorFlow 1.x-এর উচ্চ-স্তরের ক্ষমতা বজায় রাখে, আপনি নতুন বৈশিষ্ট্যগুলি ব্যবহার করার পরিকল্পনা না করলেও, নতুন প্রকল্পগুলিতে পুরানো সংস্করণ ব্যবহার করার কোনও সুবিধা নেই৷

অতএব, আপনি যদি একটি নতুন TFX প্রকল্প শুরু করেন, আমরা আপনাকে TensorFlow 2.x ব্যবহার করার পরামর্শ দিই। কেরাসের জন্য সম্পূর্ণ সমর্থন এবং অন্যান্য নতুন বৈশিষ্ট্যগুলি উপলব্ধ হওয়ায় আপনি পরে আপনার কোড আপডেট করতে চাইতে পারেন এবং আপনি TensorFlow 1.x থেকে আপগ্রেড করার চেষ্টা করার পরিবর্তে TensorFlow 2.x দিয়ে শুরু করলে পরিবর্তনের সুযোগ অনেক বেশি সীমিত হবে। ভবিষ্যৎ

বিদ্যমান প্রকল্পগুলিকে TensorFlow 2.x-এ রূপান্তর করা হচ্ছে

TensorFlow 1.x-এর জন্য লেখা কোড মূলত TensorFlow 2.x-এর সাথে সামঞ্জস্যপূর্ণ এবং TFX-এ কাজ করতে থাকবে।

যাইহোক, আপনি যদি TF 2.x এ উপলব্ধ উন্নতি এবং নতুন বৈশিষ্ট্যগুলির সুবিধা নিতে চান, তাহলে আপনি TF 2.x এ স্থানান্তরিত করার নির্দেশাবলী অনুসরণ করতে পারেন৷

অনুমানকারী

এস্টিমেটর এপিআই টেনসরফ্লো 2.x-এ ধরে রাখা হয়েছে, কিন্তু নতুন বৈশিষ্ট্য এবং বিকাশের কেন্দ্রবিন্দু নয়। এস্টিমেটর ব্যবহার করে TensorFlow 1.x বা 2.x-এ লেখা কোড TFX-এ প্রত্যাশিতভাবে কাজ করতে থাকবে।

এখানে বিশুদ্ধ অনুমানক ব্যবহার করে একটি এন্ড-টু-এন্ড TFX উদাহরণ রয়েছে: ট্যাক্সি উদাহরণ (আনুমানিক)

model_to_estimator সহ কেরাস

কেরাস মডেলগুলিকে tf.keras.estimator.model_to_estimator ফাংশন দিয়ে মোড়ানো যেতে পারে, যা তাদের এস্টিমেটর হিসাবে কাজ করতে দেয়। এটি ব্যবহার করতে:

  1. কেরাস মডেল তৈরি করুন।
  2. কম্পাইল করা মডেলটিকে model_to_estimator এ পাস করুন।
  3. প্রশিক্ষক-এ model_to_estimator ফলাফল ব্যবহার করুন, যেভাবে আপনি সাধারণত একটি অনুমানকারী ব্যবহার করবেন।
# 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,
      ...
  }

ট্রেইনারের ইউজার মডিউল ফাইল ছাড়া বাকি পাইপলাইন অপরিবর্তিত থাকে।

নেটিভ কেরাস (যেমন কেরাস model_to_estimator ছাড়া)

উদাহরণ এবং Colab

এখানে নেটিভ কেরাসের সাথে কয়েকটি উদাহরণ রয়েছে:

আমাদের কাছে একটি প্রতি-কম্পোনেন্ট Keras Colab ও আছে।

TFX উপাদান

নিম্নলিখিত বিভাগগুলি ব্যাখ্যা করে যে কীভাবে সম্পর্কিত TFX উপাদানগুলি নেটিভ কেরাসকে সমর্থন করে।

রূপান্তর

ট্রান্সফর্মের বর্তমানে কেরাস মডেলের জন্য পরীক্ষামূলক সমর্থন রয়েছে।

ট্রান্সফর্ম কম্পোনেন্ট নিজেই পরিবর্তন ছাড়াই নেটিভ কেরাসের জন্য ব্যবহার করা যেতে পারে। TensorFlow এবং tf.Transform ops ব্যবহার করে preprocessing_fn সংজ্ঞা একই থাকে।

পরিবেশন ফাংশন এবং eval ফাংশন নেটিভ কেরাসের জন্য পরিবর্তিত হয়। নিম্নলিখিত প্রশিক্ষক এবং মূল্যায়নকারী বিভাগে বিস্তারিত আলোচনা করা হবে।

প্রশিক্ষক

নেটিভ কেরাস কনফিগার করতে, ডিফল্ট এস্টিমেটর ভিত্তিক এক্সিকিউটরকে প্রতিস্থাপন করতে প্রশিক্ষক উপাদানের জন্য GenericExecutor সেট করতে হবে। বিস্তারিত জানার জন্য, এখানে চেক করুন.

ট্রান্সফর্ম সহ কেরাস মডিউল ফাইল

প্রশিক্ষণ মডিউল ফাইলটিতে অবশ্যই একটি run_fn থাকতে হবে যা GenericExecutor দ্বারা কল করা হবে, একটি সাধারণ Keras 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 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)

উপরের 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.Transform রূপান্তরগুলি tft.TransformFeaturesLayer স্তর ব্যবহার করে অনুমানের জন্য কাঁচা ডেটাতে প্রয়োগ করতে হবে। পূর্ববর্তী _serving_input_receiver_fn যা অনুমানকারীদের জন্য প্রয়োজন ছিল কেরাসের সাথে আর প্রয়োজন হবে না।

ট্রান্সফর্ম ছাড়া কেরাস মডিউল ফাইল

এটি উপরে দেখানো মডিউল ফাইলের মতো, কিন্তু রূপান্তর ছাড়াই:

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.Strategy

এই সময়ে TFX শুধুমাত্র একক কর্মী কৌশল সমর্থন করে (যেমন, MirroredStrategy , OneDeviceStrategy )।

একটি বন্টন কৌশল ব্যবহার করতে, একটি উপযুক্ত tf.distribute.Strategy তৈরি করুন এবং কেরাস মডেল তৈরি এবং সংকলনকে একটি কৌশলের সুযোগের মধ্যে নিয়ে যান।

উদাহরণস্বরূপ, উপরের 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(...)

MirroredStrategy দ্বারা ব্যবহৃত ডিভাইস (CPU/GPU) যাচাই করতে, তথ্য স্তরের টেনসরফ্লো লগিং সক্ষম করুন:

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

এবং আপনি লগে Using MirroredStrategy with devices (...) দেখতে সক্ষম হবেন।

মূল্যায়নকারী

TFMA v0.2x-এ, মডেল ভ্যালিডেটর এবং ইভালুয়েটরকে একক নতুন মূল্যায়নকারী উপাদানে একত্রিত করা হয়েছে। নতুন মূল্যায়নকারী উপাদানটি একক মডেল মূল্যায়ন উভয়ই সম্পাদন করতে পারে এবং পূর্ববর্তী মডেলগুলির তুলনায় বর্তমান মডেলটিকেও যাচাই করতে পারে। এই পরিবর্তনের সাথে, পুশার কম্পোনেন্ট এখন মডেল ভ্যালিডেটরের পরিবর্তে মূল্যায়নকারীর থেকে একটি আশীর্বাদ ফলাফল গ্রহণ করে।

নতুন মূল্যায়নকারী কেরাস মডেলের পাশাপাশি এস্টিমেটর মডেলগুলিকে সমর্থন করে৷ _eval_input_receiver_fn এবং eval সংরক্ষিত মডেল যা পূর্বে প্রয়োজন ছিল কেরাসের সাথে আর প্রয়োজন হবে না, যেহেতু মূল্যায়নকারী এখন সেই একই SavedModel এর উপর ভিত্তি করে যা পরিবেশনের জন্য ব্যবহৃত হয়।

আরও তথ্যের জন্য মূল্যায়নকারী দেখুন