#1.PyTorch 1.13
公式の紹介によると、PyTorch 1.13 には BetterTransformer の安定版が含まれており、CUDA 10.2 および 11.3 はサポートされなくなり、CUDA 11.6 および 11.7 への移行が完了しました。さらに、ベータ版では Apple M1 チップと functorch のサポートも追加されています。
1.1 メジャーアップデート
- BetterTransformer 機能セット (機能セット) は、高速パス実行用のモデルを変更することなく、推論中に一般的な Transformer モデルをサポートします。
さらに、この改善には、Transformer モデルで一般的に使用されるサイズを高速化する add+matmul 線形代数カーネルも含まれており、ネストされた Tensor がデフォルトで有効になるようになりました。
-
古い CUDA バージョンはサポートされなくなり、Nvidia の最新の CUDA バージョンが導入されました。これにより、PyTorch および新しい NVIDIA Open GPU カーネル モジュールでの C++17 サポートが有効になります。
-
functorch は別パッケージから PyTorch をインポートして直接使用できるように変更されており
import functorch
、別途インストールする必要はありません。 -
テストでは、より優れた PyTorch API サポートを備えた M1 チップ Mac 用のネイティブ ビルドを提供します。
1.2 安定版とベータ版
2. 安定した機能
2.1 BetterTransformer API
BetterTransformer 機能セット (機能セット) は、高速パス実行用のモデルを変更することなく、推論中に一般的な Transformer モデルをサポートします。
補足として、PyTorch 1.13 は、Transformer モデルで一般的に使用されるサイズの add+matmul 線形代数カーネルも高速化します。
NLP モデルのパフォーマンスを向上させるために、PyTorch 1.13 の BetterTransformer はデフォルトでネストされた Tensor (Nested Tensor) を有効にします。互換性の観点から、マスクチェックを実施し、連続したマスクを提供できることを確認します。
Transformer Encoder の src_key_padding_mask のマスク チェックは、mask_check=False を設定することでマスクできます。この設定により、整列されたマスクが提供されるだけでなく、処理が高速化されます。
最後に、より適切なエラー メッセージが提供され、誤った入力の診断が簡素化され、高速パス実行エラーに対するより適切な診断方法が提供されます。
Better Transformer は PyTorch TorachText ライブラリに直接統合されているため、TorchText ユーザーは BetterTransformer の速度と効率のパフォーマンスを簡単に活用できます。
Betterformfast のファストパス実装が安定しました
デフォルトでネストされたテンソル表現のスパース最適化を有効にします。
2.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% 削減し、ランタイム フュージョン エンジンにさまざまな改善を加えることができる多数の最適化が含まれています。
3. ベータ版の特徴
3.1 機能
functorch は PyTorch のライブラリです。
Google JAX と同様に、functorch は、構成可能な vmap (ベクトル化) および autodiff 変換を提供する PyTorch のライブラリです。次のような高度な autodiff ユースケース (PyTorch で表現するのが難しい) をサポートします。
-
モデルアンサンブル モデルアンサンブル
-
ヤコビアンとヘッセ行列を効率的に計算する
-
サンプルごとの勾配またはその他のサンプルごとの量を計算します
PyTorch 1.13 には functorch ライブラリが組み込まれているため、別途インストールする必要はありません。conda または pip 経由で PyTorch をインストールすると、プログラムで使用できるようになりますimport functorch
。
構成可能な vmap (ベクトル化) と autodiff 変換を提供します
3.2 統合されたインテル VTune™ プロファイラーと ITT
PyTorch ユーザーは、インテル プラットフォーム上の低レベルのパフォーマンス指標を使用して各オペレーターのパフォーマンスを分析したい場合、インテル VTune™ プロファイラーで PyTorch スクリプト実行のオペレーターレベルのタイムラインを視覚化できます。
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.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)
3.4 M1 チップを搭載した Apple デバイスのサポートを追加
バージョン 1.12 以降、PyTorch は Apple M1 チップ用のネイティブ ビルドの提供に取り組んできました。PyTorch 1.13 では、関連する API がさらに改善されています。
PyTorch 1.13 は、torch.distribution を除くすべてのサブモジュールについて、M1 macOS 12.6 インスタンスでテストされました。これらの改善されたテストにより、cpp 拡張機能や特定の入力畳み込みの修正などの機能を修正できます。
注: この機能には、M1 チップ上の macOS 12 以降が必要で、ネイティブ Python (arm64) を使用します。
4. プロトタイプの機能
4.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 に導入します。
4.2. CUDAサニタイザー
有効にすると、Sanitizer はユーザーの PyTorch コードによって呼び出される基盤となる CUDA 操作の分析を開始し、データ競合エラーを検出します。
注: これらのエラーは、異なる CUDA ストリームからの非同期データ アクセスによって発生します。
Thread Sanitizer と同様に、特定されたエラーは、間違ったアクセスのスタック トレースとともに出力されます。
機械学習アプリケーションの破損したデータは無視されやすく、エラーが表示されない場合もあるため、エラーを検出して特定するための CUDA Sanitizer は特に重要です。
4.3. Python 3.11 の部分的なサポート
ユーザーは、Python 3.11 をサポートする Linux バイナリを pip 経由でダウンロードできます。ただし、この機能はプレビュー版であり、Distributed、Profiler、FX、JIT などの機能は完全にはサポートされていません。
参照
OpenBayes.com は、NLP、CV、DL およびその他の例を含むがこれらに限定されない、多数の公式中国語 PyTorch チュートリアルを開始しました。コンソールにアクセスして公開リソースを検索および表示できます。