Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Tensorflow Serving

Tensorflow Serving

F2ac835ebb5cb75ff474cda71f018400?s=128

¯\_(ツ)_/¯

July 23, 2018
Tweet

Transcript

  1. Tensorflow Serving Software Engineer ynqa

  2. About Me SysML Team @Mercari GitHub: @ynqa Twitter: @yn_9a Go/Python/Kubernetes/TF

    Serving 最近はkubeflow/TF Servingにコントリビュート したりしなかったり → TF Servingの話をします
  3. Tensorflow Serving

  4. Tensorflow Serving - 主にTensorflowのモデルにおける推論部分を APIとして提供するためのインターフェース - gRPC/REST - 他にも: Seldon,

    PredictionIO, MLFlow etc… - C++実装, ビルドツールはbazelを利用 - Versioning - Load/Unload
  5. Tensorflow Serving - Versioning - Version numberにおいて最新版を常に loadするような実装 - E.g.

    ディレクトリ `/model_name/10` 以下のモデルがServingされている状態で、 `model/9` がuploadされた場合、そのモデルは loadされない - 最新のモデルが削除された場合は、 1つ前のモデルにrollbackされる - Load/Upload - すべてのモデル/バージョンをServingするわけにもいかないので、新しいモデルを load する前に古いモデルの unloadを行う
  6. Tensorflow Serving - Versioning Policy - ...とはいえ、特定のモデルを指定したい場合もある - Configで設定可能: Latest,

    All, Specific - https://github.com/tensorflow/serving/blob/1.9.0/tensorflow_serving/sources/ storage_path/file_system_storage_path_source.proto#L8-L37 - Pluggable - VersioningやLoaderはカスタマイズ可能 - 既存のコンポーネントを利用した上で独自の Serviceを定義することも可能 - more details… - https://www.tensorflow.org/serving/architecture_overview
  7. Tensorflow Serving: gRPC Services

  8. Tensorflow Serving: gRPC Services - Inferences - Classify, Regress, Predict

    - 各メソッド名に対応するグラフの計算結果を返す - MultiInference - 1つのリクエストから複数の指定されたメソッド名( Regress/Classify)に対応するグ ラフの計算結果を返す
  9. Tensorflow Serving: gRPC Services - Others - GetModelMetadata - 現在はモデルのsignaturedefのみを取得する

    - GetModelStatus - モデルのステートを取得する - Start, Loading, Available, Unloading, End - https://github.com/tensorflow/serving/blob/1.9.0/tensorflow_serving/apis/get _model_status.proto#L26-L54 - HandleReloadConfigRequest - configのリロードを行うための受け口
  10. Tensorflow Serving: gRPC Services - REST - 1.8〜 - http周りはlibeventのevhttp、Json

    parserはrapidjsonを利用して実装 Regress/ClassifyのRequest Endpoints PredictのRequest
  11. Tensorflow Serving: Inference

  12. Tensorflow Serving: Inference - gRPC Services about inference: - Predict

    - Signatureにおけるoutputsの計算結果を返す - Regress - Signatureにおけるメソッド名が tensorflow/serving/regressのoutputsの計算結果 を返す - Classify - 同様にtensorflow/serving/classifyのoutputsの結果を返す - 他の2つと異なる点はscore/classの2つの結果が存在する - score: 予測値、class: 所属するクラス
  13. Tensorflow Serving: Inference - Diff of input format: - Predict

    - repeatedで各型における入力がそれぞれ定義されているので listライクに入力す ることが可能 - https://github.com/tensorflow/tensorflow/blob/v1.9.0/tensorflow/core/frame work/tensor.proto - Regress/Classify - TensorflowのExampleの形式 - Input > ExampleList > [Example...] > Features > [Feature...] > value - https://github.com/tensorflow/tensorflow/blob/v1.9.0/tensorflow/core/examp le/example.proto
  14. Tensorflow Serving: SavedModel

  15. Tensorflow Serving: Signature - Signature/SignatureDef - モデルに対する入出力、およびメソッド名が記述されたもの - Signatureの内容が知りたい: -

    SavedModelを.txt形式で保存する(as_text=True) - saved_model_cliのshowを利用する - scanでMetaGraphも閲覧可能 - Servingのためのデバッグにも有効
  16. Tensorflow Serving: SavedModel - Servingするモデルの準備 - Tensorflowの学習済みモデルを SavedModelとしてエクスポートすることで Servableなオ ブジェクトの生成を行う

    - SavedModel - モデルのメタ情報を含んだモデルフォーマット、 signatureも含まれます - Format: protobuf | txt - https://divis.io/2018/01/enterprise-tensorflow-2-saving-a-trained-model/ - SavedModelをエクスポートする選択肢 : - tf.saved_model.builder.SavedModelBuilder - tf.estimator.Estimator.export_savedmodel
  17. Tensorflow Serving: Example

  18. Example: 入力を2倍して出力するグラフとその signature ※ SavedModelに変換する部分は省略

  19. Tensorflow Serving: Example 1. tensorflow/serving/classifyのメソッド名を持つsignatureが存在しない - Classifyのリクエスト時にAbortionErrorが発生することがわかる - 以下は double_xに対するClassify(Regressも同様)の呼び出し時のエラー

  20. Tensorflow Serving: Example 2. double_x_regressのinputsのdtypeがDT_FLOATになっている - Regress/Classifyにおけるリクエストは、 TFのExampleのbinary serializedされたprotobuf (String)を与えられるように記述しなければならない

    - つまりInputのdtypeはDT_Stringになるはず
  21. Tensorflow Serving: Example ※ Regress/ClassifyのためのInputの作り方 - 以下のような記述に変え、 serialized_tf_exampleがinputsになるようにSavedModelを構築す る必要がある -

    https://github.com/tensorflow/serving/blob/1.9.0/tensorflow_serving/example/mnist_save d_model.py
  22. まとめ

  23. まとめ - SavedModelを生成しServingされたからといっても、必ずしもあらゆるリクエストを受けられると は限らない - モデルのSingature/入出力におけるデータの Shape等の確認 - tensorflow-serving-api -

    Python2系のみpip install ...で利用可能 - 基本的にはsourceからprotocでコード生成する方がよさそう - SavedModelの作成に関してはEstimatorで作成したほうが楽 - 試す場合は公式のdockerイメージを利用しましょう - https://github.com/tensorflow/serving/tree/master/tensorflow_serving/tools/docke r
  24. 以上です