Transformer onnx模型的导出

0. Encoder.onnx 和decoder.onnx

        Seq2seq结构也称为encoder-decoder结构,在decoder结构为单步解码时,seq2seq的导出的与只有encoder时(如BERT等)没有差别。当decoder为多步解码时,如生成式任务中的机器翻译、文本摘要等,由于decoder需要多次用到,问题变得稍稍复杂了一点。

        由于onnx对多步解码的支持较差,我们选择将模型拆分成encoder和decoder两部分。(官网上有torch.jit.script(model),但对transformers之外的框架不一定适用,所以我们讨论更一般的情况。)

        在常见的基于transformer机制的框架中,一般都是先定义各层中的计算机制,如linear,activation (relu, gelu), scaled_multi_head_attention等,再定义各层(layer, T5中的block)的计算,然后再定义encoder, decoder,最后定义整个transformer及对应的train和inferece各状态对应的输入输出。

        在定义encoder和decoder的时候,分别加入了src和tgt embedding来进行初始化,有时使用shared embedding, 即src embedding和tgt embedding相同。Encoder和decoder的最大不同在于,encoder中只涉及self-attention的计算,decoder先进行self-attention的计算,再进行cross_attention的计算。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值