•導入
•インストール
•レイヤー
•数学関数
• Pytorchのフォールバック
•テスト
Attorchは、Pytorchのnn
モジュールのサブセットで、PythonでOpenaiのTritonを使用して書かれています。その目標は、Pytorchの効率を維持または改善しながら、ニューラルネットワークモジュールの簡単にハッキング可能で、自己完結型の、読みやすいコレクションになることです。言い換えれば、それは、カスタムディープラーニングオペレーションを開発しようとしているが、純粋なPytorchの実装の速度に満足しておらず、Cuda Kernelsを書くための技術的な専門知識やリソースを持っていない人にとってアクセス可能な出発点として機能できる、シンプルで直感的なデザインを備えたフォーク可能なプロジェクトになることを意図しています。
Kernl、Xformers、Unsloth、 fla
を含むTritonが駆動する多くの素晴らしいPytorchのようなフレームワークはすでに存在していますが、ほとんどは主に変圧器とNLPアプリケーションに集中していますが、Attorchは、コンピュータービジョンなどのNLP以外の地域に関連するさまざまなレイヤーを提示することでより包括的であることを目指しています。さらに、Attorchは推論のみのパッケージではなく、前方パスとバックワードの両方を完全にサポートしています。つまり、トレーニングや推論中に使用できますが、後者のパフォーマンスは一般に専用の推論エンジンと同等ではありません。
Attorchの唯一の依存関係はtorch==2.4.0
とtriton==3.0.0
です。これら2つのライブラリの指定バージョンをインストールし、このリポジトリをクローンして開始してください。
自動混合精度(AMP)サポートを備えた現在実装されているレイヤーは、
attorch.Conv1d
:1Dコノルブは、重みを使用して入力を介して、オプションでバイアスを追加します。attorch.Conv2d
:重みを使用して入力上の2Dコンボルブ、オプションでバイアスを追加します。attorch.MultiheadAttention
:入力にマルチヘッドスケーリングされたドット製品の注意を適用します。attorch.Hardsigmoid
:オプションでドロップアウトを融合し、入力に硬いシグモイドを適用します。attorch.Hardswish
:オプションでドロップアウトを融合し、入力にハードスイスを適用します。attorch.LeakyReLU
:オプションでドロップアウトを融合させ、入力に漏れやすい関係を適用します。attorch.GELU
:geluを入力に適用し、オプションでドロップアウトを融合します。attorch.ReLU
:入力への関係を適用し、オプションでドロップアウトを融合します。attorch.ReLU6
:lesu6を入力に適用し、オプションでドロップアウトを融合します。attorch.SELU
:SELUを入力に適用し、オプションでドロップアウトを融合します。attorch.SiLU
:siluを入力に適用し、オプションでドロップアウトを融合させます。attorch.Mish
:オプションでドロップアウトを融合し、入力にミッシュを適用します。attorch.Sigmoid
:オプションでドロップアウトを融合し、入力にシグモイドを適用します。attorch.Tanh
:オプションでドロップアウトを融合し、入力にタンを適用します。attorch.GLU
:任意のアクティベーション関数を備えたゲート線形ユニットを入力に適用します。attorch.LogSoftmax
:softmaxを使用して入力を正規化し、ログを取得します。attorch.Softmax
:softmaxを使用して入力を正規化します。attorch.Softmin
:ソフトミンを使用して入力を正規化します。attorch.BatchNorm1d
:バッチは2Dまたは3D入力を正常にし、オプションでアクティベーション関数を融合し、アクティブ化前結果に残差を追加します。attorch.BatchNorm2d
:バッチは4D入力を正式にし、オプションでアクティベーション関数を融合し、アクティブ化前結果に残差を追加します。attorch.LayerNorm
:レイヤーは入力を正常にします。attorch.RMSNorm
:root-mean-square-normalize in input。attorch.Linear
:重みを使用して入力を線形に変換し、オプションでバイアスを追加し、活性化関数を融合します。attorch.Dropout
:トレーニング中の入力の要素をランダムにゼロにします。attorch.L1Loss
:入力とターゲットの間の平均絶対誤差を測定します。attorch.MSELoss
:入力とターゲットの間の平均二乗誤差を測定します。attorch.CrossEntropyLoss
:各クラスのオプションの再計量を使用して、入力とターゲットの間の平均交差エントロピー損失を測定します。attorch.NLLLoss
:各クラスのオプションの再計量を使用して、入力とターゲットの間の負のログ尤度損失を測定します。文書に特に明記されていない限り、前述の層は、Pytorch同等物と同じように動作します。
Tritonカーネルは通常、2つの部分で構成されています。1つは関連するテンソルの荷重と保存を処理し、もう1つは適切な数学関数を使用してデータを変換します。たとえば、レイヤー正規化カーネルは、入力(負荷)から1つまたは複数の行を読み取り、機能(数学)を標準化し、結果をコンテナ(ストア)に書き込みます。これらの純粋な数学関数の選択は、 attorch.math
によって提供されます。目的は、カスタムカーネルと操作融合の実装を促進することです。 attorch.math
では、上記関数の前方パスのみが利用可能ですが、I/Oアクションの純度と欠如のおかげで、それらの勾配はtriton-autodiff
ライブラリを介して自動的に導出できます。 Attorchの核のかなりの部分は、対応するattorch.math
変換または派生物に数学ビットに取って代わることでリファクタリングできますが、そうすることで、 attorch.math
と他のAttorchの単一のファイルで自己完結型のデザインを犠牲にするでしょう。
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
を使用して実行できます。数値精度の問題のために失敗する人もいるかもしれないが、ほとんどの実用的なケースでは、それは問題ではないはずであることに注意する必要があります。