使用paddlenlp训练模型后使用paddle.jit.save()保存模型,使用paddle.jit.load()加载后无法使用
在使用PaddleNLP语义预训练模型ERNIE完成快递单信息抽取的项目中,使用自定义数据集训练模型并保存,加载后无法使用:
环境:ai studio,paddlenlp2.0b
代码如下:
`
from utils import evaluate
import paddle
global_step = 0
for epoch in range(1, epochs+1):
for step, (input_ids, segment_ids, seq_lens, labels) in enumerate(train_loader, start=1):
logits = model(input_ids, segment_ids)
preds = paddle.argmax(logits, axis=-1)
n_infer, n_label, n_correct = metric.compute(None, seq_lens, preds, labels)
metric.update(n_infer.numpy(), n_label.numpy(), n_correct.numpy())
precision, recall, f1_score = metric.accumulate()
loss = paddle.mean(criterion(logits.reshape([-1, train_ds.num_label]), labels.reshape([-1])))
global_step += 1
if global_step % 10 == 0 :
print("global step %d, epoch: %d, batch: %d, loss: %.5f, precision: %.5f, recall: %.5f, f1: %.5f" % (global_step, epoch, step, loss, precision, recall, f1_score))
loss.backward()
optimizer.step()
lr_scheduler.step()
optimizer.clear_grad()
evaluate(model, metric, dev_loader)
model.save_pretrained('./checkpoint')
tokenizer.save_pretrained('./checkpoint')
from paddle.static import InputSpec
save
path = "example.dy_model/linear"
paddle.jit.save(
layer=model,
path=path,
input_spec=[InputSpec(shape=[None, 768], dtype='int64')])
load
path = "example.dy_model/linear"
loaded_layer = paddle.jit.load(path)
inference
loaded_layer.eval()
x = paddle.randn([1, 768], 'int64')
pred = loaded_layer(x)
`
报错结果:
---------------------------------------------------------------------------RuntimeError Traceback (most recent call last) in
4 # inference
5 loaded_layer.eval()
----> 6 x = paddle.randn([1, 768], 'int64')
7 pred = loaded_layer(x)
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/tensor/random.py in randn(shape, dtype, name)
331 # [-0.3761474, -1.044801 , 1.1870178 ]] # random
332 """
--> 333 return standard_normal(shape, dtype, name)
334
335
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/tensor/random.py in standard_normal(shape, dtype, name)
277
278 """
--> 279 return gaussian(shape=shape, mean=0.0, std=1.0, dtype=dtype, name=name)
280
281
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/tensor/random.py in gaussian(shape, mean, std, dtype, name)
198 float(mean), 'std',
199 float(std), 'seed', seed, 'dtype',
--> 200 dtype)
201
202 check_shape(shape, op_type_for_check)
RuntimeError: (NotFound) Operator gaussian_random does not have kernel for data_type[int64_t]:data_layout[ANY_LAYOUT]:place[CUDAPlace(0)]:library_type[PLAIN].
[Hint: Expected kernel_iter != kernels.end(), but received kernel_iter == kernels.end().] (at /paddle/paddle/fluid/imperative/prepared_operator.cc:127)
[operator < gaussian_random > error]