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

Tensorflow Serving

Avatar for ynqa ynqa
July 23, 2018

Tensorflow Serving

Avatar for ynqa

ynqa

July 23, 2018
Tweet

More Decks by ynqa

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