•介绍
•安装
•层
•数学功能
• Pytorch后卫
•测试
Attorch是Pytorch的nn
模块的子集,使用Openai的Triton纯粹用Python编写。它的目标是成为一个易于黑客入侵,独立且可读性的神经网络模块集合,同时维持或提高Pytorch的效率。换句话说,它打算成为一个具有简单,直观的设计的可分配项目,对于那些寻求开发自定义深度学习操作但对纯Pytorch实施的速度并且没有技术专业知识或资源不满意的人来说,它可以作为可访问的起点。
由Triton提供动力的类似Pytorch的框架已经存在,包括Kernl,Xformers,Unspher和fla
,但大多数主要集中于变形金刚和NLP应用程序上,而Attorch的目标是通过与NLP之外的各种区域相关的区域来更具包容性。此外,Attorch不是仅推理的软件包,并且可以完全支持向前和向后的通行证,这意味着它可以在训练和推理过程中使用,尽管后者的性能通常与专用推理引擎不相同。
Attorch的唯一依赖性是torch==2.4.0
和triton==3.0.0
。请安装这两个库的指定版本,然后克隆此存储库以开始。
当前具有自动混合精度(AMP)支持的实施图层是,
attorch.Conv1d
:使用权重的输入上的1d-convolves,可选地添加偏差。attorch.Conv2d
:使用权重的输入上的2D-Convolves,可选地添加偏差。attorch.MultiheadAttention
:对输入应用多头缩放的点产生关注。attorch.Hardsigmoid
:将硬sigmoid应用于输入,可选地融合掉落。attorch.Hardswish
:将艰苦的旋转应用于输入,可选地融合辍学。attorch.LeakyReLU
:将泄漏的依赖应用于输入,可选地融合掉落。attorch.GELU
:将gelu应用于输入,可选地融合掉落。attorch.ReLU
:适用于输入,可选地融合辍学。attorch.ReLU6
:将relu6应用于输入,可选地将掉落。attorch.SELU
:将SELU应用于输入,可选地融合辍学。attorch.SiLU
:将SILU应用于输入,可选地将掉落。attorch.Mish
:将Mish应用于输入,可选地将掉落。attorch.Sigmoid
:将sigmoid应用于输入,可选地融合掉落。attorch.Tanh
:将tanh应用于输入,可选地融合辍学。attorch.GLU
:将带有任意激活函数的封闭线性单元应用于输入。attorch.LogSoftmax
:使用SoftMax将输入归一化,并进行日志。attorch.Softmax
:使用SoftMax对输入进行归一化。attorch.Softmin
:使用软敏化将输入归一化。attorch.BatchNorm1d
:批量归一量将2D或3D输入归功于构层融合,从而融合激活函数并将残留物添加到前激活结果中。attorch.BatchNorm2d
:批量归一量4D输入,可选地融合激活函数并将残余添加到前激活结果中。attorch.LayerNorm
:层归一化输入。attorch.RMSNorm
:根平方均衡输入。attorch.Linear
:线性地使用权重转换输入,可选地添加偏差并融合激活函数。attorch.Dropout
:训练期间输入中的随机零元素。attorch.L1Loss
:测量输入和目标之间的平均绝对误差。attorch.MSELoss
:测量输入和目标之间的平方平方误差。attorch.CrossEntropyLoss
:测量输入和目标之间的平均交叉熵损失,每个类可选。attorch.NLLLoss
:测量输入和目标之间的负模可能性损失,每个班级可选。除非在其Docstrings中另有说明,否则上述层的行为与它们的质量等效物相同。
Triton内核通常由两个部分组成:一个部分处理相关张量的负载和存储,另一个使用适当的数学函数来转换数据。例如,一层归一化的内核从输入(负载)读取一排或几行,标准化功能(数学),并将结果写入容器(存储)。 attorch.math
提供了这些纯数学功能的选择,目的是促进定制内核和操作融合的实施。尽管只有triton-autodiff
功能的正向通行证可以在attorch.math
中获得。可以通过用相应的attorch.math
或它们的衍生品取代其数学位来重构Attorch的内核中的很大一部分,但是这样做会牺牲单档和独立的自动化设计的设计,因此attorch.math
。
为了更轻松地集成Attorch和Pytorch层,提供了attorch.nn
,如果不提供所需的图层,它为带有Pytorch后备的Attorch模块提供了接口,如下所示。
from attorch import nn
lin = nn . Linear ( 10 , 20 ) # Uses attorch's linear layer
gap = nn . AdaptiveAvgPool2d ( 1 ) # Uses PyTorch's global pooling since GAP is not available in attorch
每个模块都可以针对其Pytorch对应物进行测试,以确保正确性。这些测试包括在tests/
并且可以使用pytest
执行。应该注意的是,由于数值精度问题,有些人可能会失败,但是在大多数实际用例中,这不是问题。