首页 Paddle框架 帖子详情
fluid.io.save_inference_model 报错
收藏
快速回复
Paddle框架 问答深度学习 1512 3
fluid.io.save_inference_model 报错
收藏
快速回复
Paddle框架 问答深度学习 1512 3

保存模型时报错
Traceback (most recent call last):
File "./httpserver.py", line 203, in
main_test()
File "./httpserver.py", line 145, in main_test
target_vars=[seg_ids, seg_scores, data_ids], executor=exe)
File "/run/chenliangyu/title_http/output/python/lib/python2.7/site-packages/paddle/fluid/io.py", line 1187, in save_inference_model
prepend_feed_ops(main_program, feeded_var_names)
File "/run/chenliangyu/title_http/output/python/lib/python2.7/site-packages/paddle/fluid/io.py", line 986, in prepend_feed_ops
out = global_block.var(name)
File "/run/chenliangyu/title_http/output/python/lib/python2.7/site-packages/paddle/fluid/framework.py", line 2234, in var
raise ValueError("var %s not in this block" % name)
ValueError: var input_mask_encoder not in this block

核心调用代码如下:
with fluid.program_guard(fluid.default_main_program(), startup_prog):
with fluid.unique_name.guard():
test_graph_vars, seg_ids, seg_scores, data_ids = create_model(
args,
pyreader_name='test_reader',
ernie_config=ernie_config,
is_prediction=args.do_dec)

test_prog = fluid.default_main_program().clone(for_test=True)

exe = fluid.Executor(place)
path = "./infer_model"
exe.run(startup_prog)
fluid.io.save_inference_model(dirname=path, feeded_var_names=['src_ids', "sent_ids","pos_ids", "input_mask", "input_mask_encoder", "tgt_ids", "init_scores", "parent_idx",
"tgt_input_mask", "tgt_start_pos", "data_ids"],
target_vars=[seg_ids, seg_scores, data_ids], executor=exe)

这个变量是存在的, 代码如下:
src_ids = layers.data(name="src_ids", shape=[-1, args.max_seq_len, 1], dtype='int64', lod_level=0)
sent_ids = layers.data(name="sent_ids", shape=[-1, args.max_seq_len, 1], dtype='int64', lod_level=0)
pos_ids = layers.data(name="pos_ids", shape=[-1, args.max_seq_len, 1], dtype='int64', lod_level=0)
input_mask = layers.data(name="input_mask", shape=[-1, args.max_seq_len, args.max_seq_len], dtype='float32',
lod_level=0)
input_mask_encoder = layers.data(name="input_mask_encoder", shape=[-1, args.max_seq_len, args.max_seq_len],
dtype='float32', lod_level=0)
tgt_ids = layers.data(name="tgt_ids", shape=[-1, args.max_seq_len, 1], dtype='int64', lod_level=2)
init_scores = layers.data(name="init_scores", shape=[-1, 1], dtype='float32', lod_level=2)
parent_idx = layers.data(name="parent_idx", shape=[-1], dtype='int32', lod_level=0)
tgt_input_mask = layers.data(name="tgt_input_mask", shape=[-1, 1, args.max_seq_len], dtype='float32', lod_level=0)
tgt_start_pos = layers.data(name="tgt_start_pos", shape=[-1, 1], dtype='int64', lod_level=0)
data_ids = layers.data(name="data_ids", shape=[-1, -1], dtype='int64', lod_level=0)

0
收藏
回复
全部评论(3)
时间顺序
AIStudio786501
#3 回复于2020-02

