Closed lovychen closed 1 month ago
你好,现在仅推荐这种方式推理: import paddle import sys
import paddle.inference as paddle_infer` model_file = "./layer_model/model" params_file=".//layer_model/params" config = paddle_infer.Config(model_file, params_file)
谢谢回复 ; 当前问题已解决,后续升级为您说的推理方式:
根据报错再阅读了官方文档发现,当前转换的参数的二进制格式和推理所需要的二进制不符合
configs (dict,可选) – 其他配置选项,目前支持以下选项:(1)use_binary_format(bool)- 如果被保存的对象是静态图的 Tensor,你可以指定这个参数。如果被指定为 True,这个 Tensor 会被保存为由 paddle 定义的二进制格式的文件;否则这个 Tensor 被保存为 pickle 格式。默认为 False 。
原始拆分代码:
new_dict[new_name] = value
value_all.append(value)
paddle.save(new_dict,model_path_main + "/layer_model/"+new_name)
修改后的代码:不需要转为numpy,直接保存tensor,同时增加配置选项use_binary_format=True,问题解决:
paddle.save(model_2[each] ,model_path_main + "/layer_model/"+new_name,use_binary_format=True)
模型推理报错,请教出现错误原因
我用paddle版本,paddlepaddle-gpu 2.6.1 通过torch2paddle,转换得到模型文件目录:
├── inference_model │ ├── model.pdiparams │ ├── model.pdiparams.info │ └── model.pdmodel ├── layer_model │ ├──
__ model__ -> ../inference_model/model.pdmodel
│ ├──__params__ -> ../inference_model/model.pdiparams
│ ├──sentence_transformer_0.w_0
│ └──sentence_transformer_0.w_1
├── model.pdparams ├── pycache │ └── x2paddle_code.cpython-311.pyc └── x2paddle_code.py目前:采用这种方式进行推理,结果正确:
但是线上目前是老的推理服务:需要把 model.pdiparams 拆分 为层次结构,也就是这种结构: │ ├──
__model__ -> ../inference_model/model.pdmodel
(由原始软链过来) │ ├──sentence_transformer_0.w_0
│ └──sentence_transformer_0.w_1
目前拆分后通过这个函数导入的过程中: 代码:会自动寻找model,然后根据层次结构文件,匹配文件名,读取向量报错:
另一种方式:work,没有异常
补充拆分的代码:
问题是: 1、老的版本paddle,所存储的 model 是否等同于新版本的 model.pdmodel,是否能通过从命名进行使用; 2、这样的拆分是否正确呢,试了多次拆分,转numpy or不转,存储成dict,都不work,报的同样的错误; 3、该错误是由于 model 版本的不一致造成的呢,还是由于拆分的向量不对造成的呢;