• Introducción
• Instalación
• Capas
• Funciones matemáticas
• Pytorch Fallbackback
• Pruebas
El Attorch es un subconjunto del módulo nn
de Pytorch, escrito exclusivamente en Python usando el Triton de OpenAi. Su objetivo es ser una colección fácilmente pirateable, autónoma y legible de módulos de redes neuronales mientras mantiene o mejora la eficiencia de Pytorch. En otras palabras, tiene la intención de ser un proyecto bifurcable dotado de un diseño simple e intuitivo que puede servir como un punto de partida accesible para aquellos que buscan desarrollar operaciones de aprendizaje profundo personalizados pero no están satisfechos con la velocidad de una implementación de Pytorch puro y no tienen la experiencia técnica o los recursos para escribir núcleos CUDA.
Ya existen una serie de maravillosos marcos similares a Pytorch impulsados por Triton, incluidos Kernl, Xformers, Uncera y fla
, pero la mayoría se concentra principalmente en transformadores y aplicaciones de PNL, mientras que la Attorch tiene como objetivo ser más inclusivo al presentar una variedad de capas relacionadas con áreas además de NLP, como la visión de la computación. Además, el Attorch no es un paquete solo de inferencia y admite plenamente los pases hacia adelante y hacia atrás, lo que significa que puede usarse durante la capacitación y la inferencia, aunque su rendimiento para este último generalmente no está a la par con motores de inferencia dedicados.
Las únicas dependencias de Attorch son torch==2.4.0
y triton==3.0.0
. Instale las versiones especificadas de estas dos bibliotecas y clone este repositorio para comenzar.
Las capas implementadas actualmente, con soporte automático de precisión mixta (AMP), son,
attorch.Conv1d
: 1D-Convolucione sobre la entrada usando pesos, opcionalmente agregando sesgo.attorch.Conv2d
: 2D-Convolucione sobre la entrada usando pesos, opcionalmente agregando sesgo.attorch.MultiheadAttention
: aplica atención de producto de punto a escala múltiple a las entradas.attorch.Hardsigmoid
: aplica sigmoide duro a la entrada, opcionalmente fusionando.attorch.Hardswish
: aplica a Swish a la entrada, opcionalmente fusionando el abandono.attorch.LeakyReLU
: aplica RELU fugas a la entrada, opcionalmente fusionando el abandono.attorch.GELU
: aplica GELU a la entrada, opcionalmente fusionando el abandono.attorch.ReLU
: se aplica a Relu a la entrada, opcionalmente fusionando el abandono.attorch.ReLU6
: Aplica Relu6 a la entrada, opcionalmente fusionando el abandono.attorch.SELU
: aplica SELU a la entrada, opcionalmente fusionando el abandono.attorch.SiLU
: aplica Silu a la entrada, opcionalmente fusionando el abandono.attorch.Mish
: se aplica a la mezcla a la entrada, opcionalmente fusionando el abandono.attorch.Sigmoid
: aplica sigmoide a la entrada, opcionalmente fusionando.attorch.Tanh
: se aplica a Tanh a la entrada, opcionalmente fusionando el abandono.attorch.GLU
: aplica la unidad lineal cerrada con una función de activación arbitraria a la entrada.attorch.LogSoftmax
: normaliza la entrada con Softmax y toma su registro.attorch.Softmax
: normaliza la entrada con Softmax.attorch.Softmin
: Normaliza la entrada usando Softmin.attorch.BatchNorm1d
: Loth-Normalize la entrada 2D o 3D, fusionando opcionalmente una función de activación y agregando un residual al resultado de pre-activación.attorch.BatchNorm2d
: Lote-Normaliza la entrada 4D, opcionalmente fusionando una función de activación y agregando un residual al resultado de pre-activación.attorch.LayerNorm
: Layer-Normaliza la entrada.attorch.RMSNorm
: Root-Mean-cuadrado-Normaliza la entrada.attorch.Linear
: transforma linealmente la entrada usando pesos, agregando opcionalmente sesgo y fusionando una función de activación.attorch.Dropout
: Aleatamente cero elementos en la entrada durante el entrenamiento.attorch.L1Loss
: mide el error absoluto medio entre la entrada y el objetivo.attorch.MSELoss
: mide el error medio cuadrado entre la entrada y el objetivo.attorch.CrossEntropyLoss
: mide la pérdida media de entropía cruzada entre la entrada y el objetivo, con una reweinción opcional de cada clase.attorch.NLLLoss
: mide la pérdida de probabilidad negativa del registro entre la entrada y el objetivo, con una reweinción opcional de cada clase.A menos que se indique lo contrario en sus documentos, las capas mencionadas se comportan de manera idéntica a sus equivalentes de Pytorch.
Los núcleos Triton generalmente están compuestos de dos partes: uno maneja la carga y el almacenamiento de los tensores relevantes, el otro transforma los datos utilizando funciones matemáticas apropiadas. Por ejemplo, un núcleo de normalización de capa lee una o varias filas de la entrada (carga), estandariza las características (matemáticas) y escribe los resultados en un contenedor (almacén). attorch.math
suministra una selección de estas funciones de matemáticas puras. Aunque solo los pases hacia adelante de dichas funciones están disponibles en attorch.math
triton-autodiff
Las porciones significativas de los núcleos de los abogados pueden refactorizarse suplantando sus bits de matemáticas con las transformaciones attorch.math
correspondiente o sus derivados, pero hacerlo sacrificaría el diseño de un solo archivo y autónomo de la attorch.math
, por lo que el atorch.
Para habilitar la integración más fácil de las capas de Attorch y Pytorch, se ofrece attorch.nn
, que proporciona una interfaz a los módulos de Attorch con Pytorch Fallback si una capa deseada no está disponible, como se ve a continuación.
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
Cada módulo se puede probar contra su contraparte de Pytorch para garantizar la corrección. Estas pruebas se incluyen en tests/
y se pueden ejecutar usando pytest
. Cabe señalar que algunos podrían fallar debido a problemas de precisión numérica, pero en la mayoría de los casos de uso práctico, eso no debería ser un problema.