• Введение
• Установка
• Слои
• Математические функции
• Pytorch Swarkback
• Тесты
Attorch - это подмножество модуля nn
Pytorch, написанного исключительно на Python с использованием Triton Openai. Его цель-быть легко взломанной, автономной и читаемой коллекцией модулей нейронной сети, сохраняя или повышая эффективность Pytorch. Другими словами, он намеревается стать формируемым проектом, наделенным простым, интуитивно понятным дизайном, который может служить доступной отправной точкой для тех, кто стремится разработать пользовательские операции по глубокому обучению, но не удовлетворены скоростью чистой реализации Pytorch и не обладают техническим опытом или ресурсами для написания Cuda Kernels.
Уже существует ряд замечательных пирожных рамок, основанных на Triton, включая Kernl, Xformers, USLOTH и fla
, но большинство концентрируется в основном на трансформаторах и приложениях NLP, тогда как Attorch стремится быть более инклюзивным, также представляя различные слои, относящиеся к областям, кроме NLP, таких как компьютерное зрение. Более того, Attorch не является пакетом только для вывода и полностью поддерживает как вперед, так и назад, а это означает, что его можно использовать как во время обучения, так и при выводе, хотя его производительность для последнего обычно не наравне с выделенными двигателями вывода.
Единственными зависимостями Attorch являются torch==2.4.0
и triton==3.0.0
. Пожалуйста, установите указанные версии этих двух библиотек и клонируйте этот репозиторий, чтобы начать работу.
В настоящее время реализованные слои с поддержкой автоматической смешанной точности (AMP), являются
attorch.Conv1d
: 1d-Convolveves по вводу, используя веса, опционально добавляя смещение.attorch.Conv2d
: 2D-Convolveves над входом, используя веса, опционально добавляя смещение.attorch.MultiheadAttention
: применяет многоголовое масштабированное внимание точечного продукта к входам.attorch.Hardsigmoid
: применяет жесткий сигмоид к вводу, необязательно слияние.attorch.Hardswish
: применяет жесткий Swish к входу, необязательно слияние.attorch.LeakyReLU
: применяет протекающую обход к вводу, необязательно слияние.attorch.GELU
: применяет Gelu к входу, необязательно слияние.attorch.ReLU
: применяется к входу, необязательно слияние.attorch.ReLU6
: применяется RELU6 к входу, необязательно слияние.attorch.SELU
: применяет Selu к входу, необязательно слияние.attorch.SiLU
: применяет Silu к входу, необязательно слияние.attorch.Mish
: применяется к вводу, необязательно слияние.attorch.Sigmoid
: применяется Sigmoid к входу, необязательно слияние.attorch.Tanh
: применяется к вводу, необязательно слияние.attorch.GLU
: применяет закрытую линейную единицу с произвольной функцией активации к входу.attorch.LogSoftmax
: нормализует вход с помощью Softmax и берет свой журнал.attorch.Softmax
: нормализует вход с помощью Softmax.attorch.Softmin
: нормализует вход с помощью Softmin.attorch.BatchNorm1d
: партия нормализации 2D или 3D вход, необязательно сливая функцию активации и добавляя остаток к результату предаактивации.attorch.BatchNorm2d
: пакетный нормы 4D вход, необязательно сливая функцию активации и добавляя остаточный к результату предактивации.attorch.LayerNorm
: Layer-нормализация ввода.attorch.RMSNorm
: среднеквадратичный среднеквадратизирует вход.attorch.Linear
: линейно преобразует вход, используя веса, опционально добавляя смещение и объединяя функцию активации.attorch.Dropout
: случайно нулевые элементы при вводе во время обучения.attorch.L1Loss
: измеряет среднюю абсолютную ошибку между входом и целью.attorch.MSELoss
: измеряет среднюю квадратную ошибку между входом и целью.attorch.CrossEntropyLoss
: измеряет среднюю потерю поперечной энтропии между входом и целью, с дополнительным повторным перевешиванием каждого класса.attorch.NLLLoss
: измеряет отрицательную потерю вероятности журнала между вводом и целью, с необязательным повторным перевешиванием каждого класса.Если иное не указано в их докторах, вышеупомянутые слои ведут себя одинаково от их эквивалентов питтера.
Ядра тритона, как правило, состоит из двух частей: одна обрабатывает загрузку и хранение соответствующих тензоров, а другая преобразует данные, используя соответствующие математические функции. Например, ядро нормализации слоя считывает один или несколько строк с входа (нагрузка), стандартизирует функции (математика) и записывает результаты в контейнер (хранилище). Выбор этих чистых математических функций поставляется attorch.math
, целью составления содействия реализации пользовательских ядер и слияния операции. Хотя только передовые проходы указанных функций доступны в attorch.math
, благодаря их чистоте и отсутствию действий ввода/вывода, их градиенты могут автоматически получены через библиотеку triton-autodiff
. Значительные части ядер Аторча могут быть рефакторированы, вытеснив свои математические биты с соответствующими attorch.math
Transformations или их производными, но это принесет пожертвование единым и автономным дизайном Attorch, поэтому attorch.math
и остальная часть Attorch останутся отдельными.
Чтобы обеспечить более легкую интеграцию слоев Attorch и Pytorch, предлагается attorch.nn
, который обеспечивает интерфейс для модулей Attorch с резервной защитой Pytorch, если желаемый слой не будет доступен, как показано ниже.
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
. Следует отметить, что некоторые могут потерпеть неудачу из -за численных вопросов точности, но в большинстве практических случаев использования это не должно быть проблемой.