PyTorch 1.13 正式リリース: CUDA アップグレード、複数ライブラリの統合、M1 チップのサポート

内容紹介: 最近、PyTorch チームは公式ブログで Pytorch 1.13 のリリースを発表しました。この記事では、新バージョンの4つの大きな見どころを詳しく紹介します。
この記事は WeChat パブリック アカウントで最初に公開されました: PyTorch 開発者コミュニティ
公式の紹介によると、PyTorch 1.13 には BetterTransformer の安定版が含まれており、CUDA 10.2 および 11.3 はサポートされなくなり、CUDA 11.6 および 11.7 への移行が完了しました。さらに、ベータ版では Apple M1 チップと functorch のサポートも追加されています。
PyTorch 1.13 の見逃せないハイライトの概要:
-
BetterTransformer 機能セットは、モデルを変更せずに、推論プロセス中に一般的な Transformer モデルの高速パス実行をサポートします。さらに、Transformer モデルで一般的に使用されるサイズを高速化する add+matmul 線形代数カーネルがデフォルトで有効になります。テンソル。
-
古い CUDA バージョンはサポートされなくなり、Nvidia によって発売された最新の CUDA バージョンが導入されました。これにより、PyTorch と新しい NVIDIA Open GPU カーネル モジュールが C++17 をサポートできるようになります。
-
functorch は別個のパッケージから直接利用できるように変更されました。
import functorch
PyTorch をインポートして使用します。別途インストールする必要はありません。 -
M1 チップ Mac 用のネイティブ ビルドと、より優れた PyTorch API サポートを提供するためにテストされています。
安定した機能
1.BetterTransformer API
BetterTransformer 機能セットは、モデルを変更することなく、推論プロセス中に一般的な Transformer モデルの高速パス実行をサポートします。
補足として、PyTorch 1.13 は、Transformer モデルで一般的に使用されるサイズの add+matmul 線形代数カーネルも高速化します。
NLP モデルのパフォーマンスを向上させるには、PyTorch 1.13 の BetterTransformer は、デフォルトで Nested Tensor を有効にします。 互換性の観点から、マスク チェックを実行して、連続したマスクが提供されていることを確認します。
Transformer Encoder の src_key_padding_mask のマスク チェックは、mask_check=False を設定することでブロックできます。この設定により、整列されたマスクが提供されるだけでなく、処理が高速化されます。
最後に、より適切なエラー情報が提供され、誤った入力の診断が簡素化され、ファストパス実行エラーのより適切な診断方法が提供されます。
Better Transformer は PyTorch TorachText ライブラリに直接統合されています。 これにより、TorchText ユーザーは BetterTransformer の速度と効率を簡単に利用できるようになります。
2. CUDA 11.6 および 11.7 が導入され、CUDA 10.2 および 11.3 はサポートされなくなりました。
CUDA 11 は、C++17 をサポートする最初の CUDA バージョンです。CUDA 10.2 のサポートを終了することは、PyTorch の C++17 サポートを促進するための重要なステップです。また、従来の CUDA 10.2 固有の命令を削除することで、PyTorch コードを改善することもできます。
CUDA 11.3 の廃止と 11.7 の導入により、PyTorch と NVIDIA Open GPU カーネル モジュールとの互換性が向上しました。 もう 1 つの重要なハイライトは、遅延読み込みのサポートです。
CUDA 11.7 には cuDNN 8.5.0 が付属しています。これには、Transformer ベースのモデルを高速化し、ライブラリのサイズを 30% 削減し、ランタイム フュージョン エンジンにさまざまな改善を加えることができる多数の最適化が含まれています。
ベータ版の機能
1.ファントーチ
Google JAX と同様に、functorch は、構成可能な vmap (ベクトル化) と autodiff 変換を提供する PyTorch のライブラリです。 次のような高度な autodiff ユースケース (PyTorch で表現するのが難しい) をサポートします。
-
モデルアンサンブルモデルアンサンブル
-
ヤコビアンとヘッセ行列を効率的に計算する
-
サンプルごとの勾配またはその他のサンプルごとの量を計算します
PyTorch 1.13 には functorch ライブラリが組み込まれているため、別途インストールする必要はありません。 conda または pip を介して PyTorch をインストールした後、次のことができます。 import functorch
。
2. インテル VTune™ プロファイラーと ITT を統合する
PyTorch ユーザーが低レベルのパフォーマンス指標を使用して、Intel プラットフォーム上の各オペレーターのパフォーマンスを分析したい場合は、PyTorch スクリプト実行のオペレーターレベルのタイムラインは、インテル VTune™ プロファイラーで視覚化できます。
with torch.autograd.profiler.emit_itt():
for i in range(10):
torch.itt.range_push('step_{}'.format(i))
model(input)
torch.itt.range_pop()
3. NNC: BF16 とチャネルのサポートを最後に追加
NNC に Channels last と BF16 のサポートを追加することにより、x86 CPU での TorchScript のグラフモード推論パフォーマンスが大幅に向上しました。
Intel Cooper Lake プロセッサでは、これら 2 つの最適化により、ビジュアル モデルのパフォーマンスを 2 倍以上向上させることができます。
既存のTorchScript、Channels lastおよびBF16 Autocast APIを通じて、 パフォーマンスの向上が実現できます。 NNC の最適化は、以下に示すように、新しい PyTorch DL コンパイラー TorchInductor に移行されます。
import torch
import torchvision.models as models
model = models.resnet50(pretrained=True)
# Convert the model to channels-last
model = model.to(memory_format=torch.channels_last)
model.eval()
data = torch.rand(1, 3, 224, 224)
# Convert the data to channels-lastdata = data.to(memory_format=torch.channels_last)
# Enable autocast to run with BF16
with torch.cpu.amp.autocast(), torch.no_grad():
# Trace the model
model = torch.jit.trace(model, torch.rand(1, 3, 224, 224))
model = torch.jit.freeze(model)
# Run the traced model
model(data)
4. M1 チップ Apple デバイスのサポートを追加
PyTorch は、バージョン 1.12 以降、Apple M1 チップのネイティブ ビルドの提供に取り組んできました。 PyTorch 1.13 では、関連する API がさらに改善されています。
PyTorch 1.13 は、torch.distribution を除くすべてのサブモジュールについて、M1 macOS 12.6 インスタンスでテストされました。これらの改善されたテストでは、cpp 拡張機能や特定の入力の畳み込み補正などの機能が修正されています。
注: この機能には M1 チップ用の macOS 12 以降が必要で、ネイティブ Python (arm64) を使用します。
プロトタイプの特徴
1. AWS Graviton の ACL バックエンドのサポート
PyTorch 1.13 は、Arm Compute Library (ACL) を通じて、aarch64 CPU での CV および NLP 推論の大幅な改善を実現します。 これにより、ACL バックエンドが PyTorch と torch-xla モジュールをサポートできるようになります。ハイライトは次のとおりです。
-
mkldnn+acl を aarch64 トーチ ホイールのデフォルト バックエンドとして有効にする
-
Arch64 BF16 デバイスの mkldnn matmul オペレーターを有効にする
-
TensorFlow xla+acl 機能を torch-xla に導入します。
2. CUDAサニタイザー
有効にすると、Sanitizer はユーザーの PyTorch コードによって呼び出される基になる CUDA 操作の分析を開始し、データ競合エラーを検出します。
注: これらのエラーは、異なる CUDA ストリームから発生する非同期データ アクセスによって発生します。
Thread Sanitizer と同様に、特定されたエラー レポートは、エラー アクセスのスタック トレースとともに出力されます。
機械学習アプリケーションの破損したデータは見落とされやすく、エラーが表示されない場合もあるため、エラーを検出して特定するための CUDA Sanitizer は特に重要です。
3. Python 3.11を部分的にサポート
ユーザーは、pip を通じて Python 3.11 をサポートする Linux バイナリをダウンロードできます。ただし、この機能はプレビュー バージョンにすぎず、Distributed、Profiler、FX、JIT などの機能は完全にはサポートされていません。
0から1まで学ぶPyTorch公式チュートリアル
OpenBayes.com は、NLP、CV、DL、その他のサンプルを含む、複数の公式中国語 PyTorch チュートリアルを開始しました。コンソールにアクセスし、公開リソースを検索して表示します。
PyTorch 中国語チュートリアルを実行し、テキストの末尾をクリックして元のテキストを読むか、次のリンクにアクセスしてください。
https://openbayes.com/console/public/tutorials