ホームページ  >  記事  >  テクノロジー周辺機器  >  1 行のコードでエリクサーを 2 倍速く作成できます。 PyTorch 2.0 が驚きの登場、LeCun が熱心に推進

1 行のコードでエリクサーを 2 倍速く作成できます。 PyTorch 2.0 が驚きの登場、LeCun が熱心に推進

王林
王林転載
2023-04-13 08:49:021447ブラウズ

12 月 2 日、PyTorch 2.0 が正式にリリースされました。

このアップデートは、PyTorch のパフォーマンスを新たな高みに押し上げるだけでなく、動的な形状と分散のサポートも追加します。

さらに、2.0 シリーズでは、一部の PyTorch コードが C から Python に戻されます。

1 行のコードでエリクサーを 2 倍速く作成できます。 PyTorch 2.0 が驚きの登場、LeCun が熱心に推進

現在、PyTorch 2.0 はまだテスト段階にあり、最初の安定バージョンは 2023 年 3 月初旬に利用可能になる予定です。

1 行のコードでエリクサーを 2 倍速く作成できます。 PyTorch 2.0 が驚きの登場、LeCun が熱心に推進

PyTorch 2.x: より速く、より Python らしくなりました!

過去数年間、PyTorch は 1.0 から最近の 1.13 まで革新と反復を繰り返し、新しく設立された PyTorch Foundation に移行して Linux Foundation の一部になりました。

PyTorch の現在のバージョンの課題は、eager-mode が増え続ける GPU 帯域幅とよりクレイジーなモデル アーキテクチャに追いつくのが難しいことです。

PyTorch 2.0 の誕生により、コンパイラ レベルでの PyTorch の実行方法が根本的に変わり、改善されます。

1 行のコードでエリクサーを 2 倍速く作成できます。 PyTorch 2.0 が驚きの登場、LeCun が熱心に推進

ご存知のとおり、PyTorch の (Py) は、データ サイエンスで広く使用されているオープン ソースの Python プログラミング言語に由来しています。

ただし、PyTorch のコードは完全に Python を使用しているわけではなく、その一部を C に提供しています。

ただし、将来の 2.x シリーズでは、PyTorch プロジェクト チームは torch.nn に関連するコードを Python に戻す予定です。

さらに、PyTorch 2.0 は完全なアドオン (およびオプション) 機能であるため、2.0 は 100% 下位互換性があります。

つまり、コード ベース、API、モデルの記述方法は同じです。

その他の技術サポート

  • TorchDynamo

Python フレームワーク評価フックを使用して安全にキャプチャする PyTorch プログラムこれは、過去 5 年間にわたってグラフ キャプチャのチームによって開発された主要なイノベーションです。

  • AOTAutograd

PyTorch の autograd エンジンを、先読み逆トレースを生成するためのトレース autodiff としてオーバーロードします。

  • PrimTorch

~2000 以上の PyTorch オペレーターを、開発者が完全な PyTorch を構築するためにオペレーターをターゲットにできる ~250 のプリミティブ オペレーターのクローズド セットに削減しました。バックエンド。 PyTorch 機能やバックエンドを作成する障壁は大幅に低くなります。

  • TorchInductor

複数のアクセラレータとバックエンド用の高速コードを生成できるディープ ラーニング コンパイラ。 Nvidia の GPU では、主要な構成要素として OpenAI Triton が使用されています。

TorchDynamo、AOTAutograd、PrimTorch、TorchInductor はすべて Python で書かれており、動的シェイプをサポートしていることは注目に値します。

トレーニング速度の高速化

新しいコンパイル モード「torch.compile」の導入により、わずか 1 行のコードで PyTorch 2.0 を高速化できます。モデルトレーニング。

ここでは特別なトリックは必要ありません。torch.compile() を実行するだけで完了です:

opt_module = torch.compile(module)

これらのテクノロジーを検証するために、チームは、画像分類、オブジェクト検出、画像生成などのタスクと、言語モデリング、質問応答、シーケンス分類などのさまざまな NLP タスクを含むテスト ベンチマークを慎重に作成しました。 、推奨システム、強化学習。その中で、これらのベンチマークは 3 つのカテゴリに分類できます:

  • HuggingFace Transformers の 46 モデル
  • 61 TIMM のモデル: Ross Wightman による最先端の PyTorch コレクション 画像モデル
  • TorchBench の 56 のモデル: github の人気のあるコード ベースのセット

テスト結果は、これらの 163 のモデルがビジョン、NLP、その他の分野に及ぶことを示しています。オープン ソース上でモデルでは、トレーニング速度が 38% ~ 76% 向上しました。

1 行のコードでエリクサーを 2 倍速く作成できます。 PyTorch 2.0 が驚きの登場、LeCun が熱心に推進

