J'ai quelques modèles d'apprentissage automatique en cours d'exécution via TensorFlow Serving sur Kubernetes. J'aimerais pouvoir avoir un déploiement d'un modèle particulier, puis charger plusieurs versions.

Cela semble être plus facile que d'avoir à maintenir un déploiement Kubernetes distinct pour chaque version de chaque modèle que nous avons.

Mais il n'est pas évident de savoir comment transmettre la version ou la saveur de modèle que je souhaite appeler à l'aide de l'interface Python gRPC à TF Serving. Comment spécifier la version et la transmettre?

1
josephkibe 11 mars 2021 à 00:54

1 réponse

Meilleure réponse

Pour une raison quelconque, il n'est pas possible de mettre à jour la spécification du modèle en place lorsque vous créez la demande d'extraction. Au lieu de cela, vous devez créer séparément une instance de ModelSpec qui inclut la version souhaitée, puis la transmettre au constructeur pour la demande de prédiction.

Il convient également de souligner que vous devez utiliser le Int64Value spécifique à Google pour la version.

from google.protobuf.wrappers_pb2 import Int64Value
from tensorflow_serving.apis.model_pb2 import ModelSpec
from tensorflow_serving.apis import predict_pb2, get_model_metadata_pb2, \
                                    prediction_service_pb2_grpc
from tensorflow import make_tensor_proto
import grpc

model_name = 'mymodel'
input_name = 'model_input'
model_uri = 'mymodel.svc.cluster.local:8500'

X = # something that works

channel = grpc.insecure_channel(model_uri, options=MESSAGE_OPTIONS)
stub = prediction_service_pb2_grpc.PredictionServiceStub(channel)

version = Int64Value(value=1)
model_spec = ModelSpec(version=version, name=model_name, signature_name='serving_default')

request = predict_pb2.PredictRequest(model_spec=model_spec)
request.inputs[input_name].CopyFrom(make_tensor_proto(X.astype(np.float32), shape=X.shape))
result = stub.Predict(request, 1.0)
channel.close()
1
josephkibe 10 mars 2021 à 21:54