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

Tensorflow Serving

Tensorflow Serving

¯\_(ツ)_/¯

July 23, 2018
Tweet

More Decks by ¯\_(ツ)_/¯

Other Decks in Technology

Transcript

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

    Serving 最近はkubeflow/TF Servingにコントリビュート したりしなかったり → TF Servingの話をします
  2. Tensorflow Serving - Versioning - Version numberにおいて最新版を常に loadするような実装 - E.g.

    ディレクトリ `/model_name/10` 以下のモデルがServingされている状態で、 `model/9` がuploadされた場合、そのモデルは loadされない - 最新のモデルが削除された場合は、 1つ前のモデルにrollbackされる - Load/Upload - すべてのモデル/バージョンをServingするわけにもいかないので、新しいモデルを load する前に古いモデルの unloadを行う
  3. 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
  4. Tensorflow Serving: gRPC Services - Inferences - Classify, Regress, Predict

    - 各メソッド名に対応するグラフの計算結果を返す - MultiInference - 1つのリクエストから複数の指定されたメソッド名( Regress/Classify)に対応するグ ラフの計算結果を返す
  5. 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のリロードを行うための受け口
  6. Tensorflow Serving: gRPC Services - REST - 1.8〜 - http周りはlibeventのevhttp、Json

    parserはrapidjsonを利用して実装 Regress/ClassifyのRequest Endpoints PredictのRequest
  7. 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: 所属するクラス
  8. 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
  9. Tensorflow Serving: Signature - Signature/SignatureDef - モデルに対する入出力、およびメソッド名が記述されたもの - Signatureの内容が知りたい: -

    SavedModelを.txt形式で保存する(as_text=True) - saved_model_cliのshowを利用する - scanでMetaGraphも閲覧可能 - Servingのためのデバッグにも有効
  10. 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
  11. まとめ - 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