#NVIDIA A100 GPU での比較

さらに、チームは次のことも行いました。いくつかの人気のあるオープンソース PyTorch モデルでベンチマークが実施され、30% から 2 倍まで大幅な速度向上が得られました。

開発者の Sylvain Gugger 氏は次のように述べています: 「わずか 1 行のコードで、PyTorch 2.0 は Transformers モデルのトレーニング時に 1.5 倍から 2.0 倍の高速化を達成できます。これは自己混合型の高精度トレーニングです。

技術概要

PyTorch のコンパイラは 3 つの部分に分類できます:

    取得グラフの取得
  • # グラフの削減
  • # グラフのコンパイル
# このうち、PyTorch コンパイラを構築する場合、グラフの取得はさらに難しい課題です。

1 行のコードでエリクサーを 2 倍速く作成できます。 PyTorch 2.0 が驚きの登場、LeCun が熱心に推進

TorchDynamo

今年の初めに、チームは TorchDynamo の開発に取り組み始めました。 PEP-0523 で導入された、フレームワーク評価 API と呼ばれる CPython 機能を使用します。

この目的を達成するために、チームはデータ駆動型のアプローチを採用し、PyTorch で記述された 7,000 を超える Github プロジェクトを検証セットとして使用して、グラフ キャプチャにおける TorchDynamo の有効性を検証しました。

結果は、TorchDynamo が無視できるオーバーヘッドで、99% の確率でグラフ キャプチャを正確かつ安全に実行できることを示しています。

TorchInductor

PyTorch 2.0 の新しいコンパイラ バックエンドについて、チームはユーザーが高性能カスタム カーネルを作成する方法からインスピレーションを得ました。使用量の増加トリトン語の。

TorchInductor は、Pythonic で定義されたループごとのレベル IR を使用して、PyTorch モデルを GPU 上で生成された Triton コードおよび CPU 上の C/OpenMP に自動的にマッピングします。

TorchInductor のコア ループレベル IR には約 50 個の演算子しか含まれておらず、Python で実装されているため、拡張が簡単です。

AOTAutograd

トレーニングを高速化するには、ユーザーレベルのコードだけでなく、バ​​ックプロパゲーションもキャプチャする必要があります。

AOTAutograd は、PyTorch の torch_dispatch 拡張メカニズムを使用して Autograd エンジンを追跡し、バックプロパゲーションを「事前に」キャプチャし、TorchInductor を使用して順方向チャネルと逆方向チャネルを高速化できます。

PrimTorch

PyTorch には 1,200 を超える演算子があり、各演算子のさまざまなオーバーロードを考慮すると、2,000 を超える演算子があります。個人。したがって、バックエンドまたはクロスドメイン機能の作成はエネルギーを消費する作業になります。

PrimTorch プロジェクトでは、チームは 2 つのより小さくより安定したオペレーター セットを定義しました。
  • Prim 演算子には、コンパイラに適した約 250 個の演算子があります。十分に低レベルであるため、優れたパフォーマンスを得るためにそれらを融合するだけで十分です。
  • ATen ops には、そのままの出力に適した約 750 個の典型的な演算子があります。これらは、ATen レベルで既に統合されているバックエンド、またはコンパイルされていないバックエンドに適しており、Prim ops のような低レベルのオペレーター セットのパフォーマンスを回復します。

1 行のコードでエリクサーを 2 倍速く作成できます。 PyTorch 2.0 が驚きの登場、LeCun が熱心に推進

動的形状

PyTorch コードの汎用性をサポートするために何が必要かを調査する際の重要な要件動的形状をサポートし、形状が変更されるたびに再コンパイルを発生させることなく、モデルが異なるサイズのテンソルを受け入れることができるようにすることです。

動的シェイプがサポートされていない場合の一般的な回避策は、最も近い 2 の累乗まで埋め込むことです。ただし、以下のグラフからわかるように、パフォーマンスに重大なオーバーヘッドが発生し、コンパイル時間も大幅に長くなります。

PyTorch 2.0 は、動的シェイプのサポートにより、Eager よりも最大 40% 高いパフォーマンスを達成しました。

1 行のコードでエリクサーを 2 倍速く作成できます。 PyTorch 2.0 が驚きの登場、LeCun が熱心に推進

最後に、PyTorch 2.x のロードマップにおいて、チームはパフォーマンスとスケーラビリティの点でコンパイル モデルをさらに前進させたいと考えています。

1 行のコードでエリクサーを 2 倍速く作成できます。 PyTorch 2.0 が驚きの登場、LeCun が熱心に推進

以上が1 行のコードでエリクサーを 2 倍速く作成できます。 PyTorch 2.0 が驚きの登場、LeCun が熱心に推進の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は51cto.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。