When I want to start Tensorflow Serving with platform_config_file like:
platform_configs: {
key: "tensorflow",
value: {
source_adapter_config: {
config: {
inter_op_parallelism_threads: 1
}
}
}
}
and I got error like:
[libprotobuf ERROR external/protobuf/src/google/protobuf/text_format.cc:299] Error parsing text-format tensorflow.serving.PlatformConfigMap: 5:19: Message type "google.protobuf.Any" has no field named "config".
2017-03-03 11:23:50.217710: F tensorflow_serving/model_servers/main.cc:267] Check failed: ::tensorflow::Status::OK() == (ParseProtoTextFile(file, &platform_config_map)) (OK vs. Invalid argument: Invalid protobuf file: './platform.conf')
You can use something like this:
platform_configs {
key: "tensorflow"
value {
source_adapter_config {
type_url: "type.googleapis.com/tensorflow.serving.SavedModelBundleSourceAdapterConfig"
value: "..."
}
}
}
The "..." in the config should be replaced by the serialized SavedModelBundleSourceAdapterConfig that you want to use.
Have you solved this problem?I face the same problem. I want to write a platform_configs, allow_soft_placement.what should i do. thanks
@baodingge
I faced pretty much the same problem and this is what I did:
~/protobuf/install/bin/protoc \
-I=$(pwd) \
-I=$(pwd)/tensorflow/ \
--python_out=/tmp \
$(pwd)/tensorflow_serving/servables/tensorflow/saved_model_bundle_source_adapter.proto
$(pwd)/tensorflow_serving/servables/tensorflow/session_bundle_config.proto
*pb2.py files by copying them to my Python modules path, e.g.:cp -r /tmp/tensorflow_serving $HOME/.local/lib/python3.5/site-packages/#!/usr/bin/env python3
from tensorflow_serving.servables.tensorflow import session_bundle_config_pb2
from tensorflow_serving.servables.tensorflow import saved_model_bundle_source_adapter_pb2
from tensorflow.core.protobuf import config_pb2
adapter = saved_model_bundle_source_adapter_pb2.SavedModelBundleSourceAdapterConfig(
legacy_config=session_bundle_config_pb2.SessionBundleConfig(
session_config=config_pb2.ConfigProto(
allow_soft_placement=True)))
print(adapter.SerializeToString())
"\xc2>\x04\x12\x028\x01"platform_configs: {
key: "tensorflow",
value: {
source_adapter_config: {
type_url: "type.googleapis.com/tensorflow.serving.SavedModelBundleSourceAdapterConfig",
value: "\xc2>\x04\x12\x028\x01"
}
}
}
Personally, I don't think that's a very intuitive way to configure anything but it does seem to work (for now).
based on the comment from @ales-t , I found more clear text-format
platform_configs {
key: "tensorflow"
value {
source_adapter_config {
[type.googleapis.com/tensorflow.serving.SavedModelBundleSourceAdapterConfig] {
legacy_config {
session_config {
gpu_options {
per_process_gpu_memory_fraction: 0.4
allow_growth: true
}
}
}
}
}
}
}
you can easily change session_config part to fit your need.
to generate this file, use this script:
import tensorflow as tf
from tensorflow_serving.config import platform_config_pb2
from tensorflow_serving.servables.tensorflow import session_bundle_config_pb2
from tensorflow_serving.servables.tensorflow import saved_model_bundle_source_adapter_pb2
session_config = tf.ConfigProto()
# config whatever you want
session_config.gpu_options.allow_growth = True
session_config.gpu_options.per_process_gpu_memory_fraction = 0.4
legacy_config=session_bundle_config_pb2.SessionBundleConfig(session_config=session_config)
adapter = saved_model_bundle_source_adapter_pb2.SavedModelBundleSourceAdapterConfig(legacy_config=legacy_config)
config_map = platform_config_pb2.PlatformConfigMap()
config_map.platform_configs['tensorflow'].source_adapter_config.Pack(adapter)
print(config_map)
and to generate the *_pb2.py files, as follow:
# run at root of tensorflow_serving repo
TARGET_DIR="$1"
python -m grpc.tools.protoc \
-I . -I ./tensorflow \
--python_out "$TARGET_DIR" \
tensorflow_serving/servables/tensorflow/saved_model_bundle_source_adapter.proto \
tensorflow_serving/servables/tensorflow/session_bundle_config.proto \
tensorflow_serving/config/platform_config.proto
pushd $TARGET_DIR
touch tensorflow_serving/__init__.py
touch tensorflow_serving/config/__init__.py
touch tensorflow_serving/servables/__init__.py
touch tensorflow_serving/servables/tensorflow/__init__.py
popd
also I put these scripts in this gist https://gist.github.com/cutewalker/58e1c4f71b5af4822bc732fd619ebda3
Pretty cool!! This saved my day. Hope this can help others.
@cutewalker there is some errors in running sh gen-*.sh,
could you help me out?
: not founding-proto-py.sh: 2: gen-tf-serving-proto-py.sh:
: not founding-proto-py.sh: 4: gen-tf-serving-proto-py.sh:
Missing output directives.
gen-tf-serving-proto-py.sh: 6: gen-tf-serving-proto-py.sh: -I: not found
gen-tf-serving-proto-py.sh: 7: gen-tf-serving-proto-py.sh: --python_out: not found
tensorflow_serving/servables/tensorflow/saved_model_bundle_source_adapter.proto: 1: tensorflow_serving/servables/tensorflow/saved_model_bundle_source_adapter.proto: syntax: not found
tensorflow_serving/servables/tensorflow/saved_model_bundle_source_adapter.proto: 3: tensorflow_serving/servables/tensorflow/saved_model_bundle_source_adapter.proto: import: not found
tensorflow_serving/servables/tensorflow/saved_model_bundle_source_adapter.proto: 5: tensorflow_serving/servables/tensorflow/saved_model_bundle_source_adapter.proto: package: not found
tensorflow_serving/servables/tensorflow/saved_model_bundle_source_adapter.proto: 7: tensorflow_serving/servables/tensorflow/saved_model_bundle_source_adapter.proto: //: Permission denied
tensorflow_serving/servables/tensorflow/saved_model_bundle_source_adapter.proto: 8: tensorflow_serving/servables/tensorflow/saved_model_bundle_source_adapter.proto: message: not found
tensorflow_serving/servables/tensorflow/saved_model_bundle_source_adapter.proto: 9: tensorflow_serving/servables/tensorflow/saved_model_bundle_source_adapter.proto: //: Permission denied
tensorflow_serving/servables/tensorflow/saved_model_bundle_source_adapter.proto: 10: tensorflow_serving/servables/tensorflow/saved_model_bundle_source_adapter.proto: //: Permission denied
tensorflow_serving/servables/tensorflow/saved_model_bundle_source_adapter.proto: 11: tensorflow_serving/servables/tensorflow/saved_model_bundle_source_adapter.proto: Syntax error: "(" unexpected
tensorflow_serving/servables/tensorflow/session_bundle_config.proto: 1: tensorflow_serving/servables/tensorflow/session_bundle_config.proto: syntax: not found
tensorflow_serving/servables/tensorflow/session_bundle_config.proto: 3: tensorflow_serving/servables/tensorflow/session_bundle_config.proto: import: not found
tensorflow_serving/servables/tensorflow/session_bundle_config.proto: 4: tensorflow_serving/servables/tensorflow/session_bundle_config.proto: import: not found
tensorflow_serving/servables/tensorflow/session_bundle_config.proto: 5: tensorflow_serving/servables/tensorflow/session_bundle_config.proto: import: not found
tensorflow_serving/servables/tensorflow/session_bundle_config.proto: 7: tensorflow_serving/servables/tensorflow/session_bundle_config.proto: package: not found
tensorflow_serving/servables/tensorflow/session_bundle_config.proto: 9: tensorflow_serving/servables/tensorflow/session_bundle_config.proto: //: Permission denied
tensorflow_serving/servables/tensorflow/session_bundle_config.proto: 10: tensorflow_serving/servables/tensorflow/session_bundle_config.proto: message: not found
tensorflow_serving/servables/tensorflow/session_bundle_config.proto: 11: tensorflow_serving/servables/tensorflow/session_bundle_config.proto: //: Permission denied
tensorflow_serving/servables/tensorflow/session_bundle_config.proto: 12: tensorflow_serving/servables/tensorflow/session_bundle_config.proto: //: Permission denied
tensorflow_serving/servables/tensorflow/session_bundle_config.proto: 13: tensorflow_serving/servables/tensorflow/session_bundle_config.proto: //: Permission denied
tensorflow_serving/servables/tensorflow/session_bundle_config.proto: 14: tensorflow_serving/servables/tensorflow/session_bundle_config.proto: //: Permission denied
tensorflow_serving/servables/tensorflow/session_bundle_config.proto: 15: tensorflow_serving/servables/tensorflow/session_bundle_config.proto: //: Permission denied
tensorflow_serving/servables/tensorflow/session_bundle_config.proto: 16: tensorflow_serving/servables/tensorflow/session_bundle_config.proto: //: Permission denied
tensorflow_serving/servables/tensorflow/session_bundle_config.proto: 17: tensorflow_serving/servables/tensorflow/session_bundle_config.proto: string: not found
tensorflow_serving/servables/tensorflow/session_bundle_config.proto: 19: tensorflow_serving/servables/tensorflow/session_bundle_config.proto: //: Permission denied
tensorflow_serving/servables/tensorflow/session_bundle_config.proto: 20: tensorflow_serving/servables/tensorflow/session_bundle_config.proto: //: Permission denied
tensorflow_serving/servables/tensorflow/session_bundle_config.proto: 21: tensorflow_serving/servables/tensorflow/session_bundle_config.proto: ConfigProto: not found
tensorflow_serving/servables/tensorflow/session_bundle_config.proto: 23: tensorflow_serving/servables/tensorflow/session_bundle_config.proto: Syntax error: "(" unexpected
gen-tf-serving-proto-py.sh: 10: gen-tf-serving-proto-py.sh: tensorflow_serving/config/platform_conf: not found
: not founding-proto-py.sh: 11: gen-tf-serving-proto-py.sh:
gen-tf-serving-proto-py.sh: 12: gen-tf-serving-proto-py.sh: pushd: not found
: not founding-proto-py.sh: 13: gen-tf-serving-proto-py.sh:
: not founding-proto-py.sh: 18: gen-tf-serving-proto-py.sh:
gen-tf-serving-proto-py.sh: 19: gen-tf-serving-proto-py.sh: popd: not found
Most helpful comment
based on the comment from @ales-t , I found more clear text-format
you can easily change session_config part to fit your need.
to generate this file, use this script:
and to generate the
*_pb2.pyfiles, as follow:also I put these scripts in this gist https://gist.github.com/cutewalker/58e1c4f71b5af4822bc732fd619ebda3