保存模型时报错
Traceback (most recent call last):
File "./httpserver.py", line 203, in
main_test()
File "./httpserver.py", line 145, in main_test
target_vars=[seg_ids, seg_scores, data_ids], executor=exe)
File "/run/chenliangyu/title_http/output/python/lib/python2.7/site-packages/paddle/fluid/io.py", line 1187, in save_inference_model
prepend_feed_ops(main_program, feeded_var_names)
File "/run/chenliangyu/title_http/output/python/lib/python2.7/site-packages/paddle/fluid/io.py", line 986, in prepend_feed_ops
out = global_block.var(name)
File "/run/chenliangyu/title_http/output/python/lib/python2.7/site-packages/paddle/fluid/framework.py", line 2234, in var
raise ValueError("var %s not in this block" % name)
ValueError: var input_mask_encoder not in this block
核心调用代码如下:
with fluid.program_guard(fluid.default_main_program(), startup_prog):
with fluid.unique_name.guard():
test_graph_vars, seg_ids, seg_scores, data_ids = create_model(
args,
pyreader_name='test_reader',
ernie_config=ernie_config,
is_prediction=args.do_dec)
test_prog = fluid.default_main_program().clone(for_test=True)
exe = fluid.Executor(place)
path = "./infer_model"
exe.run(startup_prog)
fluid.io.save_inference_model(dirname=path, feeded_var_names=['src_ids', "sent_ids","pos_ids", "input_mask", "input_mask_encoder", "tgt_ids", "init_scores", "parent_idx",
"tgt_input_mask", "tgt_start_pos", "data_ids"],
target_vars=[seg_ids, seg_scores, data_ids], executor=exe)
这个变量是存在的, 代码如下:
src_ids = layers.data(name="src_ids", shape=[-1, args.max_seq_len, 1], dtype='int64', lod_level=0)
sent_ids = layers.data(name="sent_ids", shape=[-1, args.max_seq_len, 1], dtype='int64', lod_level=0)
pos_ids = layers.data(name="pos_ids", shape=[-1, args.max_seq_len, 1], dtype='int64', lod_level=0)
input_mask = layers.data(name="input_mask", shape=[-1, args.max_seq_len, args.max_seq_len], dtype='float32',
lod_level=0)
input_mask_encoder = layers.data(name="input_mask_encoder", shape=[-1, args.max_seq_len, args.max_seq_len],
dtype='float32', lod_level=0)
tgt_ids = layers.data(name="tgt_ids", shape=[-1, args.max_seq_len, 1], dtype='int64', lod_level=2)
init_scores = layers.data(name="init_scores", shape=[-1, 1], dtype='float32', lod_level=2)
parent_idx = layers.data(name="parent_idx", shape=[-1], dtype='int32', lod_level=0)
tgt_input_mask = layers.data(name="tgt_input_mask", shape=[-1, 1, args.max_seq_len], dtype='float32', lod_level=0)
tgt_start_pos = layers.data(name="tgt_start_pos", shape=[-1, 1], dtype='int64', lod_level=0)
data_ids = layers.data(name="data_ids", shape=[-1, -1], dtype='int64', lod_level=0)

您好,可能有两个原因导致此问题:
1、变量不存在于 Block 0;
2、变量不在预测模型保存时提供输入输出节点的连通计算图中,在保存模型时被裁剪。

1.怎么确定是由哪个问题导致的?
2.如果不存在于 Block 0, 如何让变量存在于 Block 0?
3.如果变量不在连通计算图中,如何让变量加入到连通计算图中?

0
回复
AIStudio786501
#5 回复于2020-02

1.根据我的理解,我已经把所有的输入和输入都放到save_inference_model 的参数中。
2.有值班同学怀疑可能是用name获取变量,但是name被自动加了前缀,导致匹配不上导致的,经过我自己排查,已经排除了这种可能性。
3.我已将运行环境整理给值班同学,帮我看了一天,也没有看出问题。

0
回复
_
_lonely_dancer
#7 回复于2021-04

请问最后是如何解决的?

0
回复
需求/bug反馈?一键提issue告诉我们
发现bug?如果您知道修复办法,欢迎提pr直接参与建设飞桨~
在@后输入用户全名并按空格结束,可艾特全站任一用户