PaddlePaddle / PaddleTS

Awesome Easy-to-Use Deep Time Series Modeling based on PaddlePaddle, including comprehensive functionality modules like TSDataset, Analysis, Transform, Models, AutoTS, and Ensemble, etc., supporting versatile tasks like time series forecasting, representation learning, and anomaly detection, etc., featured with quick tracking of SOTA deep models.
Apache License 2.0
469 stars 115 forks source link

Paddle Inference 进行部署推理,build_ts_infer_input方法出错! #341

Closed jiangxinufo closed 5 months ago

jiangxinufo commented 1 year ago

加载已保存的模型

def load_model(self, load_pdmodel: str = '../model/save_model.pdmodel', load_pdiparams: str = '../model/save_model.pdiparams' ): config = paddle_infer.Config(load_pdmodel, load_pdiparams) self.predictor = paddle_infer.create_predictor(config) input_names = self.predictor.get_input_names() print(f"input_name: f{input_names}") import json with open("../model/save_model_model_meta") as f: self.json_data = json.load(f) print(self.json_data)

预测推理

def predict_ts(self,
               pre_tsdataset: TSDataset,
               cols,
               recursive: bool = False):
    val_dataset = self.data_transform(tsdataset=pre_tsdataset,
                                      cols=cols)
    from paddlets.utils.utils import build_ts_infer_input
    input_data = build_ts_infer_input(val_dataset, "../model/save_model_model_meta")

    for key, value in self.json_data['input_data'].items():
        input_handle1 = self.predictor.get_input_handle(key)
        # set batch_size=1
        value[0] = 1
        input_handle1.reshape(value)
        input_handle1.copy_from_cpu(input_data[key])

    self.predictor.run()
    output_names = self.predictor.get_output_names()
    output_handle = self.predictor.get_output_handle(output_names[0])
    output_data = output_handle.copy_to_cpu()
    print(output_data)

##############################################################################################

调用过程:

模型加载

fit_lstnet.load_model(load_pdmodel='../model/LSTNet.pdmodel', load_pdiparams='../model/LSTNet.pdiparams')

预测推理

fit_lstnet.predict_ts(pre_tsdataset=fit_lstnet.val_dataset, cols=target_cols)

