PaddlePaddle / models

Officially maintained, supported by PaddlePaddle, including CV, NLP, Speech, Rec, TS, big models and so on.
Apache License 2.0
6.88k stars 2.91k forks source link

pre_ids_emb = fluid.layers.embedding() error in c++ #5142

Open GeorgeBohw opened 3 years ago

GeorgeBohw commented 3 years ago

os: ubuntu with gpu paddle1.8

转换paddle到c++运行,下面两种情况,pyhon运行均正常,c++运行报错。 attention.py中的def attention_infer()函数:

情况1: pre_ids_emb = fluid.layers.embedding() 转化的模型在c++环境下运行出现错误:

0 std::string paddle::platform::GetTraceBackString<std::string const&>(std::string const&, char const, int) 1 paddle::platform::EnforceNotMet::EnforceNotMet(std::string const&, char const, int) 2 paddle::operators::LookupTableOp::InferShape(paddle::framework::InferShapeContext) const 3 paddle::framework::OperatorWithKernel::RunImpl(paddle::framework::Scope const&, paddle::platform::Place const&, paddle::framework::RuntimeContext) const 4 paddle::framework::OperatorWithKernel::RunImpl(paddle::framework::Scope const&, paddle::platform::Place const&) const 5 paddle::framework::OperatorBase::Run(paddle::framework::Scope const&, paddle::platform::Place const&) 6 paddle::framework::Executor::RunPartialPreparedContext(paddle::framework::ExecutorPrepareContext, paddle::framework::Scope, long, long, bool, bool, bool) 7 paddle::framework::Executor::RunPreparedContext(paddle::framework::ExecutorPrepareContext, paddle::framework::Scope, bool, bool, bool) 8 paddle::operators::WhileOp::RunImpl(paddle::framework::Scope const&, paddle::platform::Place const&) const 9 paddle::framework::OperatorBase::Run(paddle::framework::Scope const&, paddle::platform::Place const&) 10 paddle::framework::NaiveExecutor::Run() 11 paddle::AnalysisPredictor::ZeroCopyRun()

Error: ShapeError: The last dimensions of the 'Ids' tensor must be 1. But received Ids's last dimensions = 128, Ids's shape = [1, 128]. [Hint: Expected ids_dims[ids_rank - 1] == 1, but received ids_dims[ids_rank - 1]:128 != 1:1.] at (/home/george/paddle/paddle/fluid/operators/lookup_table_op.cc:51) [operator < lookup_table > error

情况2: pre_ids_emb = fluid.layers.embedding()改为pre_ids_emb = fluid.embedding() 转化的模型在c++环境下运行出现错误:

0 std::string paddle::platform::GetTraceBackString<std::string const&>(std::string const&, char const, int) 1 paddle::platform::EnforceNotMet::EnforceNotMet(std::string const&, char const, int) 2 long const paddle::framework::Tensor::data() const 3 paddle::operators::LookupTableV2CUDAKernel::Compute(paddle::framework::ExecutionContext const&) const 4 std::_Function_handler<void (paddle::framework::ExecutionContext const&), paddle::framework::OpKernelRegistrarFunctor<paddle::platform::CUDAPlace, false, 0ul, paddle::operators::LookupTableV2CUDAKernel, paddle::operators::LookupTableV2CUDAKernel, paddle::operators::LookupTableV2CUDAKernel >::operator()(char const, char const, int) const::{lambda(paddle::framework::ExecutionContext const&)#1}>::_M_invoke(std::_Any_data const&, paddle::framework::ExecutionContext const&) 5 paddle::framework::OperatorWithKernel::RunImpl(paddle::framework::Scope const&, paddle::platform::Place const&, paddle::framework::RuntimeContext) const 6 paddle::framework::OperatorWithKernel::RunImpl(paddle::framework::Scope const&, paddle::platform::Place const&) const 7 paddle::framework::OperatorBase::Run(paddle::framework::Scope const&, paddle::platform::Place const&) 8 paddle::framework::Executor::RunPartialPreparedContext(paddle::framework::ExecutorPrepareContext, paddle::framework::Scope, long, long, bool, bool, bool) 9 paddle::framework::Executor::RunPreparedContext(paddle::framework::ExecutorPrepareContext, paddle::framework::Scope, bool, bool, bool) 10 paddle::operators::WhileOp::RunImpl(paddle::framework::Scope const&, paddle::platform::Place const&) const 11 paddle::framework::OperatorBase::Run(paddle::framework::Scope const&, paddle::platform::Place const&) 12 paddle::framework::NaiveExecutor::Run() 13 paddle::AnalysisPredictor::ZeroCopyRun()

InvalidArgumentError: Tensor holds the wrong type, it holds float, but desires to be int64_t. [Hint: Expected valid == true, but received valid:0 != true:1.] at (/home/george/paddle/paddle/fluid/framework/tensor_impl.h:33) [operator < lookup_table_v2 > error]

ZeyuChen commented 3 years ago

可否描述下更多背景信息?是在尝试那类模型?