36 – PyTorch训练加速技巧与爱因斯坦标示法

1. 数据

1.1 词化tokenization

将离散输入的句子进行一个个分词处理,变成一个个token,也叫分词

1.2 词的序列化 token2index

把每个token在字典上的位置找到

1.3 增加前缀和后缀 add SOS& EOS

1.4 collate-fn

  • pad-sequence:每句话不一样,所以需要将聚泽填充到同一长度:rnn.pad.sequence
  • label=target[:,1:]:从第1个位置开始,因为第0个位置为SOS(Start Of Sentence)
  • decoder_input=target[:,:-1]:不包含最后一个,因为最后一个为EOS(End Of Sentence)

2. 模型

2.1 Encoder

Encoder有的模型可以一次性传入,如RNN/CNN/MLP/Transformer_Encoder

2.2 Attention

2.2.1 计算Score范围

  • content_based: 需要考虑 encoder_state,即编码器的状态也纳入计算encoder中;decoder_state score: 需要考虑当前解码器的状态和编码器的输出状态的关联性
  • location_based:仅需考虑decoder_stateprevious_location,不需要考虑encoder_state
  • hybrid:混合式,既考虑内容,又考虑位置

2.2.2 计算score方式

  • dot_product:解码器的状态与编码器的状态进行点乘
  • additive:加性计算
  • multiplicative:乘性

2.2.3 计算context

F.softmax(score)–>归一化处理–> context上下文信息

2.3 Decoder

单步计算解码器

  • RNN CELL/Transformer:单步计算解码器,一步步进行计算,即当前的decoder_state和decoder_state进行对齐
  • teacher_force_training:解码器的训练是teacher-force,解码器的输入是解码器当前目标的上时刻的真实值
  • autoregressive_inference:解码器的推理是自回归的没有teacher
  • masked_sequence_loss:因为序列在一个批次中是不一样的长的,所以计算loss损失的过程中需要将不参与计算的位置进行标记Mask出来;

3. pytorch训练编码技巧

3.1 自定义dataset

  • __init__/__len__/__getitem__
  • getitem尽量值从内存度,避免读磁盘
  • 若数据太大,可以位置一个固定大小的内存池,偶尔从磁盘中读

3.2 DataLoader

  • num_work > 0:表示可以进行并行计算,
  • pin_memorynon_blocking结合,有时可以进行加速

3.3 Cudnn

开启cudnn bench mark加速器,可以自动的选择高速的卷积,进行神经网络的训练;torch.backends.cudnn.benchmark=True表示可以进行加速卷积搜索

4. 爱因斯坦标示

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2022年5月28日 下午3:53
下一篇 2022年5月28日

相关推荐