•介绍
•安装
•层
•数学功能
• 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执行。应该注意的是,由于数值精度问题,有些人可能会失败,但是在大多数实际用例中,这不是问题。