diff --git a/core/general-client/src/client.cpp b/core/general-client/src/client.cpp index 4d3b99f2d8c00fd8dace85b219ce60b2b7444ff5..cc55dd30a5649afac98810fb83f98a837932a523 100644 --- a/core/general-client/src/client.cpp +++ b/core/general-client/src/client.cpp @@ -23,8 +23,7 @@ using configure::GeneralModelConfig; using baidu::paddle_serving::predictor::general_model::Request; using baidu::paddle_serving::predictor::general_model::Response; using baidu::paddle_serving::predictor::general_model::Tensor; -// paddle inference 2.1 support: FLOAT32, INT64, INT32, UINT8, INT8 -// will support: FLOAT16 +// support: FLOAT32, INT64, INT32, UINT8, INT8, FLOAT16 enum ProtoDataType { P_INT64 = 0, P_FLOAT32, @@ -431,7 +430,8 @@ int PredictorOutputs::ParseProto(const Response& res, output.tensor(idx).int_data().begin(), output.tensor(idx).int_data().begin() + size); } else if (fetch_name_to_type[name] == P_UINT8 - || fetch_name_to_type[name] == P_INT8) { + || fetch_name_to_type[name] == P_INT8 + || fetch_name_to_type[name] == P_FP16) { VLOG(2) << "fetch var [" << name << "]type=" << fetch_name_to_type[name]; string_data_map[name] = output.tensor(idx).tensor_content(); diff --git a/core/general-client/src/general_model.cpp b/core/general-client/src/general_model.cpp index fb71c0c9fc6e3680b8b51bad9ca891e41ef3a849..403119594c759a35d5dfd6251174627f367d9c65 100644 --- a/core/general-client/src/general_model.cpp +++ b/core/general-client/src/general_model.cpp @@ -25,8 +25,7 @@ using baidu::paddle_serving::Timer; using baidu::paddle_serving::predictor::general_model::Request; using baidu::paddle_serving::predictor::general_model::Response; using baidu::paddle_serving::predictor::general_model::Tensor; -// paddle inference support: FLOAT32, INT64, INT32, UINT8, INT8 -// will support: FLOAT16 +// support: FLOAT32, INT64, INT32, UINT8, INT8, FLOAT16 enum ProtoDataType { P_INT64 = 0, P_FLOAT32, diff --git a/core/general-server/op/general_reader_op.cpp b/core/general-server/op/general_reader_op.cpp index 23e4cc66e96be2c71f12f4ccc1df5f3b8a7f137c..2ad3e4cab6b77b305494c3833f0e3781ed0fd0b7 100644 --- a/core/general-server/op/general_reader_op.cpp +++ b/core/general-server/op/general_reader_op.cpp @@ -31,8 +31,7 @@ using baidu::paddle_serving::predictor::MempoolWrapper; using baidu::paddle_serving::predictor::general_model::Tensor; using baidu::paddle_serving::predictor::general_model::Request; using baidu::paddle_serving::predictor::PaddleGeneralModelConfig; -// paddle inference 2.1 support: FLOAT32, INT64, INT32, UINT8, INT8 -// will support: FLOAT16 +// support: FLOAT32, INT64, INT32, UINT8, INT8, FLOAT16 enum ProtoDataType { P_INT64 = 0, P_FLOAT32, diff --git a/python/paddle_serving_client/client.py b/python/paddle_serving_client/client.py index 9a8bb3db0180b8ce4617aeee6c7462da490884d8..648678f3afd9ffdc0af4c505779fc5eca0c42a37 100755 --- a/python/paddle_serving_client/client.py +++ b/python/paddle_serving_client/client.py @@ -551,6 +551,22 @@ class Client(object): tmp_lod = result_batch_handle.get_lod(mi, name) if np.size(tmp_lod) > 0: result_map["{}.lod".format(name)] = tmp_lod + elif self.fetch_names_to_type_[name] == float16_type: + # result_map[name] will be py::array(numpy array) + tmp_str = result_batch_handle.get_string_by_name( + mi, name) + result_map[name] = np.fromstring(tmp_str, dtype = np.float16) + if result_map[name].size == 0: + raise ValueError( + "Failed to fetch, maybe the type of [{}]" + " is wrong, please check the model file".format( + name)) + shape = result_batch_handle.get_shape(mi, name) + result_map[name].shape = shape + if name in self.lod_tensor_set: + tmp_lod = result_batch_handle.get_lod(mi, name) + if np.size(tmp_lod) > 0: + result_map["{}.lod".format(name)] = tmp_lod multi_result_map.append(result_map) ret = None if len(model_engine_names) == 1: