论文阅读:N3LDG,一种轻量级自然语言处理深度学习库

pytorch之前的库都是静态定义计算图的,pytorch和N3LDG都是是动态定义计算图,本库实现了动态计算图和自动批量化

自然语言处理构建适用所有实例的计算图难处:

  • 各实例的长度不一样
  • 实例包含结构化信息,比如句法结构(词语组成句子的结构)

1. 相关工作

GPU加速:高效的分配显存。比如创建3个显存块,一个前向传播使用,一个反向传播,最后一个用于存储参数和相关梯度。通过显存池动态分配。

2.计算图

2.1 计算图的引入

  • 实现计算图需要定义Node类作为计算图节点

  • 前向传播Node类包括:

    • 前向传播计算方法

    • 本节点向量

    • 各输入向量(不含输入向量的是初始节点)

    • 参数

      • 反向传播Node类包括:
        • 反向传播计算方法

        • 损失函数L对y的导数

        • L对各输入向量的导数

          2.2自动批量化

  • 共享参数的同类型计算y = wx+b

  • 不含参数矩阵的同类型计算y=tanh(x)

  • 优先执行平均深度更小的过程

3 CPU计算

  • CPU实现高效计算:
    • 1.把各节点的输入向量组成矩阵
    • 2.执行矩阵运算
    • 3.将矩阵运算的结果拆分后赋值给各节点。

4 GPU计算:并行能力

  • cuBLAS是英伟达的CUDA线性代数计算库,并需要编写核函数实现。但N3LDG是不依赖cuDNN
  • GPU两类操作存在性能瓶颈:
    • 1.显存的分类和释放

    • 2.显存和内存直接的IO

    • 由于动态构建计算图时,各向量地址的动态变化

  • 优化:

    • 1.针对显存的分配和释放:由于实验过程中显存的分配和释放占用了总训练大量的时间。所以通过显存池进行管理,只有显存池不够时才去申请新模块

    • 2.将需要传输到显存的同样大小数据,先在内存中连续存放,再调用一次库函数传至显存。

5 实验

  • 1、在单线程cpu上N3LDG和PyTorch进行对比,不同的MB,N3LDG性能都大幅度领先

  • 2、在GPU上N3LDG对比了PyTorch CUDA 和 PyTorch cuDNN,N3LDG在CNN和Tree-LSTM上面性能更优,在Bi-LSTM上当MB较大时性能更优。(不使用 cuDNN 的PyTorch(称之为 PyTorch CUDA)以及使用 cuDNN的 PyTorch(PyTorch cuDNN))

  • 3、测试了做自动批量化与否时各训练阶段时长,批量化后时间大大缩减

  • 4、测试单线程 CPU 矩阵乘法的总执行时间、执行次数和平均执行时间,自动批量化后用时更短

  • 5、 针对是否最batch,测试CUDA 核函数的总执行时间、执行次数和平均执行时间

6 结论

在NLP领域,移除手动批量化过程,提出了轻量级nlp库N3LDG。

在CPU上CNN、Bi-LSTM、Tree-LSTM性能更优

GPU上,CNN、Tree-LSTM性能更优

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值