diff --git a/python/pipeline/operator.py b/python/pipeline/operator.py index 4d4717d66f6877e9b9832c7d1a346eea48ddc84b..155f4eaa9eccce52cea31f57dacc597436ff5e70 100644 --- a/python/pipeline/operator.py +++ b/python/pipeline/operator.py @@ -1589,13 +1589,15 @@ class RequestOp(Op): tensor: one tensor in request.tensors. Returns: - np.ndnumpy + np_data: np.ndnumpy, the tensor data is converted to numpy. + lod_info: np.ndnumpy, lod info of the tensor data, None default. """ if tensor is None or tensor.elem_type is None or tensor.name is None: _LOGGER.error("input params of tensor is wrong. tensor: {}".format( tensor)) return None + # Set dim shape dims = [] if tensor.shape is None: dims.append(1) @@ -1603,6 +1605,11 @@ class RequestOp(Op): for one_dim in tensor.shape: dims.append(one_dim) + # Set up 2-d lod tensor + np_lod = None + if len(tensor.lod) > 0: + np_lod = np.array(tensor.lod).astype(int32).reshape(2, -1) + np_data = None _LOGGER.info("proto_to_numpy, name:{}, type:{}, dims:{}".format( tensor.name, tensor.elem_type, dims)) @@ -1648,7 +1655,7 @@ class RequestOp(Op): "Sorry, the type {} of tensor {} is not supported.".format( tensor.elem_type, tensor.name)) - return np_data + return np_data, np_lod def unpack_request_package(self, request): """ @@ -1705,7 +1712,10 @@ class RequestOp(Op): dict_data[name] = new_string else: - dict_data[name] = self.proto_tensor_2_numpy(one_tensor) + np_data, np_lod = self.proto_tensor_2_numpy(one_tensor) + dict_data[name] = np_data + if np_lod is not None: + dict_data[name + ".lod"] = np_lod _LOGGER.info("RequestOp unpack one request. log_id:{}, clientip:{} \ name:{}, method:{}, time:{}" diff --git a/python/pipeline/pipeline_client.py b/python/pipeline/pipeline_client.py index cff7e9c3f77db88c762383b83dc466ed2a8240ae..a7aeb548008354bd1a17c4b39596575c6594e39b 100644 --- a/python/pipeline/pipeline_client.py +++ b/python/pipeline/pipeline_client.py @@ -98,6 +98,12 @@ class PipelineClient(object): else: # pack tensor format for key, value in feed_dict.items(): + + # skipping the lod feed_var. + # The declare of lod feed_var must be hebind the feed_var. + if ".lod" in key: + continue + one_tensor = req.tensors.add() one_tensor.name = key @@ -114,6 +120,13 @@ class PipelineClient(object): for one_dim in value.shape: one_tensor.shape.append(one_dim) + # set lod info, must be list type. + lod_key = key + ".lod" + if lod_key in feed_dict: + lod_list = feed_dict.get(lod_key) + if lod_list is not None: + one_tensor.lod.extend(lod_list) + # packed into bytes if use_tensor_bytes is True: np_bytes = BytesIO()