code: def test_multi_task(
      valid_tbl_data,
      save_path,
      model,
      cat_cols,
      continuous_cols,
      feature_max_idx,
  ):
      column_info = {
          "cat_cols": cat_cols,
          "continuous_cols": continuous_cols,
          "feature_max_idx": feature_max_idx,
          "embed_cols": [],
          "embed_in_dims": [],
          "embed_out_dims": [],
          "label": ["duration", "click"],
      }
      config = {
          "column_info": column_info,
          "inter_op_parallelism": 4,
          "intra_op_parallelism": 8,
          "model_type": model,  # mmoe or ple
      }
      estimator = Estimator.from_keras(
          model_creator=model_creator, verbose=False, config=config
      )
      estimator.load(save_path)
  
      batch_size = 256
      val_steps = math.ceil(valid_tbl_data.size() / batch_size)
      eval_results = estimator.evaluate(
          data=valid_tbl_data.df,
          num_steps=val_steps,
          batch_size=batch_size,
          feature_cols=feature_cols(column_info),
          label_cols=label_cols(column_info),
      )
      for k, v in eval_results.items():
          print(k, v)
  
file_path: BigDL/python/friesian/example/multi_task/run_multi_task.py
imports: import math
  from time import time
  from argparse import ArgumentParser
  from bigdl.dllib.utils.log4Error import invalidInputError
  from bigdl.orca import init_orca_context, stop_orca_context
  from bigdl.orca.learn.tf2.estimator import Estimator
  from bigdl.friesian.feature import FeatureTable
  from deepctr.feature_column import SparseFeat, DenseFeat
  from deepctr.models import MMOE, PLE
  from keras.callbacks import EarlyStopping
label_desc: Use image node_id 6 for calling a global function with example usage: test_multi_task(valid_tbl_data, save_path, model, cat_cols, continuous_cols, feature_max_idx) without return types