• 소개
• 설치
• 레이어
• 수학 기능
• 파이토치 폴백
• 테스트
Attorch는 OpenAI의 Triton을 사용하여 Python으로 작성된 Pytorch의 nn
모듈의 하위 집합입니다. 그것의 목표는 Pytorch의 효율성을 유지하거나 개선하는 동안 쉽게 해킹 가능하고 독립적이며 읽을 수있는 신경망 모듈 모듈 모듈이되는 것입니다. 다시 말해서, 그것은 맞춤형 심층 학습 운영을 개발하려는 사람들에게 접근 가능한 출발점이지만 순수한 Pytorch 구현의 속도에 만족하지 않고 CUDA 커널을 작성할 기술적 전문 지식이나 리소스가없는 사람들에게 접근 가능한 출발점으로 작용할 수있는 간단하고 직관적 인 디자인이 부여 된 지식 가능한 프로젝트가 될 계획입니다.
Kernl, Xformers, Unsloth 및 fla
를 포함하여 Triton이 구동하는 멋진 Pytorch와 같은 프레임 워크가 이미 존재하지만 대부분의 변압기 및 NLP 응용 프로그램에 주로 집중하는 반면, Attorch는 컴퓨터 비전과 같은 NLP 외에도 다양한 레이어를 제시함으로써 더 포괄적이어야합니다. 또한, 변호사는 추론 전용 패키지가 아니며 앞뒤 패스를 모두 지원합니다. 이는 훈련과 추론 중에 사용할 수 있음을 의미하지만, 후자의 성능은 일반적으로 전용 추론 엔진과 동등하지는 않습니다.
변호사의 유일한 종속성은 torch==2.4.0
및 triton==3.0.0
입니다. 이 두 라이브러리의 지정된 버전을 설치 하고이 저장소를 복제하여 시작하십시오.
자동 혼합 정밀도 (AMP) 지원을 갖춘 현재 구현 된 레이어는
attorch.Conv1d
: 웨이트를 사용하여 입력을 통해 1D- 콘 볼프스를 추가하여 바이어스를 추가합니다.attorch.Conv2d
: 웨이트를 사용하여 입력을 통해 2D- 콘 볼프가 바이어스를 추가합니다.attorch.MultiheadAttention
: 입력에 다중 머리가 스케일링 된 도트 제품주의를 적용합니다.attorch.Hardsigmoid
: 입력에 하드 Sigmoid를 적용하여 선택적으로 드롭 아웃을 융합시킵니다.attorch.Hardswish
: 입력에 하드 스위쉬를 적용하고 선택적으로 드롭 아웃을 융합시킵니다.attorch.LeakyReLU
: 입력에 누출이 적용되어 선택적으로 드롭 아웃을 융합시킵니다.attorch.GELU
: gelu를 입력에 적용하여 선택적으로 드롭 아웃을 융합시킵니다.attorch.ReLU
: 입력에 Relu를 적용하여 선택적으로 드롭 아웃을 융합시킵니다.attorch.ReLU6
: 입력에 Relu6을 적용하고 선택적으로 드롭 아웃을 융합시킵니다.attorch.SELU
: 셀루를 입력에 적용하여 선택적으로 드롭 아웃을 융합시킵니다.attorch.SiLU
: 입력에 Silu를 적용하고 선택적으로 중퇴를 융합시킵니다.attorch.Mish
: 입력에 미시를 적용하고 선택적으로 드롭 아웃을 융합시킵니다.attorch.Sigmoid
: sigmoid를 입력에 적용하고 선택적으로 드롭 아웃을 융합시킵니다.attorch.Tanh
: tanh를 입력에 적용하고 선택적으로 드롭 아웃을 융합시킵니다.attorch.GLU
: 임의의 활성화 기능이있는 게이트 선형 유닛을 입력에 적용합니다.attorch.LogSoftmax
: SoftMax를 사용하여 입력을 정규화하고 로그를 가져옵니다.attorch.Softmax
: SoftMax를 사용하여 입력을 정규화합니다.attorch.Softmin
: SoftMin을 사용하여 입력을 정규화합니다.attorch.BatchNorm1d
: 2D 또는 3D 입력을 배치-정규화하여 선택적으로 활성화 함수를 융합시키고 사전 활성화 결과에 잔차를 추가합니다.attorch.BatchNorm2d
: 4D 입력을 배치-정규화하여 선택적으로 활성화 함수를 융합시키고 사전 활성화 결과에 잔차를 추가합니다.attorch.LayerNorm
: Layer-Normalizes intput.attorch.RMSNorm
: root-mean-square는 입력을 정규화합니다.attorch.Linear
: 가중치를 사용하여 입력을 선형으로 변환하여 바이어스를 추가하고 활성화 기능을 융합합니다.attorch.Dropout
: 훈련 중 입력의 요소를 무작위로 제출합니다.attorch.L1Loss
: 입력과 대상 사이의 평균 절대 오차를 측정합니다.attorch.MSELoss
: 입력과 대상 사이의 평균 제곱 오차를 측정합니다.attorch.CrossEntropyLoss
: 각 클래스의 선택적 재발과 함께 입력과 타겟 사이의 평균 교차 엔트로피 손실을 측정합니다.attorch.NLLLoss
: 각 클래스의 선택적 재 켜기로 입력과 타겟 사이의 음의 로그 우도 손실을 측정합니다.그들의 문서에서 달리 언급되지 않는 한, 앞서 언급 한 층은 그들의 pytorch 동등성과 동일하게 행동한다.
Triton 커널은 일반적으로 두 부분으로 구성됩니다. 한 가지는 관련 텐서의 로딩 및 저장을 처리하고 다른 하나는 적절한 수학 기능을 사용하여 데이터를 변환합니다. 예를 들어, 레이어 정규화 커널은 입력 (로드)에서 하나 또는 여러 행을 읽고 기능 (MATH)을 표준화하고 결과를 컨테이너 (스토어)에 씁니다. 이러한 순수한 수학 기능의 선택은 attorch.math
에 의해 제공되며, 목표는 맞춤형 커널 및 작동 융합의 구현을 용이하게하는 것이 목표입니다. 상기 함수의 순방향 패스 만 attorch.math
에서 사용할 수 있지만 순도와 I/O 동작 부재로 인해 그라디언트는 triton-autodiff
라이브러리를 통해 자동으로 도출 될 수 있습니다. 변호사 커널의 상당 부분은 해당 attorch.math
와 함께 수학 비트를 대체하여 수학 비트를 대체함으로써 재현 할 수 있지만, 그렇게하면 변호사의 단일 파일과 독립적 인 변호사 디자인을 희생 할 것이므로 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
사용하여 실행할 수 있습니다. 수치 정밀 문제로 인해 일부는 실패 할 수 있지만 대부분의 실제 사용 사례에서는 문제가되지 않아야합니다.