私たちは、PyTorch® 2.0 の解放を明確にすることに激怒しています。 ) 2022 年 12 月 2 日の PyTorch カンファレンス で私たちが強調したことです! PyTorch 2.0 は、同一の関係モード パターンとユーザーの専門知識を提供しますが、基本的に、PyTorch がフードの下のコンパイラ レベルでどのように動作するかを変更およびスーパーチャージし、より高速な効率と Dynamic Shapes および Distributed の強化を実現します。
この次世代のフリーアップには、Accelerated Transformers (以前は Higher Transformers と呼ばれていた) の安定版が必要です。 PyTorch 2.0 のよく知られた API である scaled_dot_product_attention は torch.nn.functional のフェーズ、MPS バックエンド、torch.func モジュール内の functorch API として動作するため、ベータ版には torch.assembly が必要です。 GPU と CPU での非常に多くの推論、効率、コーチングの最適化のアイデアにまたがるさまざまなベータ版/プロトタイプの機能強化。 torch.assembly の包括的な紹介と技術的な概要については、2.0 Catch Started ページ.
2.0 に加えて、PyTorch ドメイン ライブラリの一連のベータ アップデートを追加でリリースします。これには、ツリーに含まれる個々のライブラリと、TorchAudio、TorchVision、および TorchText を含む個別のライブラリが含まれます。 近隣サポート モードに移行するため、TorchX の置き換えも追加で開始されています。 さらに必要なアイデアは、この
これは無料です1.13.1 以降、4,541 件以上のコミットと 428 人の貢献者が含まれています。 献身的なご近所の皆様の貢献に心から感謝いたします。 一貫して、今年は 2.0 と最終的な 2 シーケンスを強化する際に、これらを試してすべての要因を文書化する価値があります.
要約:
torch.assemble の基礎となる専門知識として、Nvidia および AMD GPU を搭載した TorchInductor は、OpenAI Triton 深層学習コンパイラーに依存して、パフォーマンスの高いコードを生成し、低レベルのハードウェアに必要なアイデアをカモフラージュします。 OpenAI Triton で生成されたカーネルは、手書きのカーネルと同等の効率を達成し、実際には専門家の cuda ライブラリは cublas によく似ています. Accelerated Transformers は、スケールド ドット プロダクト アテンション (SPDA) 用のパーソナライズされたカーネル アーキテクチャを利用して、コーチングと推論のための高効率の強化を導入します。 API は torch.assembly() と統合されており、モデル開発者は スケーリングされた内積注意 カーネルを遅滞なく追加で利用することもできます。独自の scaled_dot_product_attention() 演算子を呼び出すことにより
*公開されている 2.0、1.13、および 1.12 の機能提出のパンチの効いたチェックリストを探すには、
ここをクリックしてください[Prototype] .
Accelerated PyTorch 2 Transformers
PyTorch 2.0 の解放には、PyTorch Transformer API の新しい高効率実装が伴います. Accelerated PT2 Transformer をリリースする際の目的は、業界全体で理解できる最先端の Transformer デバイスのコーチングと展開を生み出すことです。 この解放により、スケールド ドット プロダクト アテンション (SPDA) 用のパーソナライズされたカーネル アーキテクチャを利用したコーチングと推論のための高効率の強化が導入され、以前は「Higher Transformer」として知られていた推論「fastpath」アーキテクチャが拡張されます。
「ファストパス」アーキテクチャと同様に、パーソナライズされたカーネルは PyTorch Transformer API に完全に統合されています – したがって、ネイティブの Transformer と MultiHeadAttention API を利用すると、ユーザーは次のことが可能になります:
各種ハードウェア機器のパンチの効いたメリットやTransformerの活用事例を掲載、特定のモデルとハードウェア形式に対して最も効果的な効率のカーネルを取得するパーソナライズされたカーネル決定ロジックを使用して、いくつかの SDPA パーソナライズされたカーネルがサポートされています (以下を参照)。 独自の Transformer API を起動するために、モデル開発者は スケーリングされた内積注意 カーネルを遅滞なく利用することもできます。一意の scaled_dot_product_attention() 演算子。 Accelerated PyTorch 2 トランスフォーマーは torch.assemble() と統合されています。 PT2 コンパイル (推論またはコーチング用) の追加の高速化を最大限に活用しながらモデルを利用するには、 でモデルを前処理します。 モデル=torch.assemble(モデル).
今では、パーソナライズされたカーネルと torch.assembly() の組み合わせを利用する Accelerated PyTorch 2 Transformers を使用して、トランスフォーマー デバイス、特に明確な言語デバイスをコーチングするためのよく知られたスピードアップを完了しました。
図: パーソナライズされたカーネルと torch.assemble でスケーリングされた内積注意を使用すると、よく知られているnanoGPT のように、明確な言語デバイスを指導するためのスピードアップ
ベータアスペクト [Beta] torch.assemble
torch.assembly は PyTorch 2.0 のよく知られた API で、モデルをラップしてコンパイル済みのモデルを返します。 これは完全に付加的な (そしてオプションの) 機能であり、したがって 2.0 は定義により 100% 後方一致です
TorchInductor:
あなたの独自の技術を総合すると、torch.assembly は 165 の発信元デバイスで 93% の時間で動作するのが困難であり、ドリフト 32 精度で中程度で 20% 速く、上で 36% 速く実行されます
詳しくはまでご相談ください。 https://pytorch.org/derive-started/pytorch-2.0/ および Intel 搭載の TorchInductor CPU
[Beta] PyTorch MPS バックエンド
MPS バックエンドは、Mac プラットフォーム上で GPU で高速化された PyTorch コーチングを提供します。 このフリーアップにより、正確性、安定性、およびオペレーター保護が向上します。
MPS バックエンドは、上位 60 の最も歴史的な op の強化を必要とするようになりました。 300 人以上のオペレーターに保護をもたらします。 フリーアップの主な注意点は一度に変更され、パンチの効いた OpInfo ベースのほぼ完全に順方向および勾配モードが静かな正しさの要因に対処できるようになりました。 これらの調整により、Stable Diffusion、YoloV5、WhisperAI などのサード オケージョン ネットワークによる MPS バックエンドの採用が広まり、Torchbench ネットワークと従来のチュートリアルの保護が強化されました。 MPS バックエンドで最高の効率と安定性を求めるのと同じくらい、開発者が最新の macOS に無料で置き換える価値があります。
リンク
[Beta] Scaled dot product attention 2.0
喜んでご説明させていただきますを導入する PyTorch 2.0 の解放 torch.nn.functional. この操作には、使用中の入力とハードウェアに応じてシームレスに使用されるいくつかの実装が必要です。
PyTorch の古いバージョンでは、3 回目の実装に依存する必要がありました。メモリ最適化アルゴリズムのメリットを運ぶために別の関数をインストールします FlashAttention. PyTorch 2.0 では、これらの実装はすべてデフォルトで簡単にアクセスできます。
これらの実装には HazyResearch の FlashAttention、 のメモリ効率の考慮) xFormers
プロジェクト、および非 CUDA デバイスや高精度が必要な場合に役立つネイティブ C++ 実装
PyTorch 2.0 は、最適な実装を自動的に取得して利用します。ただし、私の意見では、より細かく調整するためにそれらをさらに切り替えることができます。 さらに、スケーリングされたドット積の注意操作は、頻繁なトランス アーキテクチャ ドローを作成するために歴史的なものになる可能性もあります。
[Beta] functorch -> torch.func
感銘を受けた Google JAX, functorch は、構成可能な vmap (ベクトル化) と autodiff 変換を提供するライブラリです。 これにより、他のケースでは PyTorch で特定するのが難しい開発された autodiff 利用ケースが可能になります。 例:
functorch のアップストリーム化と PyTorch への統合の最終ステップであるため、functorch API は間違いなく torch 内でアクセス可能であることを明言することに激怒しています。 .func モジュール。 運用改造 API は以前と同じですが、NN モジュールとの相互作用がどのように機能するかが変更されました。 医師と 移行情報 より必要なアイデア )
さらに、今私たちは持っています torch.autograd.Characteristic の強化を追加: 1 つがスペース内にあり、見ることができますtorch.autograd.Characteristic. で変換 (vmap、grad、jvp など) を操作します[Beta]派遣可能集団
ディスパッチ可能な集合は、バックエンドをオプションの引数に調整する独自の init_process_group() API への拡張です。 ユーザーにとって、この選択のよく知られたメリットは、バックエンド仕様を交換する必要なく、GPU と CPU マシンの両方でインチングできるコードを記述できることです。 ディスパッチ機能により、ユーザーはバックエンドを手動で指定することを好まなくなるため (「NCCL」や「GLOO」など)、GPU と CPU の両方のコレクティブを強化することがより簡単になります。 ユーザーによる斬新なバックエンド仕様は尊重される可能性があり、トレードを要求することはできません。
使用例:
インポート torch.disbursed.dist … # 同一の古い dist.init_process_group(backend=”nccl”, ...) dist.all_reduce(...) # CUDA tensor で動作します dist.all_reduce(...) # CPU tensor で動作しなくなりました # 一意の dist .init_process_group(...) # バックエンドはオプションです dist.all_reduce(...) # CUDA tensor で動作します dist.all_reduce(...) # CPU tensor で動作します
もっと詳しく知る ここ。
[Beta] torch.set_default_device および torch.instrument をコンテキスト スーパーバイザーとして使用torch.set_default_device は、ユーザーが PyTorch のファクトリー関数が割り当てるデフォルトのインストルメントを取引できるようにします。 説明するために、torch.set_default_device('cuda') が必要です。torch.empty(2) の名前は CUDA に (CPU に優先して) 割り当てられます。 さらに、コンテキスト スーパーバイザとして torch.instrument を利用して、デフォルトのインストルメントをローカル ベースで取引することもできます。 これにより、PyTorch がそれをマッピングするための適切な配置のために解放するという、長年にわたる機能要求が解決されます。
詳細 (* ここ
。
[Beta] 「X86」は、独自のデフォルトの量子化バックエンドであるためです。 x86 CPU
FBGEMM と oneDNN カーネル ライブラリを使用する独自の X86 量子化バックエンドが FBGEMM を置き換えます。 x86 CPU プラットフォームのデフォルトの量子化バックエンドであり、通常の FBGEMM バックエンドと比較して改善された int8 推論効率を提供し、両方のライブラリの長所を活用して、40 以上のディープ ラーニング デバイスで測定された 1.3X ~ 2X の推論効率のスピードアップを実現します。 独自のバックエンドは、機能的には通常の FBGEMM バックエンドと賢く一致しています。