diff --git a/core/general-client/src/general_model.cpp b/core/general-client/src/general_model.cpp index d4e54c2ac04cf84b2a036f7abe0d426e6f186699..613abf9233610d170bce4386798662f78887edf7 100644 --- a/core/general-client/src/general_model.cpp +++ b/core/general-client/src/general_model.cpp @@ -285,22 +285,16 @@ int PredictorClient::batch_predict( // int idx = _fetch_name_to_idx[name]; if (_fetch_name_to_type[name] == 0) { VLOG(2) << "ferch var " << name << "type int"; - model._int64_value_map[name].resize( - output.insts(0).tensor_array(idx).int64_data_size()); int size = output.insts(0).tensor_array(idx).int64_data_size(); - for (int i = 0; i < size; ++i) { - model._int64_value_map[name][i] = - output.insts(0).tensor_array(idx).int64_data(i); - } + model._int64_value_map[name] = std::vector( + output.insts(0).tensor_array(idx).int64_data().begin(), + output.insts(0).tensor_array(idx).int64_data().begin() + size); } else { VLOG(2) << "fetch var " << name << "type float"; - model._float_value_map[name].resize( - output.insts(0).tensor_array(idx).float_data_size()); int size = output.insts(0).tensor_array(idx).float_data_size(); - for (int i = 0; i < size; ++i) { - model._float_value_map[name][i] = - output.insts(0).tensor_array(idx).float_data(i); - } + model._float_value_map[name] = std::vector( + output.insts(0).tensor_array(idx).float_data().begin(), + output.insts(0).tensor_array(idx).float_data().begin() + size); } idx += 1; } @@ -564,22 +558,16 @@ int PredictorClient::numpy_predict( // int idx = _fetch_name_to_idx[name]; if (_fetch_name_to_type[name] == 0) { VLOG(2) << "ferch var " << name << "type int"; - model._int64_value_map[name].resize( - output.insts(0).tensor_array(idx).int64_data_size()); int size = output.insts(0).tensor_array(idx).int64_data_size(); - for (int i = 0; i < size; ++i) { - model._int64_value_map[name][i] = - output.insts(0).tensor_array(idx).int64_data(i); - } + model._int64_value_map[name] = std::vector( + output.insts(0).tensor_array(idx).int64_data().begin(), + output.insts(0).tensor_array(idx).int64_data().begin() + size); } else { VLOG(2) << "fetch var " << name << "type float"; - model._float_value_map[name].resize( - output.insts(0).tensor_array(idx).float_data_size()); int size = output.insts(0).tensor_array(idx).float_data_size(); - for (int i = 0; i < size; ++i) { - model._float_value_map[name][i] = - output.insts(0).tensor_array(idx).float_data(i); - } + model._float_value_map[name] = std::vector( + output.insts(0).tensor_array(idx).float_data().begin(), + output.insts(0).tensor_array(idx).float_data().begin() + size); } idx += 1; } diff --git a/doc/COMPILE.md b/doc/COMPILE.md index f4a6639bdb38fac97662084f7d927d24b6179717..734d32d8ff60aee69c4267cfa4b00e96514bf389 100644 --- a/doc/COMPILE.md +++ b/doc/COMPILE.md @@ -43,7 +43,7 @@ In the default centos7 image we provide, the Python path is `/usr/bin/python`. I ### Integrated CPU version paddle inference library ``` shell -mkdir build && cd build +mkdir server-build-cpu && cd server-build-cpu cmake -DPYTHON_INCLUDE_DIR=$PYTHONROOT/include/python2.7/ -DPYTHON_LIBRARIES=$PYTHONROOT/lib/libpython2.7.so -DPYTHON_EXECUTABLE=$PYTHONROOT/bin/python -DSERVER=ON .. make -j10 ``` @@ -53,7 +53,7 @@ you can execute `make install` to put targets under directory `./output`, you ne ### Integrated GPU version paddle inference library ``` shell -mkdir build && cd build +mkdir server-build-gpu && cd server-build-gpu cmake -DPYTHON_INCLUDE_DIR=$PYTHONROOT/include/python2.7/ -DPYTHON_LIBRARIES=$PYTHONROOT/lib/libpython2.7.so -DPYTHON_EXECUTABLE=$PYTHONROOT/bin/python -DSERVER=ON -DWITH_GPU=ON .. make -j10 ``` @@ -65,7 +65,7 @@ execute `make install` to put targets under directory `./output` ## Compile Client ``` shell -mkdir build && cd build +mkdir client-build && cd client-build cmake -DPYTHON_INCLUDE_DIR=$PYTHONROOT/include/python2.7/ -DPYTHON_LIBRARIES=$PYTHONROOT/lib/libpython2.7.so -DPYTHON_EXECUTABLE=$PYTHONROOT/bin/python -DCLIENT=ON .. make -j10 ``` @@ -75,7 +75,7 @@ execute `make install` to put targets under directory `./output` ## Compile the App ```bash -mkdir build && cd build +mkdir app-build && cd app-build cmake -DPYTHON_INCLUDE_DIR=$PYTHONROOT/include/python2.7/ -DPYTHON_LIBRARIES=$PYTHONROOT/lib/libpython2.7.so -DPYTHON_EXECUTABLE=$PYTHONROOT/bin/python -DAPP=ON .. make ``` diff --git a/doc/COMPILE_CN.md b/doc/COMPILE_CN.md index d8fd277131d7d169c1a47689e15556e5d10a0fdb..1d5d60bdff34a2561ca830faf8fe3404a4a9fd96 100644 --- a/doc/COMPILE_CN.md +++ b/doc/COMPILE_CN.md @@ -43,7 +43,7 @@ export PYTHONROOT=/usr/ ### 集成CPU版本Paddle Inference Library ``` shell -mkdir build && cd build +mkdir server-build-cpu && cd server-build-cpu cmake -DPYTHON_INCLUDE_DIR=$PYTHONROOT/include/python2.7/ -DPYTHON_LIBRARIES=$PYTHONROOT/lib/libpython2.7.so -DPYTHON_EXECUTABLE=$PYTHONROOT/bin/python -DSERVER=ON .. make -j10 ``` @@ -53,7 +53,7 @@ make -j10 ### 集成GPU版本Paddle Inference Library ``` shell -mkdir build && cd build +mkdir server-build-gpu && cd server-build-gpu cmake -DPYTHON_INCLUDE_DIR=$PYTHONROOT/include/python2.7/ -DPYTHON_LIBRARIES=$PYTHONROOT/lib/libpython2.7.so -DPYTHON_EXECUTABLE=$PYTHONROOT/bin/python -DSERVER=ON -DWITH_GPU=ON .. make -j10 ``` @@ -65,7 +65,7 @@ make -j10 ## 编译Client部分 ``` shell -mkdir build && cd build +mkdir client-build && cd client-build cmake -DPYTHON_INCLUDE_DIR=$PYTHONROOT/include/python2.7/ -DPYTHON_LIBRARIES=$PYTHONROOT/lib/libpython2.7.so -DPYTHON_EXECUTABLE=$PYTHONROOT/bin/python -DCLIENT=ON .. make -j10 ``` @@ -75,7 +75,7 @@ make -j10 ## 编译App部分 ```bash -mkdir build && cd build +mkdir app-build && cd app-build cmake -DPYTHON_INCLUDE_DIR=$PYTHONROOT/include/python2.7/ -DPYTHON_LIBRARIES=$PYTHONROOT/lib/libpython2.7.so -DPYTHON_EXECUTABLE=$PYTHONROOT/bin/python -DCMAKE_INSTALL_PREFIX=./output -DAPP=ON .. make ``` diff --git a/doc/LATEST_PACKAGES.md b/doc/LATEST_PACKAGES.md index 8756743a5c23778ea2d4753a693a272d5f6eb992..8dc196c0b2d91262c284edcbf5d724f11d200713 100644 --- a/doc/LATEST_PACKAGES.md +++ b/doc/LATEST_PACKAGES.md @@ -3,45 +3,45 @@ ## CPU server ### Python 3 ``` -https://paddle-serving.bj.bcebos.com/whl/paddle_serving_server-0.3.0-py3-none-any.whl +https://paddle-serving.bj.bcebos.com/whl/paddle_serving_server-0.3.1-py3-none-any.whl ``` ### Python 2 ``` -https://paddle-serving.bj.bcebos.com/whl/paddle_serving_server-0.3.0-py2-none-any.whl +https://paddle-serving.bj.bcebos.com/whl/paddle_serving_server-0.3.1-py2-none-any.whl ``` ## GPU server ### Python 3 ``` -https://paddle-serving.bj.bcebos.com/whl/paddle_serving_server_gpu-0.3.0-py3-none-any.whl +https://paddle-serving.bj.bcebos.com/whl/paddle_serving_server_gpu-0.3.1-py3-none-any.whl ``` ### Python 2 ``` -https://paddle-serving.bj.bcebos.com/whl/paddle_serving_server_gpu-0.3.0-py2-none-any.whl +https://paddle-serving.bj.bcebos.com/whl/paddle_serving_server_gpu-0.3.1-py2-none-any.whl ``` ## Client ### Python 3.7 ``` -https://paddle-serving.bj.bcebos.com/whl/paddle_serving_client-0.3.0-cp37-none-manylinux1_x86_64.whl +https://paddle-serving.bj.bcebos.com/whl/paddle_serving_client-0.3.1-cp37-none-any.whl ``` ### Python 3.6 ``` -https://paddle-serving.bj.bcebos.com/whl/paddle_serving_client-0.3.0-cp36-none-manylinux1_x86_64.whl +https://paddle-serving.bj.bcebos.com/whl/paddle_serving_client-0.3.1-cp36-none-any.whl ``` ### Python 2.7 ``` -https://paddle-serving.bj.bcebos.com/whl/paddle_serving_client-0.3.0-cp27-none-manylinux1_x86_64.whl +https://paddle-serving.bj.bcebos.com/whl/paddle_serving_client-0.3.1-cp27-none-any.whl ``` ## App ### Python 3 ``` -https://paddle-serving.bj.bcebos.com/whl/paddle_serving_app-0.1.0-py3-none-any.whl +https://paddle-serving.bj.bcebos.com/whl/paddle_serving_app-0.1.1-py3-none-any.whl ``` ### Python 2 ``` -https://paddle-serving.bj.bcebos.com/whl/paddle_serving_app-0.1.0-py2-none-any.whl +https://paddle-serving.bj.bcebos.com/whl/paddle_serving_app-0.1.1-py2-none-any.whl ``` diff --git a/python/examples/fit_a_line/test_multilang_client.py b/python/examples/fit_a_line/test_multilang_client.py index 11b12352137b553fcadc4bb7c76c2036664287fb..91732c5fa947293b3b958ffdfc2dbea53b27db9a 100644 --- a/python/examples/fit_a_line/test_multilang_client.py +++ b/python/examples/fit_a_line/test_multilang_client.py @@ -14,7 +14,10 @@ # pylint: disable=doc-string-missing from paddle_serving_client import MultiLangClient +import functools import sys +import time +import threading client = MultiLangClient() #client.load_client_config(sys.argv[1]) @@ -26,11 +29,22 @@ test_reader = paddle.batch( paddle.dataset.uci_housing.test(), buf_size=500), batch_size=1) -ret = [] +complete_task_count = [0] +lock = threading.Lock() + + +def call_back(call_future, data): + fetch_map = call_future.result() + print("{} {}".format(fetch_map["price"][0], data[0][1][0])) + with lock: + complete_task_count[0] += 1 + + +task_count = 0 for data in test_reader(): future = client.predict(feed={"x": data[0][0]}, fetch=["price"], asyn=True) - ret.append(future) + task_count += 1 + future.add_done_callback(functools.partial(call_back, data=data)) -for future in ret: - fetch_map = future.result() - print("{} {}".format(fetch_map["price"][0], data[0][1][0])) +while complete_task_count[0] != task_count: + time.sleep(0.1) diff --git a/python/paddle_serving_app/version.py b/python/paddle_serving_app/version.py index c91808f95e7a5b62729eb630a3203ad42f7a5889..92ef4bed8a2fa14f0f7e686f0424db23a1e7d227 100644 --- a/python/paddle_serving_app/version.py +++ b/python/paddle_serving_app/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. """ Paddle Serving App version string """ -serving_app_version = "0.1.0" +serving_app_version = "0.1.1" diff --git a/python/paddle_serving_client/__init__.py b/python/paddle_serving_client/__init__.py index ca5e63da6e63afa647425293a4f73ef973a39ccc..4366493dfde51da693df30cad978ef5ce8a935aa 100644 --- a/python/paddle_serving_client/__init__.py +++ b/python/paddle_serving_client/__init__.py @@ -399,11 +399,17 @@ class MultiLangClient(object): req = pb2.EmptyRequest() self._config = self.stub_.get_config(req) self._parse_model_config(self._config.proto_txt) - #print("config:", self._config) def connect(self, endpoint, use_remote_config=True): - self.channel_ = grpc.insecure_channel(endpoint[0]) #TODO - self.stub_ = grpc_pb2.MultiLangGeneralModelServiceStub(self.channel_) + # https://github.com/tensorflow/serving/issues/1382 + options = [('grpc.max_receive_message_length', 512 * 1024 * 1024), + ('grpc.max_send_message_length', 512 * 1024 * 1024), + ('grpc.max_receive_message_length', 512 * 1024 * 1024)] + + self.channel_ = grpc.insecure_channel( + endpoint[0], options=options) #TODO + self.stub_ = multi_lang_general_model_service_pb2_grpc.MultiLangGeneralModelServiceStub( + self.channel_) if use_remote_config: self._load_client_config() @@ -442,7 +448,6 @@ class MultiLangClient(object): def _pack_feed_data(self, feed, fetch, is_python): req = multi_lang_general_model_service_pb2.Request() req.fetch_var_names.extend(fetch) - req.feed_var_names.extend(feed.keys()) req.is_python = is_python feed_batch = None if isinstance(feed, dict): @@ -451,6 +456,7 @@ class MultiLangClient(object): feed_batch = feed else: raise Exception("{} not support".format(type(feed))) + req.feed_var_names.extend(feed_batch[0].keys()) init_feed_names = False for feed_data in feed_batch: inst = multi_lang_general_model_service_pb2.FeedInst() @@ -527,6 +533,9 @@ class MultiLangClient(object): return unpack_resp + def get_feed_names(self): + return self.feed_names_ + def predict(self, feed, fetch, @@ -559,3 +568,10 @@ class MultiLangPredictFuture(object): def result(self): resp = self.call_future_.result() return self.callback_func_(resp) + + def add_done_callback(self, fn): + def __fn__(call_future): + assert call_future == self.call_future_ + fn(self) + + self.call_future_.add_done_callback(__fn__) diff --git a/python/paddle_serving_client/version.py b/python/paddle_serving_client/version.py index 5a1f35c598f044e80cff12ce661ff80a61647543..4e024f00030d1fcf9a5eec7a2d8aec6d7c029251 100644 --- a/python/paddle_serving_client/version.py +++ b/python/paddle_serving_client/version.py @@ -12,6 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. """ Paddle Serving Client version string """ -serving_client_version = "0.3.0" -serving_server_version = "0.3.0" -module_proto_version = "0.3.0" +serving_client_version = "0.3.1" +serving_server_version = "0.3.1" +module_proto_version = "0.3.1" diff --git a/python/paddle_serving_server/version.py b/python/paddle_serving_server/version.py index 5a1f35c598f044e80cff12ce661ff80a61647543..4e024f00030d1fcf9a5eec7a2d8aec6d7c029251 100644 --- a/python/paddle_serving_server/version.py +++ b/python/paddle_serving_server/version.py @@ -12,6 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. """ Paddle Serving Client version string """ -serving_client_version = "0.3.0" -serving_server_version = "0.3.0" -module_proto_version = "0.3.0" +serving_client_version = "0.3.1" +serving_server_version = "0.3.1" +module_proto_version = "0.3.1" diff --git a/python/paddle_serving_server_gpu/version.py b/python/paddle_serving_server_gpu/version.py index 5a1f35c598f044e80cff12ce661ff80a61647543..4e024f00030d1fcf9a5eec7a2d8aec6d7c029251 100644 --- a/python/paddle_serving_server_gpu/version.py +++ b/python/paddle_serving_server_gpu/version.py @@ -12,6 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. """ Paddle Serving Client version string """ -serving_client_version = "0.3.0" -serving_server_version = "0.3.0" -module_proto_version = "0.3.0" +serving_client_version = "0.3.1" +serving_server_version = "0.3.1" +module_proto_version = "0.3.1" diff --git a/tools/python_tag.py b/tools/python_tag.py index 7c0fb5aa9928bb83c51df698b2f66df17793feb1..9ad7e07d6d1996dbd48e32f9a8d13d09df45c818 100644 --- a/tools/python_tag.py +++ b/tools/python_tag.py @@ -15,6 +15,6 @@ from wheel.pep425tags import get_abbr_impl, get_impl_ver, get_abi_tag import re with open("setup.cfg", "w") as f: - line = "[bdist_wheel]\npython-tag={0}{1}\nplat-name=manylinux1_x86_64".format( - get_abbr_impl(), get_impl_ver()) + line = "[bdist_wheel]\npython-tag={0}{1}".format(get_abbr_impl(), + get_impl_ver()) f.write(line)