PyTorch 1.12 リリースノート : ハイライト

PyTorch 1.12 リリースノート (翻訳)

翻訳 : (株)クラスキャット セールスインフォメーション
日時 : 07/01/2022 (PyTorch 1.12 – released on Jun 28th, 2022)

* 本ページは PyTorch 1.12 リリースノートの Highlights と関連ブログ記事を翻訳したものです:

 

クラスキャット 人工知能 研究開発支援サービス

クラスキャット は人工知能・テレワークに関する各種サービスを提供しています。お気軽にご相談ください :

◆ 人工知能とビジネスをテーマに WEB セミナーを定期的に開催しています。スケジュール
  • お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。

お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。

  • 株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション
  • sales-info@classcat.com  ;  Web: www.classcat.com  ;   ClassCatJP

 

PyTorch 1.12: TorchArrow, Modules と nvFuser に対する Functional API が利用可能です

We are excited to announce the release of PyTorch 1.12 ( リリースノート ) !このリリースは、3124 コミット、433 人の貢献者から構成されています。1.12 と共に、AWS S3 統合、CPU におけるチャネルラストの PyTorch Vision モデル、Bfloat16 と FSDP API を伴う Intel® Xeon® Scalable プロセッサ上の PyTorch の強化 (= empower) の beta 版をリリースしています。We want to sincerely thank our dedicated community for your contributions.

 
概要 :

  • 関数型 API は与えられたパラメータのセットを持つモジュール計算を関数的に適用します。
  • PyTorch の Complex32 と複素畳み込み (= Complex Convolutions)
  • DataLoader と完全に後方互換な TorchData からの DataPipes
  • API に対して改善されたカバー率を持つ functorch
  • nvFuser, PyTorch 学習のための深層学習コンパイラ
  • Ampere 及び後の CUDA ハードウェア上の float32 行列乗算精度への変更
  • TorchArrow, バッチデータに渡る機械学習前処理のための新しいベータ・ライブラリ

 

フロント API

TorchArrow の紹介

TorchArrow を試して使用する準備ができた新しい Beta リリースを得ました。これはバッチデータに渡る機械学習前処理のためのライブラリです。それは前処理ワークフローと開発をスピードアップするための高いパフォーマンスの Pandas-スタイルで、簡単に利用できる API をフィーチャーします。

現在、それは以下の機能を持つ Python DataFrame インターフェイスを提供しています :

  • Velox を使用した、高性能 CPU バックエンド、ベクトル化されて拡張可能なユーザ定義関数 (UDF)
  • Tensor collation と PyTorch DataLoader と DataPipes に容易にプラグインするような、PyTorch や他のモデルオーサリングとのシームレスなハンドオフ。
  • Arrow インメモリ・カラム形式による外部リーダのためのゼロコピー

詳細は、10-min チュートリアル, インストール 手順, API ドキュメント, そして TorchRec のデータ前処理の プロトタイプ を見つけてください。

 

(Beta) モジュールのための関数型 API

PyTorch 1.12 は与えられたパラメータセットでモジュール計算を関数的に適用する新しいベータ機能を道入します。時に、パラメータの静的セットを内部的に保持するという従来の PyTorch モジュールの使用パターンは制限があり過ぎます。これはメタ学習のためのアルゴリズムを実装するときしばしば当てはまります、そこではパラメータの複数のセットが optimizer ステップに渡り維持される必要があるかもしれません。

新しい torch.nn.utils.stateless.functional_call() API は以下を可能にします :

  • 使用されるパラメータセットに渡り完全な柔軟性を持ったモジュール計算。
  • 関数的な方法でモジュールを再実装する必要がない。
  • モジュールにある任意のパラメータやバッファは call 内の使用のために外部定義された値とスワップできます。参照パラメータ / バッファに対する名前付けはモジュールの state_dict() 内の fully-qualified 形式に従います。

Example:

import torch
from torch import nn
from torch.nn.utils.stateless import functional_call

class MyModule(nn.Module):
    def __init__(self):
        super().__init__()
        self.fc1 = nn.Linear(3, 3)
        self.bn = nn.BatchNorm1d(3)
        self.fc2 = nn.Linear(3, 3)

    def forward(self, x):
        return self.fc2(self.bn(self.fc1(x)))

