PaddlePaddle / Paddle

PArallel Distributed Deep LEarning: Machine Learning Framework from Industrial Practice (『飞桨』核心框架,深度学习&机器学习高性能单机、分布式训练和跨平台部署)
http://www.paddlepaddle.org/
Apache License 2.0
22.2k stars 5.57k forks source link

CAPI预测过程报错求助 #12373

Closed HugoLian closed 6 years ago

HugoLian commented 6 years ago

我的数据有35个slots,预测的时候发现无论是35个全部输入还是只输入1个,都会报相同的错误,下面只粘贴输入一个slot的代码,请帮忙看一下吧!

long size;
void* buf = read_config(CONFIG_BIN, &size);
paddle_gradient_machine machine;
CHECK(paddle_gradient_machine_create_for_inference(&machine, buf, (int)size));
CHECK(paddle_gradient_machine_load_parameter_from_disk(machine, MODEL_PATH));

paddle_arguments in_args = paddle_arguments_create_none();
CHECK(paddle_arguments_resize(in_args, 35));
int id_time[] = {22};
paddle_ivector time_array = paddle_ivector_create(id_time, 1, false, false);
CHECK(paddle_arguments_set_ids(in_args, 0, time_array));

paddle_arguments out_args = paddle_arguments_create_none();
CHECK(paddle_gradient_machine_forward(machine, in_args, out_args, ,false));
.......

然后每次运行到这里都会报相同的错:

I0726 10:46:55.752382  3827 Util.cpp:166] commandline:  --use_gpu=False 
I0726 10:46:55.844450  3827 GradientMachine.cpp:83] Loading parameters from models/model_qb_tower
F0726 10:46:55.911376  3827 MemoryHandle.cpp:49] Check failed: size != 0  allocate 0 bytes
*** Check failure stack trace: ***
    @     0x7f16c769b41d  google::LogMessage::Fail()
    @     0x7f16c769eecc  google::LogMessage::SendToLog()
    @     0x7f16c769af43  google::LogMessage::Flush()
    @     0x7f16c76a03de  google::LogMessageFatal::~LogMessageFatal()
    @     0x7f16c79980e9  paddle::CpuMemoryHandle::CpuMemoryHandle()
    @     0x7f16c7973eb7  paddle::CpuMatrix::CpuMatrix()
    @     0x7f16c7974166  paddle::Matrix::create()
    @     0x7f16c79845b1  paddle::Matrix::resizeOrCreate()
    @     0x7f16c7783147  paddle::Layer::resetSpecifyOutput()
    @     0x7f16c77833c4  paddle::Layer::resetOutput()
    @     0x7f16c7735c41  paddle::MixedLayer::forward()
    @     0x7f16c782e42d  paddle::NeuralNetwork::forward()
    @     0x7f16c76972e6  paddle_gradient_machine_forward
    @           0x41b4ba  main
    @     0x7f16bcdf0bd5  __libc_start_main
    @           0x41f415  (unknown)
    @              (nil)  (unknown)
Aborted (core dumped)

请问这是为什么呢?

HugoLian commented 6 years ago

CHECK(paddle_gradient_machine_load_parameter_from_disk(machine, MODEL_PATH)); MODEL_PATH中的模型文件其实挺大的,但是到这一步几乎无耗时,感觉没有读入一个大文件进去 如果把MODEL_PATH的路径改成一个不存在的地址会报错参数找不到, 如果把这句注销掉不执行,会报告上面相同的错误,所以感觉是paddle_gradient_machine_load_parameter_from_disk 加载数据没有生效,请问是为什么呢?

Superjomn commented 6 years ago

MODEL_PATH 这里的文件是参数文件吗,感觉是 load 失败了。

参考下 example,看看有啥 diff https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/legacy/capi/examples/model_inference

HugoLian commented 6 years ago

@Superjomn 是模型文件,后来我模型文件和网络参数merge到一个bin文件,然后通过 paddle_gradient_machine_create_for_inference() 这个函数加载的,好像可以了。 刚才那个问题可能是引入了空数据在成的,capi当一个slot为空做预测的时候就会出size != 0的错误吧。。