执行load_model保存模型成功 执行predict_ts函数时build_ts_infer_input报错,报错信息如下: e[1me[35m--- Running analysis [ir_graph_build_pass]e[0m e[1me[35m--- Running analysis [ir_graph_clean_pass]e[0m e[1me[35m--- Running analysis [ir_analysis_pass]e[0m e[32m--- Running IR pass [simplify_with_basic_ops_pass]e[0m e[32m--- Running IR pass [layer_norm_fuse_pass]e[0m e[37m--- Fused 0 subgraphs into layer_norm op.e[0m e[32m--- Running IR pass [attention_lstm_fuse_pass]e[0m e[32m--- Running IR pass [seqconv_eltadd_relu_fuse_pass]e[0m e[32m--- Running IR pass [seqpool_cvm_concat_fuse_pass]e[0m e[32m--- Running IR pass [mul_lstm_fuse_pass]e[0m e[32m--- Running IR pass [fc_gru_fuse_pass]e[0m e[37m--- fused 0 pairs of fc gru patternse[0m e[32m--- Running IR pass [mul_gru_fuse_pass]e[0m e[32m--- Running IR pass [seq_concat_fc_fuse_pass]e[0m e[32m--- Running IR pass [gpu_cpu_squeeze2_matmul_fuse_pass]e[0m e[32m--- Running IR pass [gpu_cpu_reshape2_matmul_fuse_pass]e[0m e[32m--- Running IR pass [gpu_cpu_flatten2_matmul_fuse_pass]e[0m e[32m--- Running IR pass [matmul_v2_scale_fuse_pass]e[0m e[32m--- Running IR pass [gpu_cpu_map_matmul_v2_to_mul_pass]e[0m I1230 08:59:19.689038 23564 fuse_pass_base.cc:57] --- detected 2 subgraphs e[32m--- Running IR pass [gpu_cpu_map_matmul_v2_to_matmul_pass]e[0m e[32m--- Running IR pass [matmul_scale_fuse_pass]e[0m e[32m--- Running IR pass [gpu_cpu_map_matmul_to_mul_pass]e[0m e[32m--- Running IR pass [fc_fuse_pass]e[0m I1230 08:59:19.691967 23564 fuse_pass_base.cc:57] --- detected 2 subgraphs e[32m--- Running IR pass [repeated_fc_relu_fuse_pass]e[0m e[32m--- Running IR pass [squared_mat_sub_fuse_pass]e[0m e[32m--- Running IR pass [conv_bn_fuse_pass]e[0m e[32m--- Running IR pass [conv_eltwiseadd_bn_fuse_pass]e[0m e[32m--- Running IR pass [conv_transpose_bn_fuse_pass]e[0m e[32m--- Running IR pass [conv_transpose_eltwiseadd_bn_fuse_pass]e[0m e[32m--- Running IR pass [is_test_pass]e[0m e[32m--- Running IR pass [runtime_context_cache_pass]e[0m e[1me[35m--- Running analysis [ir_params_sync_among_devices_pass]e[0m e[1me[35m--- Running analysis [adjust_cudnn_workspace_size_pass]e[0m e[1me[35m--- Running analysis [inference_op_replace_pass]e[0m e[1me[35m--- Running analysis [ir_graph_to_program_pass]e[0m I1230 08:59:19.704661 23564 analysis_predictor.cc:1035] ======= optimize end ======= I1230 08:59:19.704661 23564 naive_executor.cc:102] --- skip [feed], feed -> past_target I1230 08:59:19.705637 23564 naive_executor.cc:102] --- skip [tmp_0], fetch -> fetch input_name: f['past_target'] {'model_type': 'forecasting', 'ancestor_classname_set': ['LSTNetRegressor', 'PaddleBaseModelImpl', 'PaddleBaseModel', 'BaseModel', 'Trainable', 'ABC', 'object'], 'modulename': 'paddlets.models.forecasting.dl.lstnet', 'size': {'in_chunk_len': 3600, 'out_chunk_len': 3600, 'skip_chunk_len': 0}, 'input_data': {'past_target': [None, 3600, 1]}} Traceback (most recent call last): File "E:/Paddle-release-2.2/PaddleTS/examples_self/fit_forecasting_model.py", line 410, in fit_lstnet.predict_ts(pre_tsdataset=fit_lstnet.val_dataset, cols=target_cols) File "E:/Paddle-release-2.2/PaddleTS/examples_self/fit_forecasting_model.py", line 284, in predict_ts input_data = build_ts_infer_input(val_dataset, "../model/LSTNet_model_meta") File "E:\Paddle-release-2.2\PaddleTS\paddlets\utils\utils.py", line 439, in build_ts_infer_input sample = next(iter(dataloader)) File "F:\CondaData\envs\paddlets\lib\site-packages\paddle\fluid\dataloader\dataloader_iter.py", line 298, in next six.reraise(*sys.exc_info()) File "F:\CondaData\envs\paddlets\lib\site-packages\six.py", line 719, in reraise raise value File "F:\CondaData\envs\paddlets\lib\site-packages\paddle\fluid\dataloader\dataloader_iter.py", line 272, in next data = self._reader.read_next_var_list() StopIteration

jiangxinufo commented 1 year ago

LSTNet_model_meta文件内容如下: {'model_type': 'forecasting', 'ancestor_classname_set': ['LSTNetRegressor', 'PaddleBaseModelImpl', 'PaddleBaseModel', 'BaseModel', 'Trainable', 'ABC', 'object'], 'modulename': 'paddlets.models.forecasting.dl.lstnet', 'size': {'in_chunk_len': 3600, 'out_chunk_len': 3600, 'skip_chunk_len': 0}, 'input_data': {'past_target': [None, 3600, 1]}}

a10210532 commented 1 year ago

辛苦打印一下 val_dataset.columns 以及 val_dataset, 然后截图看一下~

jiangxinufo commented 1 year ago

val_dataset.columns如下: {'L#SVR4_VAR476_A': 'target', 'L#SVR4_VAR833_A': 'observed_cov', 'L#SVR4_VAR830_A': 'observed_cov', 'L#SVR4_VAR350_A': 'observed_cov', 'L#SVR4_VAR340_A': 'observed_cov', 'L#SVR4_VAR342_A': 'observed_cov', 'L#SVR4_VAR344_A': 'observed_cov'}

val_dataset如下: L#SVR4_VAR476_A ... L#SVR4_VAR344_A Date ...
2022-07-15 00:00:09 86.4987 ... 0.0 2022-07-15 00:00:14 86.4960 ... 0.0 2022-07-15 00:00:19 86.3754 ... 0.0 2022-07-15 00:00:24 86.2714 ... 0.0 2022-07-15 00:00:29 86.1912 ... 0.0 ... ... ... ... 2022-07-30 10:45:29 0.0000 ... NaN 2022-07-30 10:45:34 0.0000 ... NaN 2022-07-30 10:45:39 0.0000 ... NaN 2022-07-30 10:45:44 0.0000 ... NaN 2022-07-30 10:45:49 0.0000 ... NaN

[266949 rows x 7 columns]

jiangxinufo commented 1 year ago

image

a10210532 commented 1 year ago

目前看数据应该是observed 长度没有和target对齐,导致构建predict数据的时候报错;可以尝试补充observed数据或者直接删掉(但是LSTNet模型本身在适配paddle inference的时候有一些问题,建议换个模型,如mlp、rnn等)

jiangxinufo commented 1 year ago

LSTNet补充数据删除影响的列后,仍然报同样的错误,我在尝试RNN,LSTNet模型使用paddle inference进行部署,之后会更新吗?

jiangxinufo commented 1 year ago

image

jiangxinufo commented 1 year ago

RNN同样问题

a10210532 commented 1 year ago

目前我这边没有复现出你的问题,可以check一下版本是否是 1.1.0~

jiangxinufo commented 1 year ago

好的,谢谢,已更新,稍后测试

gitmhg commented 1 year ago

我也遇到同样的问题

gitmhg commented 1 year ago

我也遇到同样的问题