m = MyModule()

# Define parameter / buffer values to use during module computation.
my_weight = torch.randn(3, 3, requires_grad=True)
my_bias = torch.tensor([1., 2., 3.], requires_grad=True)
params_and_buffers = {
    'fc1.weight': my_weight,
    'fc1.bias': my_bias,
    # Custom buffer values can be used too.
    'bn.running_mean': torch.randn(3),
}

# Apply module computation to the input with the specified parameters / buffers.
inp = torch.randn(5, 3)
output = functional_call(m, params_and_buffers, inp)

 

(Beta) PyTorch の Complex32 と複素畳み込み

PyTorch は今日では複素数、複素 autograd、複素モジュール、そして線形代数と高速フーリエ変換 (FFT) 演算を含む多数の複素演算をネイティブにサポートしています。torchaudio と ESPNet を含む、多くのライブラリは既に PyTorch の複素数を利用していて、そして PyTorch 1.12 は複素機能を複素畳み込みと半精度 FFT 演算を可能にする実験的な complex32 (“complex half”) データ型で更に拡張しています。CUDA 11.3 パッケージのバグにより、複素数を使用している場合、wheels から CUDA 11.6 パッケージを使用することを勧めます。

 

(Beta) Forward-モード 自動微分

Forward-mode AD は forward パスで方向微分 (or 同値に、Jacobian-ベクトル積) の計算を逐次的に可能にします。PyTorch 1.12 は forward-モード AD に対する演算子カバー率をかなり改良しています。詳細は チュートリアル を見てください、。

 

TorchData

BC DataLoader + DataPipe

TorchData からの `DataPipe` は、マルチプロセッシングと分散環境の両者において shuffle determinism と動的シャーディングについて既存の `DataLoader` の完全に後方互換になります。詳細は、チュートリアル を確認してください。

 

(Beta) AWS S3 統合

AWSSDK に基づく DataPipes は TorchData に統合されました。それはネイティブ AWSSDK により支援される以下の特徴を提供します :

  • prefix に基づいて各 S3 バケットから url のリストを取得する。
    • 無期限にハングすることを防ぐためにタイムアウトをサポートする。
    • S3 バケット・リージョンの指定のサポート。

  • S3 urls からデータをロードする。
    • buffered と multi-part ダウンロードのサポート。
    • S3 バケット・リージョンの指定のサポート。

AWS ネイティブ DataPipes は依然としてベータ・フェイズです。そして、私達はパフォーマンスを改良するためにそれらを調整し続けています。

 

(Prototype) DataLoader2

DataLoader2 はプロトタイプ・モードで利用可能になりました。DataPipes, DataLoading API とバックエンド (aka ReadingServices) 間で相互作用する新しい方法を道入しています。API の観点からはそのフィーチャーはステーブルですが、機能的にはまだ完全ではありません。アーリーアダプターとフィードバック、そして潜在的な貢献者を歓迎します。

詳細は、リンク を確認してください。

 

functorch

Google JAX にインスパイアされ、functorch は構成可能な vmap (ベクトル化) と autodiff 変換を提供するライブラリです。それは高度な autodiff ユースケースを可能にします、そこではそれがなければ PyTorch で表現することがトリッキーになるでしょう。これらのサンプルは以下を含みます :

We’re excited to announce functorch 0.2.0 with a number of improvements and new experimental features.

 

大幅に改善されたカバー率

functorch.jvp (forward-mode autodiff API) とそれに依存する他の API (functorch.{jacfwd, hessian}) に対するカバー率を大幅に改善しました。

 

(Prototype) functorch.experimental.functionalize

関数 f が与えられたとき、functionalize(f) は mutations (with caveats) のない新しい関数を返します。これは in-place 演算なしで PyTorch 関数のトレースを構築するために有用です。例えば、pytorch 関数の mutation-free フリーなトレースを構築するために make_fx(functionalize(f)) を使用できます。更に学習するには、ドキュメント (訳注: リンク切れ) をご覧ください。

詳細は、インストール手順, ドキュメント, チュートリアルリリースノート を見てください。

 

以上