Tensorflow Serving

  1. from kashgari.tasks.classification import BiGRU_Model
  2. from kashgari.corpus import SMP2018ECDTCorpus
  3. from kashgari import utils
  4. train_x, train_y = SMP2018ECDTCorpus.load_data()
  5. model = BiGRU_Model()
  6. model.fit(train_x, train_y)
  7. # Save model
  8. utils.convert_to_saved_model(model,
  9. model_path='saved_model/bgru',
  10. version=1)

Then run tensorflow-serving.

  1. docker run -t --rm -p 8501:8501 -v "path_to/saved_model:/models/" -e MODEL_NAME=bgru tensorflow/serving

Load processor from model, then predict with serving.

  1. import requests
  2. from kashgari import utils
  3. import numpy as np
  4. x = ['Hello', 'World']
  5. # Pre-processor data
  6. processor = utils.load_processor(model_path='saved_model/bgru/1')
  7. tensor = processor.process_x_dataset([x])
  8. # array([[1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], dtype=int32)
  9. # if you using BERT, you need to reformat tensor first
  10. # ------ Only for BERT Embedding Start --------
  11. tensor = [{
  12. "Input-Token:0": i.tolist(),
  13. "Input-Segment:0": np.zeros(i.shape).tolist()
  14. } for i in tensor]
  15. # ------ Only for BERT Embedding End ----------
  16. # predict
  17. r = requests.post("http://localhost:8501/v1/models/bgru:predict", json={"instances": tensor.tolist()})
  18. preds = r.json()['predictions']
  19. # Convert result back to labels
  20. labels = processor.reverse_numerize_label_sequences(np.array(preds).argmax(-1))
  21. # labels = ['video']