Tensorflow 如何解决运行在kubernetes中的Inception服务的部署问题

Tensorflow 如何解决运行在kubernetes中的Inception服务的部署问题,tensorflow,kubernetes,grpc,Tensorflow,Kubernetes,Grpc,我正在遵循工作流程,当我试图从本地主机进行推理时,一切都很好,直到通过k8s最终提供inception模型为止 我正在运行pods,$kubectl descripe serviceinception服务的输出与中的工作流建议的一致 然而,当运行推理时,事情不起作用。以下是跟踪: $bazel-bin/tensorflow_serving/example/inception_client --server=104.155.175.138:9000 --image=cat.jpg Traceba

我正在遵循工作流程,当我试图从本地主机进行推理时,一切都很好,直到通过k8s最终提供inception模型为止

我正在运行pods,
$kubectl descripe service
inception服务的输出与中的工作流建议的一致

然而,当运行推理时,事情不起作用。以下是跟踪:

$bazel-bin/tensorflow_serving/example/inception_client --server=104.155.175.138:9000 --image=cat.jpg

Traceback (most recent call last):
File "/home/dimlyus/serving/bazel-
bin/tensorflow_serving/example/inception_client.runfi
les/tf_serving/tensorflow_serving/example/inception_client.py", line 56, in 
tf.app.run()

File "/home/dimlyus/serving/bazel-
bin/tensorflow_serving/example/inception_client.runfi
les/org_tensorflow/tensorflow/python/platform/app.py", line 48, in run
_sys.exit(main(_sys.argv[:1] + flags_passthrough))

File "/home/dimlyus/serving/bazel-
bin/tensorflow_serving/example/inception_client.runfi
les/tf_serving/tensorflow_serving/example/inception_client.py", line 51, in 
main
result = stub.Predict(request, 60.0) # 10 secs timeout

File "/usr/local/lib/python2.7/dist-
packages/grpc/beta/_client_adaptations.py", line 32
4, in call
self._request_serializer, self._response_deserializer)

File "/usr/local/lib/python2.7/dist-
packages/grpc/beta/_client_adaptations.py", line 21
0, in _blocking_unary_unary
raise _abortion_error(rpc_error_call)
grpc.framework.interfaces.face.face.AbortionError: 
AbortionError(code=StatusCode.UNAVAILABLE, details="Connect Failed")
我在谷歌云上运行一切。设置是从一个GCE实例完成的,k8s在Google容器引擎中运行。k8s的设置遵循上面链接的工作流中的说明,并使用该文件

服务设置如下:

apiVersion: v1
kind: Service
metadata:
  labels:
    run: inception-service
  name: inception-service
spec:
  ports:
  - port: 9000
    targetPort: 9000
  selector:
    run: inception-service
  type: LoadBalancer

任何关于如何排除故障的建议都将不胜感激

错误消息似乎表明客户端无法连接到服务器。如果没有一些额外的信息,很难排除故障。如果您发布您的部署和服务配置,并提供一些有关环境的信息(它是否在云上运行?哪一个?您的安全规则是什么?负载平衡器?),我们可能会提供更好的帮助

但这里有一些你可以马上检查的东西:

  • 如果您在某种云环境(Amazon、Google、Azure等)中运行,它们都有安全规则,您需要显式打开运行kubernetes群集的节点上的端口。因此,您的Tensorflow部署/服务正在使用的每个端口都应该在控制器和工作节点上打开

  • 您是否仅为应用程序部署了
    部署
    ,还是同时部署了
    服务
    ?如果运行
    服务
    它将如何公开?您是否忘记启用
    节点端口


  • 更新:您的服务类型是负载平衡器。因此,应该在GCE中创建一个单独的负载平衡器。您需要获得负载平衡器的IP,并通过负载平衡器的IP访问服务。请参阅此链接中的“查找您的IP”部分。错误消息似乎表明您的客户端无法连接到服务器。如果没有一些额外的信息,很难排除故障。如果您发布您的部署和服务配置,并提供一些有关环境的信息(它是否在云上运行?哪一个?您的安全规则是什么?负载平衡器?),我们可能会提供更好的帮助

    但这里有一些你可以马上检查的东西:

  • 如果您在某种云环境(Amazon、Google、Azure等)中运行,它们都有安全规则,您需要显式打开运行kubernetes群集的节点上的端口。因此,您的Tensorflow部署/服务正在使用的每个端口都应该在控制器和工作节点上打开

  • 您是否仅为应用程序部署了
    部署
    ,还是同时部署了
    服务
    ?如果运行
    服务
    它将如何公开?您是否忘记启用
    节点端口


  • 更新:您的服务类型是负载平衡器。因此,应该在GCE中创建一个单独的负载平衡器。您需要获得负载平衡器的IP,并通过负载平衡器的IP访问服务。请参阅此链接中的“查找IP”部分

    我在几个tensorflow专家的帮助下找到了它。在我引入以下更改后,事情开始起作用:

    首先,我以以下方式更改了inception_k8s.yaml文件:

    资料来源:

    修改:

    其次,我公开了部署:

    kubectl expose deployments inception-deployment --type=“LoadBalancer” 
    
    我使用的是公开部署时生成的IP,而不是inception服务IP


    从这一点上,我能够从外部主机运行推断,在外部主机上使用TensorFlow服务和Kubernetes的服务初始模型中的命令安装客户端。

    我在几个TensorFlow专家的帮助下解决了这个问题。在我引入以下更改后,事情开始起作用:

    首先,我以以下方式更改了inception_k8s.yaml文件:

    资料来源:

    修改:

    其次,我公开了部署:

    kubectl expose deployments inception-deployment --type=“LoadBalancer” 
    
    我使用的是公开部署时生成的IP,而不是inception服务IP


    从这一点上,我可以从外部主机运行推断,在外部主机上使用TensorFlow Serving和Kubernetes的Serving Inception模型中的命令安装客户端。

    感谢您的关注。我用更多的信息更新了这个问题。我同时运行
    部署
    服务
    。该服务是通过yaml文件设置的。请查看更新问题中的代码段。您的服务类型是负载平衡器。因此,GCE中应该有一个单独的负载平衡。您需要获得负载平衡器的IP,并通过负载平衡器的IP访问服务。请参阅此链接中的“查找您的IP”部分我上面使用的服务器IP来自指定LoadBalancer入口IP的
    kubectl Descripte service inception service
    。还有什么我可以检查的吗?可能仍然是安全规则不允许主/工作节点上的端口。在运行kubectl Descripte service inception服务时,是否可以检查列出的节点端口?它应该是30000-33000范围内的端口,您需要在主节点/工作节点的安全规则中允许该端口。
    kubectl description service inception service
    返回NodePort:32760/TCP。这似乎与TensorFlow服务和Kubernetes的服务初始模型中的工作流一致。如何检查主节点/工作节点的安全规则中是否允许使用NodePort?感谢您的关注。我用更多的信息更新了这个问题。我同时运行
    部署
    服务
    。该服务是通过yaml文件设置的。请
    kubectl expose deployments inception-deployment --type=“LoadBalancer”