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を作成します.次に、構築された画像を使用してコンテナをローカルで起動します.
コンテナ内のTensorFlowサービスのクローン作成、構成、構築
注:次のすべてのbazel構築コマンドは、標準-cオプションフラグを使用します.コンストラクションをさらに最適化するには、ここの説明を参照してください.
実行中のコンテナでは、TensorFlowサービスサンプルコードをクローン、構成、構築します.
次に、ここのコマンドを使用してTensorFlow ModelServerとapt-getをインストールするか、次のコードを使用してModelServerバイナリファイルを構築できます.
このチュートリアルの残りの部分では、ModelServerをローカルでコンパイルすると仮定します.この場合、コマンドを実行するのは
コンテナでの初期モデルのエクスポート
実行中のコンテナでinception_を実行します.saved_model.pyパブリッシュされたInceptionモデルトレーニングチェックポイントを使用して初期モデルをエクスポートします.最初から訓練を始めるのではなく,訓練された変数の既成検査点を用いて推理図を復元し,直接導出した.
配置のためにミラーをコミット
Kubernetesの導入に使用する新しいミラー$USER/inception_servingのすべての変更.
セクション1:ローカルDockerコンテナで実行
構築されたミラーを使用して、サービスワークフローをローカルでテストします.
サーバの起動
コンテナでのgRPC tensorflow_の実行model_server.
クエリー・サーバー
inception_の使用client.pyクエリーサーバ.クライアントは、コマンドラインパラメータによって指定された画像をgRPCを介してサーバに送信し、ImageNetカテゴリに対する人間の読み取り可能な記述に分類する.
役に立つ!サーバーはあなたの猫のイメージを分類することに成功しました!
セクション2:Kubernetesへの導入
このセクションでは、第0部で構築したコンテナミラーを使用して、GoogleクラウドプラットフォームにKubernetesを備えたサービスクラスタを導入します.
Cloudプロジェクトログイン
ここではtensorflow-servingというgcloudプロジェクトを作成してログインしたと仮定します.
コンテナクラスタの作成
まず、サービス導入のためにGoogle Container Engineクラスタを作成します.
gcloudコンテナコマンドのデフォルトクラスタを設定し、クラスタ認証情報をkubectlに渡します.
Dockerミラーのアップロード
Google Container Registryに画像をプッシュして、Google Cloud Platformで実行できるようにしましょう.
まず、Container Registryフォーマットとプロジェクト名を使用して$USER/inception_をマークします.serving画像、
次に、画像をレジストリにプッシュし、
Kubernetesの導入とサービスの作成
導入にはKubernetes導入によって制御される3つのinceptionが含まれています.inferenceサーバのコピー.Kubernetes Serviceは、External Load Balancerとともにレプリカを外部にコピーします.
例Kubernetes config inception_を使用します.k8s.yamlはそれらを作成します.
配置とペインのステータスを表示するには、次の手順に従います.
サービスのステータスを表示するには、次の手順に従います.
起動して実行するには時間がかかる場合があります.
サービス外部IPアドレスはLoadBalancer Ingressの隣にあります.
モデルのクエリー
ローカルホストの外部アドレスからサービスを問い合わせることができます.
Kubernetesサービスの起動モードに正常に導入されました.
このチュートリアルでは、Dockerコンテナで実行されるTensorFlow Servicesコンポーネントを使用してTensorFlow初期モデルをサービスする方法と、Kubernetesを使用してサービスクラスタを導入する方法を示します.
TensorFlowサービスの詳細については、TensorFlowサービス基本チュートリアルとTensorFlowサービス上級チュートリアルをお勧めします.
TensorFlow初期モデルの詳細については、TensorFlow in Inceptionをお勧めします.
セクション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サービスの起動モードに正常に導入されました.