昇思学习营第七期·昇腾开发板 第三次学习打卡

昇思学习营第七期·昇腾开发板 第三次学习打卡

encode-decode结构

编码器-解码器结构适应于处理变长序列的输入和输出,常用于机器翻译和语音识别。编码器将变长序列转化为固定长度状态,而解码器则从该状态生成新的变长序列。此架构允许模型处理不同长度的输入和输出序列,具有广泛的应用前景。

encode的输入是变长的序列向量,每个向量之间会在batch内填充为固定长度,神经网络限制,不能输入变长的向量。
encode输出固定长度的向量,但序列数量和输入数量保持不变,也就是一个输入产生一个输出。每个输出之间是独立的。
encode的网络可以不固定,比如常见nlp任务用rnn,。
encode将可变序列编码为固定状态,decode将固定状态输入映射为其它可变序列。
decode的网络可以不固定,其中ctc 结合search策略也可以用来做decode。

模板解释
  • encoder
    在编码器接口中,我们只指定长度可变的序列作为编码器的输入X。任何继承这个Encoder基类的模型将完成代码实现
  • decoder

解码器接口中,我们新增一个init_state函数用于将编码器的输出(enc_outputs)转换为编码后的状态。注意,此步骤可能需要额外的输入,例如:输入序列的有效长度,逐个生成长度可变的标记序列,解码器在每个时间步都可以将输入(例如:在前一时间步生成的标记)和编码后的状态映射成当前时间步的输出标记。

  • encoder-decoder
    最后,“编码器-解码器”结构包含了一个编码器和一个解码器,并且还包含了可选的额外的参数。在前向传播中,编码器的输出产生编码状态,解码器将使用该状态作为其输入之一。
总结
  • “编码器-解码器”结构可以处理长度可变的序列作为输入和输出,因此适用于机器翻译,语音识别等序列转换问题。

  • 编码器将长度可变的序列作为输入,并将其转换为具有形状固定的状态。

  • 解码器将形状固定的编码状态映射为长度可变的序列。

    模型推理

用lora微调后的模型

若遇到如下错误

如果遇到这种报错就是显存不足。进行如下操作:

首先去终端中查看现存和占用显存程序的PID号;

使用此命令:npu-smi info

可以看到现存确实不足了,被三个python程序占用着:

2951
532
37302

此时,我们需要在终端中kill掉这三个pid

kill 2951
kill 532
kill 37302

然后去重新运行程序:

顺利解决

小结

通过本次实操学习我了解了推理模型这一前沿科技,在这操作过程中我体会到 深度学习部署 不仅仅是训练好模型就了事了,真正的挑战往往出现在 工程落地 环节。