Serving: Is there an example of platform_config_file

Created on 3 Mar 2017  路  6Comments  路  Source: tensorflow/serving

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')

Most helpful comment

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

All 6 comments

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
  • install the generated *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/
  • write a Python script to generate the serialized protocol buffer which contains the required configuration:
#!/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())
  • the script outputs a serialized sequence of bytes, in this case "\xc2>\x04\x12\x028\x01"
  • you can put that in your platform config file, arriving finally at this:
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

Was this page helpful?
0 / 5 - 0 ratings

Related issues

cchung100m picture cchung100m  路  4Comments

prateekgupta11 picture prateekgupta11  路  4Comments

OmriShiv picture OmriShiv  路  3Comments

akkiagrawal94 picture akkiagrawal94  路  3Comments

vikeshkhanna picture vikeshkhanna  路  3Comments