TensorFlowサービスとKubernetesサービスInceptionモデル

19078 ワード

参照先:https://tensorflow.google.cn/serving/serving_inception
このチュートリアルでは、Dockerコンテナで実行されるTensorFlow Servicesコンポーネントを使用してTensorFlow初期モデルをサービスする方法と、Kubernetesを使用してサービスクラスタを導入する方法を示します.
TensorFlowサービスの詳細については、TensorFlowサービス基本チュートリアルとTensorFlowサービス上級チュートリアルをお勧めします.
TensorFlow初期モデルの詳細については、TensorFlow in Inceptionをお勧めします.
  • 第0部では、
  • を配備するためにTensorFlow Service Dockerミラーを作成する方法を示します.
  • 第1部では、ローカルコンテナで画像を実行する方法を示します.
  • 第2部では、Kubernetesに導入する方法を示します.

  • セクション0:Dockerミラーを作成する
    TensorFlow Service Dockerミラーの構築の詳細については、DockerによるTensorFlow Serviceの使用を参照してください.
    コンテナの実行
    Dockerfileを使います.develは、ミラーベースの$USER/tensorflow-serving-develを作成します.次に、構築された画像を使用してコンテナをローカルで起動します.
    $ docker build --pull -t $USER/tensorflow-serving-devel -f tensorflow_serving/tools/docker/Dockerfile.devel .
    #  
    $ docker build --pull -t $USER/tensorflow-serving-devel -f Dockerfile.devel .
    #  
    $ docker build -t $USER/tensorflow-serving-devel . #    Dockerfile  
    $ docker run --name=inception_container -it $USER/tensorflow-serving-devel
    
    #    Dockerfile.devel        Dockerfile
    docker build -t tensorflow-serving:v1 .
    git clone --recurse-submodules https://github.com/tensorflow/serving # serving      
    docker run -it -v /home/wu/serving:/serving tensorflow-serving:v1 /bin/bash #   -v       
    
    #  
    docker pull registry.cn-hangzhou.aliyuncs.com/781708249/tensorflow-serving:v1 #       tensorflow serving         
    git clone --recurse-submodules https://github.com/tensorflow/serving # serving      
    docker run -it -v /home/wu/serving:/serving registry.cn-hangzhou.aliyuncs.com/781708249/tensorflow-serving:v1 /bin/bash #   -v       

    コンテナ内のTensorFlowサービスのクローン作成、構成、構築
    注:次のすべてのbazel構築コマンドは、標準-cオプションフラグを使用します.コンストラクションをさらに最適化するには、ここの説明を参照してください.
    実行中のコンテナでは、TensorFlowサービスサンプルコードをクローン、構成、構築します.
    root@c97d8e820ced:/# git clone --recurse-submodules https://github.com/tensorflow/serving  #        serving       
    root@c97d8e820ced:/# cd serving/tensorflow
    root@c97d8e820ced:/serving/tensorflow# ./configure
    root@c97d8e820ced:/serving# cd ..
    root@c97d8e820ced:/serving# bazel build -c opt tensorflow_serving/example/...

    次に、ここのコマンドを使用してTensorFlow ModelServerとapt-getをインストールするか、次のコードを使用してModelServerバイナリファイルを構築できます.
    root@c97d8e820ced:/serving# bazel build -c opt tensorflow_serving/model_servers:tensorflow_model_server

    このチュートリアルの残りの部分では、ModelServerをローカルでコンパイルすると仮定します.この場合、コマンドを実行するのはbazel-bin/tensorflow_serving/model_servers/tensorflow_model_serverです.ただし、apt-getを使用してModelServerをインストールする場合は、このコマンドをtensorflow_model_serverで置き換えるだけです.
    コンテナでの初期モデルのエクスポート
    実行中のコンテナでinception_を実行します.saved_model.pyパブリッシュされたInceptionモデルトレーニングチェックポイントを使用して初期モデルをエクスポートします.最初から訓練を始めるのではなく,訓練された変数の既成検査点を用いて推理図を復元し,直接導出した.
    root@c97d8e820ced:/serving# curl -O http://download.tensorflow.org/models/image/imagenet/inception-v3-2016-03-01.tar.gz
    root@c97d8e820ced:/serving# tar xzf inception-v3-2016-03-01.tar.gz
    root@c97d8e820ced:/serving# ls inception-v3
    README.txt  checkpoint  model.ckpt-157585
    root@c97d8e820ced:/serving# bazel-bin/tensorflow_serving/example/inception_saved_model --checkpoint_dir=inception-v3 --output_dir=/tmp/inception-export
    Successfully loaded model from inception-v3/model.ckpt-157585 at step=157585.
    Successfully exported model to /tmp/inception-export
    root@c97d8e820ced:/serving# ls /tmp/inception-export
    1
    root@c97d8e820ced:/serving# [Ctrl-p] + [Ctrl-q]

    配置のためにミラーをコミット
    Kubernetesの導入に使用する新しいミラー$USER/inception_servingのすべての変更.
    $ docker commit inception_container $USER/inception_serving
    $ docker stop inception_container

    セクション1:ローカルDockerコンテナで実行
    構築されたミラーを使用して、サービスワークフローをローカルでテストします.
    $ docker run -it $USER/inception_serving

    サーバの起動
    コンテナでのgRPC tensorflow_の実行model_server.
    root@f07eec53fd95:/# cd serving
    root@f07eec53fd95:/serving# bazel-bin/tensorflow_serving/model_servers/tensorflow_model_server --port=9000 --model_name=inception --model_base_path=/tmp/inception-export &> inception_log &
    [1] 45

    クエリー・サーバー
    inception_の使用client.pyクエリーサーバ.クライアントは、コマンドラインパラメータによって指定された画像をgRPCを介してサーバに送信し、ImageNetカテゴリに対する人間の読み取り可能な記述に分類する.
    root@f07eec53fd95:/serving# bazel-bin/tensorflow_serving/example/inception_client --server=localhost:9000 --image=/path/to/my_cat_image.jpg
    outputs {
      key: "classes"
      value {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
          dim {
            size: 5
          }
        }
        string_val: "tiger cat"
        string_val: "Egyptian cat"
        string_val: "tabby, tabby cat"
        string_val: "lynx, catamount"
        string_val: "Cardigan, Cardigan Welsh corgi"
      }
    }
    outputs {
      key: "scores"
      value {
        dtype: DT_FLOAT
        tensor_shape {
          dim {
            size: 1
          }
          dim {
            size: 5
          }
        }
        float_val: 9.5486907959
        float_val: 8.52025032043
        float_val: 8.05995368958
        float_val: 4.30645561218
        float_val: 3.93207240105
      }
    }
    
    root@f07eec53fd95:/serving# exit

    役に立つ!サーバーはあなたの猫のイメージを分類することに成功しました!
    セクション2:Kubernetesへの導入
    このセクションでは、第0部で構築したコンテナミラーを使用して、GoogleクラウドプラットフォームにKubernetesを備えたサービスクラスタを導入します.
    Cloudプロジェクトログイン
    ここではtensorflow-servingというgcloudプロジェクトを作成してログインしたと仮定します.
    gcloud auth login --project tensorflow-serving

    コンテナクラスタの作成
    まず、サービス導入のためにGoogle Container Engineクラスタを作成します.
    $ gcloud container clusters create inception-serving-cluster --num-nodes 5
    Creating cluster inception-serving-cluster...done.
    Created [https://container.googleapis.com/v1/projects/tensorflow-serving/zones/us-central1-f/clusters/inception-serving-cluster].
    kubeconfig entry generated for inception-serving-cluster.
    NAME                       ZONE           MASTER_VERSION  MASTER_IP        MACHINE_TYPE   NODE_VERSION  NUM_NODES  STATUS
    inception-serving-cluster  us-central1-f  1.1.8           104.197.163.119  n1-standard-1  1.1.8         5          RUNNING

    gcloudコンテナコマンドのデフォルトクラスタを設定し、クラスタ認証情報をkubectlに渡します.
    $ gcloud config set container/cluster inception-serving-cluster
    $ gcloud container clusters get-credentials inception-serving-cluster
    Fetching cluster endpoint and auth data.
    kubeconfig entry generated for inception-serving-cluster.

    Dockerミラーのアップロード
    Google Container Registryに画像をプッシュして、Google Cloud Platformで実行できるようにしましょう.
    まず、Container Registryフォーマットとプロジェクト名を使用して$USER/inception_をマークします.serving画像、
    $ docker tag $USER/inception_serving gcr.io/tensorflow-serving/inception

    次に、画像をレジストリにプッシュし、
    $ gcloud docker -- push gcr.io/tensorflow-serving/inception

    Kubernetesの導入とサービスの作成
    導入にはKubernetes導入によって制御される3つのinceptionが含まれています.inferenceサーバのコピー.Kubernetes Serviceは、External Load Balancerとともにレプリカを外部にコピーします.
    例Kubernetes config inception_を使用します.k8s.yamlはそれらを作成します.
    $ kubectl create -f tensorflow_serving/example/inception_k8s.yaml
    deployment "inception-deployment" created
    service "inception-service" created

    配置とペインのステータスを表示するには、次の手順に従います.
    $ kubectl get deployments
    NAME                    DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    inception-deployment    3         3         3            3           5s
    $ kubectl get pods
    NAME                         READY     STATUS    RESTARTS   AGE
    inception-deployment-bbcbc   1/1       Running   0          10s
    inception-deployment-cj6l2   1/1       Running   0          10s
    inception-deployment-t1uep   1/1       Running   0          10s

    サービスのステータスを表示するには、次の手順に従います.
    $ kubectl get services
    NAME                    CLUSTER-IP       EXTERNAL-IP       PORT(S)     AGE
    inception-service       10.239.240.227   104.155.184.157   9000/TCP    1m

    起動して実行するには時間がかかる場合があります.
    $ kubectl describe service inception-service
    Name:           inception-service
    Namespace:      default
    Labels:         run=inception-service
    Selector:       run=inception-service
    Type:           LoadBalancer
    IP:         10.239.240.227
    LoadBalancer Ingress:   104.155.184.157
    Port:            9000/TCP
    NodePort:        30334/TCP
    Endpoints:      
    Session Affinity:   None
    Events:
      FirstSeen LastSeen    Count   From            SubobjectPath   Type        Reason      Message
      --------- --------    -----   ----            -------------   --------    ------      -------
      1m        1m      1   {service-controller }           Normal      CreatingLoadBalancer    Creating load balancer
      1m        1m      1   {service-controller }           Normal      CreatedLoadBalancer Created load balancer

    サービス外部IPアドレスはLoadBalancer Ingressの隣にあります.
    モデルのクエリー
    ローカルホストの外部アドレスからサービスを問い合わせることができます.
    $ bazel-bin/tensorflow_serving/example/inception_client --server=104.155.184.157:9000 --image=/path/to/my_cat_image.jpg
    outputs {
      key: "classes"
      value {
        dtype: DT_STRING
        tensor_shape {
          dim {
            size: 1
          }
          dim {
            size: 5
          }
        }
        string_val: "tiger cat"
        string_val: "Egyptian cat"
        string_val: "tabby, tabby cat"
        string_val: "lynx, catamount"
        string_val: "Cardigan, Cardigan Welsh corgi"
      }
    }
    outputs {
      key: "scores"
      value {
        dtype: DT_FLOAT
        tensor_shape {
          dim {
            size: 1
          }
          dim {
            size: 5
          }
        }
        float_val: 9.5486907959
        float_val: 8.52025032043
        float_val: 8.05995368958
        float_val: 4.30645561218
        float_val: 3.93207240105
      }
    }

    Kubernetesサービスの起動モードに正常に導入されました.