PyTorch

出典: フリー百科事典『ウィキペディア(Wikipedia)』
PyTorch
作者
  • Adam Paszke
  • Sam Gross
  • Soumith Chintala
  • Gregory Chanan
初版 2016年10月 (7年前) (2016-10)
最新版 2.3.0[1] ウィキデータを編集 - 2024年4月24日 (8日前) [±]
リポジトリ ウィキデータを編集
プログラミング
言語
対応OS
プラットフォーム
対応言語 英語
種別 機械学習/ディープラーニングライブラリ
ライセンス 修正BSDライセンス
公式サイト pytorch.org ウィキデータを編集
テンプレートを表示

PyTorchは、コンピュータビジョン自然言語処理で利用されている[2]Torch英語版を元に作られた、Pythonオープンソース機械学習ライブラリである[3][4][5]。最初はFacebookの人工知能研究グループAI Research lab(FAIR)により開発された[6][7][8]。PyTorchはフリーでオープンソースのソフトウェアであり、修正BSDライセンスで公開されている。

さまざまなディープラーニングのソフトウェアがPyTorchを利用して構築されており、その中には、UberのPyro[9]、HuggingFaceのTransformers[10]、Catalyst[11][12]などがある。

PyTorchは以下の機能を備えている:

歴史[編集]

FacebookはPyTorchとConvolutional Architecture for Fast Feature Embedding(Caffe2)をメンテナンスしていた。しかし、互換性が無いためPyTorchで定義されたモデルのCaffe2への移行やまたその逆の作業が困難であった。これら2つのフレームワークでモデルを変換することができるように、2017年9月にFacebookとマイクロソフトがOpen Neural Network Exchange(ONNX)プロジェクトを作成した。2018年3月下旬に、Caffe2はPyTorchに併合された[14]

2019年12月、Preferred Networksは自社開発していたChainerのバージョン7をもって、PyTorchによる研究開発へ順次移行して行くことを発表した [15]

PyTorchのテンソル[編集]

PyTorch はテンソルに Tensor (torch.Tensor)と呼ばれるクラスを定義しており、それを均質(homogeneous)な多次元の長方形の数値配列の保存と演算に利用している。PyTorch の Tensor は NumPy の多次元配列 (numpy.ndarray) に似ているが、CUDA が有効な Nvidia のGPU上での演算も可能になっている。NumPyの配列からPyTorchのテンソルへと変換するための専用APIも存在する (torch.from_numpy)。なおPyTorch 2.1以降はPyTorchだけでなくNumPyを使ったコードのGPU向けコンパイルにも対応している[16]

PyTorch には 32bit 浮動小数点数用の FloatTensor や 16bit 浮動小数点数用の HalfTensor 、32bit 整数用の IntTensor など、さまざまな型のTensorサブタイプが存在する[17][18]。またテンソルにはCPUに配置する torch.*Tensor とGPUに配置する torch.cuda.*Tensor が存在している[18]。それぞれは Tensor.to(...) メソッドなどを用いることで変換することができる[18]

また PyTorch のテンソルは機械学習の逆伝播に使われる微分のためのパラメータ(勾配データ (Tensor.grad) や 微分関数 (Tensor.grad_fn))を持つことが出来る (requires_grad=Trueの場合、詳しくは後述の#autogradモジュールを参照)[19]。勾配データ (grad) は追加メモリを必要とするため、不要な場合に取り除くことが可能となっている(torch.no_grad()Tensor.detach() など)。

複素数テンソル(dtype=torch.cfloatのテンソル)[20]や量子化テンソル(dtype=torch.quint8dtype=torch.qint8などのテンソル)[21]も存在している。量子化テンソルはスケールやゼロポイントなどの量子化パラメータを持っている[21]。なお4bit量子化向けのdtype=torch.quint4x2のテンソルもあるが、2023年現在その対応は一部(EmbeddingBag命令)のみとなっている[18]。また8bit浮動小数点数向けの torch.float8_e4m3fn 及び torch.float8_e5m2 のテンソルにも対応しているが対応命令はごく一部となっている[18][(8bit浮動小数点数はNVIDIA H100などの一部GPUのTransformer Engineがネイティブに対応している[22])。

基本のテンソルは長方形であり、非長方形のデータを扱う際には padding で穴埋めする必要があるが、穴の多いデータを穴埋めするのは無駄となるため、非長方形のデータを扱うための疎テンソル (torch.sparse) や ネストされたテンソル (torch.nested) も用意されている。なお、疎テンソル構造はNVIDIA GPUのAmpere以降などでも直接サポートされるようになっているものの、その対応は2:4スパース(半構造化スパース)に限られている[23]が、PyTorch 2.1以降はその疎半構造化テンソルにも試験的に対応している (SparseSemiStructuredTensor)[24][16]

PyTorchのモデル[編集]

PyTorch のモデルは基本的に torch.nn.Module の派生クラスとする必要があり[25]、そのtrain() メソッドとeval()メソッドにより、トレーニングモードと評価モードの切り替えが可能となっている[25]

また to(...) メソッドなどによってモデル全体のパラメータ型の変換が可能であり[25]、それによってモデルパラメータの半精度化(専用のhalf()メソッドもある[25])やbfloat16英語版化(専用のbfloat16()メソッドもある[25])を行うことでメモリ使用量を減らすことが可能となっている。ただしモデルパラメータのより高い圧縮を行うためには torch.quantization などで量子化を行う必要がある。

フロントエンド[編集]

PyTorch のフロントエンドには Pythonインターフェイスだけでなく C++インターフェイスも存在している[26]

autogradモジュール[編集]

PyTorchは自動微分と呼ばれるメソッドを利用する。recorderは実行された演算を記録し、その後、勾配の計算を行うときに記録した演算を逆方向にリプレイする。このメソッドは、ニューラルネットワークの構築時に特に強力であるため、順方向のパラメータの微分を計算することで、1エポックの計算にかかる時間を節約することができる。

optimモジュール[編集]

torch.optimは、ニューラルネットワークの構築時に使用されるさまざまな最適化アルゴリズムを実装したモジュールである。通常使用されるメソッドのほとんどはすでに対応しているため、スクラッチで構築する必要がない。

nnモジュール[編集]

PyTorchのautogradは、簡単に計算グラフを定義して勾配を得られるようになっているが、生のautogradは複雑なニューラルネットワークを定義するにはすこし低レベルすぎる場合がある。そのような場合のサポートとしてnnモジュールが提供されている。

jitモジュール[編集]

TorchScriptとして後述。

バックエンド[編集]

PyTorch のバックエンドは主に C++ で実装されている (ATen)。ATenは外部から直接使うことも可能となっている (C++ではATenライブラリ[27]、Pythonではtorch.ops.aten)。

また PyTorch にはCPUだけでなくGPUバックエンドもあり、NVIDIA製GPU向けにはCUDAで、AMD製GPU向けにはROCm英語版のHIPで、macOS向けにはMetal Performance Shaders (MPS) で実装されている。CUDAにバージョン毎の互換性の問題があることもあって、PyTorch のバイナリはGPUプラットフォーム毎に別々で提供されている。Intel製GPU向けには外部プロジェクトのintel-extension-for-pytorchが必要となる[注釈 1]

PyTorch 2.0以降にはOpenAIのTritonなどをバックエンドとして使用できるTorchDynamoも統合されている(#TorchDynamoを参照)。TorchDynamo ではバックエンドの実装を簡略化するために、複合的な Aten 命令を単純な Prims 命令 (torch._prims) へと低下させる機能も提供している[29]

また PyTorch では別パッケージとして Torch-TensorRT が用意されており、これを使うことにより PyTorch のバックエンドとして NVIDIA の TensorRT を使うことも可能となっている[30][31]


並列処理[編集]

PyTorch は標準で並列処理機能を内蔵しているものの一部のみとなっている。外部プロジェクトの DeepSpeed英語版 はより高度な並列処理を実装している。並列処理を簡単に使うための補助ライブラリとして HuggingFace Accelerate や Lightning Fabric(旧Lightning Lite)が存在する。

また既存モデルでは推論の並列処理を簡単に使うための DeepSpeed MII も存在する[32][33]

またコンピュータ・クラスターを使った学習向けでは外部プロジェクトに MosaicML の Composer が存在し、この Composer はクラウドコンピューティングを使った学習とも相性が良いとされる[34][35][36]


データ並列 (DP)[編集]

PyTorchは以下のデータ並列処理に対応している:

  • マルチスレッドデータ並列処理 (torch.nn.DataParallel) - 2024年現在Pythonのグローバルインタプリタロック (GIL) の問題がありスケールしにくい[37]
  • マルチプロセス/マルチマシンデータ並列処理 (DDP; torch.nn.parallel.DistributedDataParallel)
  • 完全共有データ並列処理 (FSDP; torch.distributed.fsdp.FullyShardedDataParallel) - FairScale の FSDP を統合した[38]

前述の FairScale 及び DeepSpeed は、どちらも最適化状態分割 (OSS; ZeRO Stage 1)、最適化および勾配状態分割 (SDP; ZeRO Stage 2)、完全共有データ並列処理 (FSDP; ZeRO Stage 3) の3つに対応している[39][40]。加えて DeepSpeed は ZeRO Stage 3 よりもノード間通信効率の良い ZeRO++ にも対応している[41]

その他 DeepSpeed にはデータをCPUメモリやNVMeなどへとオフロードするための ZeRO-Infinity[42](及びそのサブセットでホストCPUメモリのみ対応の旧来の ZeRO-Offload[43])も搭載されている。

パイプライン並列 (PP)[編集]

PyTorchは以下のパイプライン並列処理に対応している:

  • パイプライン並列処理 (torch.distributed.pipeline) - nn.Sequentialにのみ対応[44]。FairScaleの実装 (Fairscale.nn.Pipe) を統合したもので、元々は torchgpipe の GPipe実装に由来する[44][45]

PyTorchモデルの自動パイプライン並列処理に向けては PiPPy が開発中となっている[46]。また DeepSpeed もパイプライン並列処理に対応している (deepspeed.pipe)[47]

また推論のパイプライン並列処理にはPetals[48]やFlexGen[49]も存在する。


テンソル並列 (TP)[編集]

PyTorchは以下のテンソル並列処理に対応している:

  • テンソル並列処理 (torch.distributed.tensor.parallel)[50]

また DeepSpeed も DeepSpeed-Inference で推論におけるテンソル並列処理に対応している[51]

エキスパート並列[編集]

エキスパート並列は複数エキスパート(専門家)の混合 (MoE) レイヤー(Switch Transformerなど)を用いたモデルの並列処理を行う[52]

このエキスパート並列には DeepSpeed MoE が対応している[52]

推論の自動ウェイトオフロード[編集]

HuggingFaceのAccelerateは大規模モデルの推論を処理するためにウェイトの自動オフロードに対応している[53][54]

またDeepSpeed も推論でのデータオフロードにも対応している(DeepSpeed ZeRO-Inference)[55]

その他[編集]

PyTorch は CUDA の複数ストリームを使った明示的なGPU並列処理にも対応している[56]

ファイル形式[編集]

PyTorch で良く使われているファイル形式は Python における Python オブジェクトの標準シリアライズ(直列化)である Pickle形式 (*.pkl) [57]及びウェイトやバイアスなどのパラメータを無圧縮ZIPアーカイブでまとめたpt形式となっている。PyTorchでのこの形式の読み書きはtorch.load/torch.savetorch.jit.load/torch.jit.save(TorchScript向け)などを使うことで可能となっている。この形式はPyTorch内外を含め広く用いられているものの、Pickle形式は仮想マシン命令コードを記述したものであり[58]様々な操作が実行できるため、セキュリティのリスクが存在している[57]

そのため PyTorch 標準形式よりも安全で効率的なパラメータ保存形式が開発されてきており、その中の一つ HuggingFace の safetensors 形式は広く普及してきている。

ONNX出力[編集]

ONNX出力 (torch.onnx) には従来のTorchScript経由によるもの (torch.onnx.export) と新しいTorchDynamo経由によるもの (torch.onnx.dynamo_export) がある[59]。前者は#TorchScriptを参照。

TorchScript[編集]

TorchScriptは推論モデル生成のための静的型付け言語である[60]Pythonのサブセット[61]。TorchScriptプログラムはPythonに依存しない環境(例: C++)で実行可能であり[62]JITコンパイルにより動作環境での最適化がおこなわれる。JITコンパイラでは演算fusion等がおこなわれる[63]

なおTorchScriptモデルの保存にはTorchScriptモデル形式が使われている (torch.jit.load / torch.jit.save) が、この形式はPyTorchモデル形式と同じく拡張子に「.pt」が使われている[64]。またTorchScriptを介したONNX形式への変換 (torch.onnx.export) も可能となっている[65]。また外部の LLVM プロジェクトの Torch-MLIR では TorchScript を介してPyTorchモデルのコンパイルを行うことができる[66]

実行[編集]

TorchScriptはJITオプティマイザ・JITコンパイラ付きのインタプリタにより実行される[67]。内部ではGraphExecutorによる最適化とinterpreterによる実行がおこなわれる。対応している最適化には、入力型に基づくGraphの特殊化[68]、演算子の融合 (Op fusion)、定数の事前計算[69]、不要ノード削除[70]などがある。

生成[編集]

TorchScriptコードは直接記述 (torch.jit.script) およびPyTorch実行トレース (torch.jit.trace) により生成される。

以下は前向き (forward) 関数のスクリプト変換の例である:

import torch # PyTorchモジュールを読み込み
def f(x, y): return x + y # 前向き関数を作る
ts_converted = torch.jit.script(f) # Pythonコードから直接TorchScriptに変換
print("Converted:\n%s" % ts_converted.code) # 変換したTorchScriptを表示
ts_traced = torch.jit.trace(f, (torch.tensor([1,2]), torch.tensor([3,4]))) # PyTorchの実行をトレースしてTorchScriptを生成
print("Traced:\n%s" % ts_traced.code) # 生成したTorchScriptを表示

torch.jit.save(ts_converted, "converted.pt") # 変換したTorchScriptをTorchScriptモデル形式で保存
torch.onnx.export(ts_converted, (torch.tensor([1,2]), torch.tensor([3,4])), "converted.onnx") # 上記をONNX形式で出力

torch.jit.script[編集]

torch.jit.script はTorchScriptコンパイラのPythonラッパー関数である[71]

torch.jit.script はPythonオブジェクトとして書かれたTorchScriptコードをコンパイラへ渡し、コンパイル結果へPythonからアクセスするためのラッパーオブジェクトを返す。Pythonデコレータとしても利用できる。

TorchScriptコードのコンパイルをおこなうため、全てのTorchScirpt機能を利用できる(c.f. torch.jit.trace によるトレース)。例えば動的条件分岐を記述できる。

torch.jit.trace[編集]

torch.jit.trace は実行時トレースに基づくPython-to-TorchScriptトランスパイラである[72]

torch.jit.trace は実行可能Pythonオブジェクトとその仮入力を引数に取り、これをトレースしながら実行し、トレース結果に基づいてTorchScriptコードを生成する。すなわち実行時トレースに基づいてPythonコードをTorchScriptコードへ変換する。

仮入力を用いたトレースに基づいて生成をおこなうため、利用できるTorchScript機能に制限がある(c.f. torch.jit.script によるコンパイル)。例えば条件分岐は仮入力が満たす片方のパスしか記録されないため、TorchScriptの動的条件分岐として変換されない。すなわちTorchScriptの動的条件分岐は利用できない[73]

FX[編集]

torch.fx はモデルの高レベルグラフ化・変換・コード生成に関するモジュールである[74][75]。モデルを入力/出力/演算の有向非巡回グラフと見なすIRを定義し[76]、モデル→IR→モデルの変換とIR編集をサポートする。主に次の3つの機能を提供する[77]

  • Model-to-IR: シンボリックトレースによるPython/PyTorchモデルからのIR生成
  • IR-to-IR: IRで表現されたグラフの変換
  • IR-to-Model: IRからのPython/PyTorchコード生成

FXはPythonをホスト言語とするIRグラフのメタプログラミングであり[78]、グラフの分析・可視化[79]、演算子の書き換えによる量子化[80]、グラフ全体を考慮したop fusion[81]、IRからのアクセラレータコード直接生成[82]など様々な用途に利用される。

モデルエクスポートのための幅広い演算サポートを目指すTorchScript IR[83]と異なり、FX IRは動的な制御フローを含まず演算ノード単位の操作を前提とした高レベルな表現と、それに付随するシンプルなIR生成・IR操作・モデル生成実装を掲げている。

以下は前向き (forward) 関数の変換の例である:

import torch # PyTorchモジュールを読み込み
def f(x, y): return x + y # 前向き関数を作る
fx_traced = torch.fx.symbolic_trace(f) # PyTorchの実行をトレースしてFX Graphを生成
print(fx_traced.graph) # FX GraphのIRを表示
print(fx_traced.code) # FX GraphをPythonコードに再変換して表示

AOT Autograd[編集]

AOT Autograd (functorch.compile) は前向き関数と後向き関数をコンパイルするための実験的サブシステムである[84]。FX GraphをTorchScriptのコンパイラによってコンパイルするための functorch.compile.ts_compile も実験的に提供されている[85]

以下は前向き (forward) 関数の変換の例である:

import torch, functorch # PyTorch 及び functorch モジュールを読み込み
def f(x, y): return x + y # 前向き関数を作る
fx_traced = torch.fx.symbolic_trace(f) # PyTorchの実行をトレースしてFX Graphを生成
ts_compiled = functorch.compile.ts_compile(fx_traced, [torch.Tensor([1,2]), torch.Tensor([3,4])]) # TorchScriptコンパイラでFXグラフをコンパイル
ts_compiled([torch.Tensor([1,2]), torch.Tensor([3,4])]) # コンパイルされた関数を実行

TorchDynamo[編集]

TorchDynamo (torch._dynamo) は任意のPythonコードをコンパイルのためのサブシステムである。JITコンパイルするためのtorch.compile API、事前コンパイルするためのtorch.export APIもある(後者は#事前コンパイルと量子化参照)。コンパイルできないコードは自動的にPythonインタプリタへとフォールバックされる。2023年にリリースされたPyTorch 2.0で本体へと統合された。

狭義のTorchDynamoはPythonのバイトコードから前述のFX Graphを作るサブシステムであり[29]、FX Graphを各実行環境向けIRへと変換するための各バックエンド(TorchInductor、onnxrtバックエンドなど)と組み合わせてPythonコードのコンパイルを行うことができる[29]。バックエンドを実装しやすくするためのものとして、FX Graphの複合的なAten命令を単純なPrim命令へと置き換えるPrimTorchも存在する[29]

以下は前向き (forward) 関数の最適化の例である:

import torch
def f(x, y): return x + y # 前向き関数を作る
optimized_f = torch.compile(f, backend="inductor") # 前向き関数をTorchDynamo(+ TorchInductor)で最適化
optimized_f(1, 2) # 最適化された前向き関数を実行

また派生プロジェクトとしてバックエンドにTensorFlow XLAコンパイラを使うためのPyTorch/XLAも開発中となっているが、こちらも試験的にTorchDynamoへと対応しており[86][87]、場合によってはTorchDynamo+Inductorよりも高速であるとされる[87]

事前コンパイルと量子化[編集]

PyTorch 2.1以降には事前コンパイル (torch.export) が試験的に実装されている[16]。また量子化 (torch.ao.quantization[注釈 2]) も試験的にtorch.exportに対応している[16]

量子化では訓練後量子化(Post Training Quantization; PTQ)と量子化意識訓練 (Quantization Aware Training; QAT) の両方に対応している[88]


モバイル向け展開[編集]

PyTorchモデルのモバイル向け展開にはPyTorch MobileとExecutorchが存在する[89][90]

PyTorch MobileはTorchScriptを使った軽量インタプリタとなっている[89]が、最適化 (torch.utils.mobile_optimizer) [91]にも対応している[89]

一方、Executorchはtorch.compileベースとなっている[90]


モデル / ライブラリ[編集]

Transformer モデル[編集]

性能の高い機械学習モデル「Transformer」が人気となるにつれ、PyTorchでも内部プロジェクト外部プロジェクト合わせ数多くの実装が登場した。その代表的なものには以下が存在する:

  • torch.nn.Transformer[92] - PyTorch 1.2で実装された[93]
    • Accelerated Transformers - 旧Better Transformers[94]。HazyResearch社 の FlashAttention や Meta AI英語版社 の xFormers などを取り入れて上記APIを高速化したもの[94][95]であり、PyTorch 2.0で安定版が搭載された[94]。前身のBetter TransformersはHugging FaceのOptimumで簡単に使用することが出来た[96]
  • Transformers (Hugging Face) - 様々な応用モデルを実装している。PyTorch以外にも対応している。
  • Fairseq (Meta AI) - Transformer派生を含む様々な応用モデルを実装している。またNVIDIAによりこのFairseqに基づくTransformerの実装が「Transformer for PyTorch」として提供されている[97]
  • xFormers (Meta AI) - 高速かつ省メモリな複数の実装を含んでいる(CUTLASSを使った実装やOpenAI Triton英語版を使った実装など)。前述のFairseqや後述のDiffusersでも使えるようになっている[98][99]

拡散モデル[編集]

拡散モデル(確率拡散モデル; Diffusion model)は特に生成AI(ジェネレーティブAI)において人気となり、PyTorchでもその実装が登場した。その代表的なものには以下が存在する:

  • Diffusers (Hugging Face) - 単純なU-Net英語版ベースの拡散モデルだけでなく、変分オートエンコーダー (VAE) による潜在空間英語版を使った潜在拡散モデル (LDM) やその応用の Stable Diffusion (SD)、埋め込み表現にCLIPの代わりにXLM-RobertaベースのAltCLIPを使ってマルチリンガル化した AltDiffusion[100]、ベクトル量子化VAE (VQ-VAE) による潜在空間を使った VQ-Diffusion、CLIPのテキスト埋め込みを直接使わず画像埋め込みへと変換してからガイドとして使用するDALL-E 2を模したKarlo unCLIP、U-Net部分までTransformerに置き換えたDiT (Diffusion Transformer)、動画生成に対応する Text-to-Video / Text2Video-Zero、オーディオに特化した Audio Diffusion / Latent Audio Diffusion、 MIDIからオーディオを生成する Spectrogram Diffusion、汎用拡散モデルの Versatile Diffusion などを実装している。また追加学習ではTextual Inversion、Text-to-imageファインチューニング、DreamBooth、LoRAなどに対応している。

torchvision[編集]

torchvision は PyTorch 向けの画像処理向けのライブラリである。画像分類 (Swin Transformer / MaxVit / Swin Transformer V2 / EfficientNet / ConvNeXt / EfficientNetV2 / RegNet / VisionTransformer等[注釈 3])、動画分類 (Video ResNet / Video S3D / Video MViT / Video SwinTransformer)、セマンティックセグメンテーション (LRASPP / FCN / DeepLabV3)、物体検出 (SSDlite / SSD / FCOS / RetinaNet / Faster R-CNN)、インスタンスセグメンテーション (Mask R-CNN)、キーポイント検出 (Keypoint R-CNN)、オプティカルフロー (RAFT) などに対応している[101]


torchaudio[編集]

torchaudio は PyTorch 向けの音声処理向けのライブラリである。音声認識 (Emformer RNN-T / XLS-R / Conformer RNN-T[102])、視覚音声認識 (AV-ASR[102])、テキスト音声合成 (Tacotron2)、音声強調 (MVDR)、ビームフォーミング (DNNBeamformer[102])、音源分離英語版 (Hybrid Demucs)、音声品質測定 (TorchAudio-Squim[102]) 、テキストへの強制位置合わせ (CTC forced alignment[102]) などに対応している。

その他、音声のベクトル化では wav2vec 2.0、HuBERT、WavLM に対応している[103]。GPUベースのCTCビームサーチ (CUCTCDecoder) にも対応している[102]

torchtext[編集]

torchtext は PyTorch 向けのテキスト処理ライブラリである。大規模言語モデル (LLM) の XLM-RoBERTa[104] や T5[105] に対応している。なお大規模言語モデルで文書分類、言語モデリング、質疑応答、機械翻訳などの多様なタスクを行うには、モデルをそれぞれへと適応するためのファインチューニングやプロンプティングが必要となる。

その他、テキストのトークン化では正規表現での置換によるトークン化 (RegexTokenizer)、文字バイト対符号化 (BPE) によるトークン化 (CharBPETokenizer)、バイトレベルBPEによるトークン化(CLIPで使われるCLIPTokenizerやGPT-2で使われるGPT2BPETokenizer)、WordPieceによるトークン化(BERTで使われるBERTTokenizer)、事前学習モデルによるトークン化(T5などに使われるSentencePieceTokenizer)に対応している[106][107]。また単語の埋め込みベクトルへの変換では GloVe、FastText、CharNGram に対応している[108]

2023年9月、開発をメンテナンスモードに移行し[102]、2024年4月開発終了となった[109]

TorchRL[編集]

TorchRL は PyTorch 向けの強化学習ライブラリである。暗黙的Q学習 (IQL)、深層Q学習 (DQN)、近傍方策最適化英語版 (PPO)、深層決定論的方策勾配法 (DDPG)、双生遅延DDPG (TD3)、Advantage Actor-Critic (A2C)、Soft-Actor-Critic (SAC)、保守的Q学習 (CQL)[102]、ランダム化アンサンブル化ダブルQ学習 (REDQ)、Dreamer、Decision Transformer[102]人間のフィードバックによる強化学習 (RLHF)に対応している[110]

TensorDict[編集]

TensorDict は PyTorch 向けの辞書構造ライブラリである。

TorchRec[編集]

tensordict は PyTorch 向けのレコメンデーション(推薦)ライブラリである。

PyTorch Hub[編集]

PyTorch Hub (torch.hub) は GitHub のリポジトリ上に存在するPyTorchの事前学習モデルを簡単に使用できるようにするための仕組みである[111]。リポジトリをこの PyTorch Hub で使えるようにするためにはリポジトリ上に「hubconf.py」を設置する必要がある[111]

PyTorch Hub に対応しているリポジトリには例えば以下が存在する:

  • torchvision ("pytorch/vision")[101]
  • Fairseq ("pytorch/fairseq")[112]
  • YOLOv5 ("ultralytics/yolov5")[113]

PyTorch Hubでリポジトリ上のモデルを読み込むコードの例:

import torch
yolov5s_model = torch.hub.load('ultralytics/yolov5', 'yolov5s')

なお外部プロジェクトには GitHub 及び PyTorch Hubを使わずに、GitHubに似た独自リポジトリシステムとその読み込みスクリプトを提供するものも存在する(Hugging FaceHugging Face Hub[114][115]など)。

TorchMetrics[編集]

Lightning AI製の評価指標(メトリクス)用ライブラリ。

学習[編集]

データローダ[編集]

PyTorchに使うことのできるデータローダには以下が存在する:

  • DataLoader (torch.utils.data.DataLoader) - PyTorch標準のデータローダ。
  • DataLoader2 (torchdata.dataloader2.DataLoader2) - 別パッケージのTorchDataで開発されているDataPipesを基にした実験的なデータローダ[116]
  • FFCV (Fast Forward Computer Vision; ffcv.loader)
  • NVIDIA DALI (Data Loading Library; nvidia.dali.plugin.pytorch) - GPUDirect Storageに対応したデータローダ[117]。PyTorch以外にも対応している[117]。実験的なGPUデータ解凍にも対応している (fn.experimental.inflate)。

またデータセットの自動ダウンロードに対応するデータローダとして HuggingFace Datasets Hub のデータセットが使用可能な HuggingFace 製の Datasets も存在する。

PyTorch Lightning[編集]

PyTorch Lightning は学習から展開までの簡易化のための PyTorch 向けサードパーティー製ライブラリである。

高速化[編集]

より高い効率で学習を行うための様々な標準機能・外部ライブラリが提供されている。以下はその一例である。

表. PyTorch学習高速化機能・ライブラリ
名称 手法
torch.jit.script TorchScript言語での記述 → TorchScriptによる学習の最適化
torch.jit.trace 仮入力トレースによるTorchScriptへの変換 → TorchScriptによる学習の最適化
torch.fx.symbolic_trace FXのTrace機能によるGraphIR化→各バックエンドによる学習の最適化
torch._dynamo 部分的GraphIR化→PythonJITコンパイラでの部分的バックエンド利用による学習の最適化

それぞれの手法で特徴と適用範囲が異なる。例えばDynamoでは動的条件分岐を扱えるがfx.symbolic_traceでは扱えない[118]

脚注[編集]

  1. ^ 既にIntel GPU向けモジュールのtorch.xpuはある[28]ものの、本体への統合はまだ途中となっている。
  2. ^ 旧torch.quantization
  3. ^ AlexNet、SqueezeNet、GoogLeNet、MobileNet V2、VGG、MobileNet V3、ShuffleNet V2、MNASNet、DenseNet、Inception V3、ResNet、Wide ResNet、ResNeXtにも対応

出典[編集]

  1. ^ "Release 2.3.0"; 閲覧日: 2024年4月25日; 出版日: 2024年4月24日.
  2. ^ Natural Language Processing (NLP) with PyTorch — NLP with PyTorch documentation” (英語). dl4nlp.info. 2019年3月30日閲覧。
  3. ^ Yegulalp, Serdar (2017年1月19日). “Facebook brings GPU-powered machine learning to Python”. InfoWorld. https://www.infoworld.com/article/3159120/artificial-intelligence/facebook-brings-gpu-powered-machine-learning-to-python.html 2019年3月30日閲覧。 
  4. ^ Lorica, Ben (2017年8月3日). “Why AI and machine learning researchers are beginning to embrace PyTorch”. O'Reilly Media. 2019年3月30日閲覧。
  5. ^ Ketkar, Nikhil (2017). “Introduction to PyTorch” (英語). Deep Learning with Python. Apress, Berkeley, CA. pp. 195–208. doi:10.1007/978-1-4842-2766-4_12. ISBN 9781484227657 
  6. ^ Patel, Mo (2017年12月7日). “When two trends fuse: PyTorch and recommender systems” (英語). O'Reilly Media. https://www.oreilly.com/ideas/when-two-trends-fuse-pytorch-and-recommender-systems 2019年3月30日閲覧。 
  7. ^ Mannes, John. “Facebook and Microsoft collaborate to simplify conversions from PyTorch to Caffe2” (英語). TechCrunch. https://techcrunch.com/2017/09/07/facebook-and-microsoft-collaborate-to-simplify-conversions-from-pytorch-to-caffe2/ 2019年3月30日閲覧. "FAIR is accustomed to working with PyTorch — a deep learning framework optimized for achieving state of the art results in research, regardless of resource constraints. Unfortunately in the real world, most of us are limited by the computational capabilities of our smartphones and computers." 
  8. ^ Arakelyan, Sophia (2017年11月29日). “Tech giants are using open source frameworks to dominate the AI community” (英語). VentureBeat. 2019年3月30日閲覧。
  9. ^ “Uber AI Labs Open Sources Pyro, a Deep Probabilistic Programming Language” (英語). Uber Engineering Blog. (2017年11月3日). https://eng.uber.com/pyro/ 2017年12月18日閲覧。 
  10. ^ PYTORCH-TRANSFORMERS: PyTorch implementations of popular NLP Transformers, PyTorch Hub, (2019-12-01), https://pytorch.org/hub/huggingface_pytorch-transformers/ 2019年12月1日閲覧。 
  11. ^ GitHub - catalyst-team/catalyst: Accelerated DL & RL, Catalyst-Team, (2019-12-05), https://github.com/catalyst-team/catalyst 2019年12月5日閲覧。 
  12. ^ PyTorch” (英語). www.pytorch.org. 2019年12月5日閲覧。
  13. ^ a b PyTorch – About”. pytorch.org. 2018年6月15日時点のオリジナルよりアーカイブ。2018年6月11日閲覧。
  14. ^ Synced (2018年4月2日). “Caffe2 Merges With PyTorch”. 2019年3月30日閲覧。
  15. ^ Chainer Team (2010年12月5日). “Chainer/CuPy v7のリリースと今後の開発体制について”. Chainer Blog. 2020年8月10日閲覧。
  16. ^ a b c d PyTorch 2.1: automatic dynamic shape compilation, distributed checkpointing
  17. ^ An Introduction to PyTorch – A Simple yet Powerful Deep Learning Library”. analyticsvidhya.com (2018年2月22日). 2018年6月11日閲覧。
  18. ^ a b c d e torch.tensor PyTorch Foundation
  19. ^ Autograd PyTorch Foundation
  20. ^ Complex Numbers PyTorch Foundation
  21. ^ a b Quantization PyTorch Foundation
  22. ^ Using FP8 with Transformer Engine NVIDIA
  23. ^ NVIDIA Ampereにおけるプルーニング対応の特徴 Impress 2020年7月20日
  24. ^ Sparse Semi-Structured Tensors PyTorch Foundation
  25. ^ a b c d e Module PyTorch Foundation
  26. ^ The C++ Frontend”. PyTorch Master Documentation. 2019年7月29日閲覧。
  27. ^ Tensor Basics PyTorch Foundation
  28. ^ torch.xpu PyTorh Foundation
  29. ^ a b c d PyTorch 2.0 PyTorch Foundation
  30. ^ Installation PyTorch Foundation
  31. ^ Torch-TensorRT で PyTorch の推論を最大 6 倍高速化 NVIDIA 2021年12月2日
  32. ^ DeepSpeed-MII: instant speedup on 24,000+ open-source DL models with up to 40x cheaper inference Microsoft 2022年10月10日
  33. ^ DeepSpeed Deep Dive — Model Implementations for Inference (MII) Towards Data Science 2022年11月17日
  34. ^ Reduce deep learning training time and cost with MosaicML Composer on AWS Amazon Web Services 2022年10月24日
  35. ^ Cloudflare R2 and MosaicML enable training LLMs on any compute, anywhere in the world, with zero switching costs Cloudflare 2023年5月16日
  36. ^ Train and deploy generative AI faster with MosaicML and Oracle オラクル 2023年5月16日
  37. ^ Getting Started with Distributed Data Parallel — PyTorch Tutorials 2.3.0+cu121 documentation PyTorch Foundation
  38. ^ Introducing PyTorch Fully Sharded Data Parallel (FSDP) API PyTorch Foundation 2022年3月14日
  39. ^ ZeRO Microsoft
  40. ^ Efficient Memory management - FairScale documentation Facebook Research
  41. ^ ZeRO++ Microsoft
  42. ^ ZeRO-Infinity and DeepSpeed: Unlocking unprecedented model scale for deep learning training Microsoft
  43. ^ ZeRO-Offload Microsoft
  44. ^ a b Pipeline Parallelism PyTorch Foundation
  45. ^ Pipeline Parallelism - FairScale documentation Facebook Research
  46. ^ PiPPy PyTorch Foundation
  47. ^ Pipeline Parallelism - DeepSpeed Microsoft
  48. ^ PETALS: Collaborative Inference and Fine-tuning of Large Models p.2 Alexander Borzunov et al. 2023年
  49. ^ FlexGen: High-Throughput Generative Inference of Large Language Models with a Single GPU p.6 Ying Sheng et al. 2023年
  50. ^ Tensor Parallelism - torch.distributed.tensor.parallel PyTorch Foundation
  51. ^ Model Parallelism — transformers 4.11.3 documentation Hugging Face
  52. ^ a b Mixture of Experts - DeepSpeed Microsoft
  53. ^ Handling big models for inference HuggingFace
  54. ^ How 🤗 Accelerate runs very large models thanks to PyTorch HuggingFace 2022年9月27日
  55. ^ ZeRO-Inference: Democratizing massive model inference Microsoft 2022年9月9日
  56. ^ Docs > CUDA semantics - CUDA streams PyTorch Foundation
  57. ^ a b Pickle Scanning HuggingFace
  58. ^ Python pickle serialization format: format specification Kaitai Project
  59. ^ torch.onnx PyTorch Foundation
  60. ^ "TorchScript is a way to create serializable and optimizable models from PyTorch code." PyTorch. TorchScript.
  61. ^ "TorchScript is a statically typed subset of Python" PyTorch. TorchScript Language Reference.
  62. ^ "TorchScript program that can be run independently from Python, such as in a standalone C++ program." PyTorch. TorchScript.
  63. ^ "In PyTorch 1.10, we’ve added an LLVM-based JIT compiler for CPUs that can fuse together sequences of torch library calls" PyTorch. PyTorch 1.10 Release.
  64. ^ Saving and Loading Models — PyTorch Tutorials 1.12.1+cu102 documentation PyTorch Foundation
  65. ^ torch.onnx — PyTorch 1.13 documentation PyTorch Foundation
  66. ^ My spring internship – torch-mlir eager mode, OPT and blowing away the main git repo nod.ai 2022年6月20日
  67. ^ "TorchScript is executed using an interpreter attached to a JIT-optimizer and compiler." PyTorch. JIT Technical Overview. 2022-03-19閲覧.
  68. ^ "The executor specializes the Graph for the particular set of inputs." PyTorch. JIT Technical Overview. 2022-03-19閲覧.
  69. ^ "It propagates constants, pre-computing as much as possible" PyTorch. JIT Technical Overview. 2022-03-19閲覧.
  70. ^ "Eliminating dead code" PyTorch. JIT Technical Overview. 2022-03-19閲覧.
  71. ^ "Scripting a function or nn.Module will inspect the source code, compile it as TorchScript code using the TorchScript compiler, and return a ScriptModule or ScriptFunction." PyTorch. TORCH.JIT.SCRIPT. pytorch.org. 2023-08-29閲覧.
  72. ^ "Using torch.jit.trace and torch.jit.trace_module, you can turn an existing module or Python function into a TorchScript ScriptFunction or ScriptModule. You must provide example inputs, and we run the function, recording the operations performed on all the tensors." Python. TORCH.JIT.TRACE. pytorch.org. 2023-08-29閲覧.
  73. ^ "Tracing will not record any control-flow like if-statements or loops." Python. TORCH.JIT.TRACE. pytorch.org. 2023-08-29閲覧.
  74. ^ "FX is a toolkit for developers to use to transform nn.Module instances." PyTorch. TORCH.FX. 2022-03-23閲覧.
  75. ^ "torch.fx, a program capture and transformation library for PyTorch" Reed, et al. (2021). Torch.fx: Practical Program Capture and Transformation for Deep Learning in Python. arxiv.
  76. ^ "torch.fx represents programs in a DAG-based IR" Reed, et al. (2021). Torch.fx: Practical Program Capture and Transformation for Deep Learning in Python. arxiv.
  77. ^ "FX consists of three main components: a symbolic tracer, an intermediate representation, and Python code generation." PyTorch. TORCH.FX. 2022-03-23閲覧.
  78. ^ "graph-based ... IR ... Program transformations ... is as simple embedded programming languages that are meta-programmed from a host language, predominantly Python" Reed, et al. (2021). Torch.fx: Practical Program Capture and Transformation for Deep Learning in Python. arxiv.
  79. ^ "torch.fx provides an fx.graph_drawer package, which gives the user the ability to visualize torch.fx graphs with Graphviz" Reed, et al. (2021). Torch.fx: Practical Program Capture and Transformation for Deep Learning in Python. arxiv.
  80. ^ "Quantization makes use of torch.fx’s graph and GraphModule representation to simultaneously modify the program code and weight values." Reed, et al. (2021). Torch.fx: Practical Program Capture and Transformation for Deep Learning in Python. arxiv.
  81. ^ "6.2.2 Fusion Optimizations ... torch.fx provides the necessary non-local program context and state modification facilities needed for this transformation with its ahead-of-time, graph-based nature" Reed, et al. (2021). Torch.fx: Practical Program Capture and Transformation for Deep Learning in Python. arxiv.
  82. ^ " The project was quickly developed using torch.fx’s Python APIs as well as TensorRT’s Python APIs, creating a translation layer between the two." Reed, et al. (2021). Torch.fx: Practical Program Capture and Transformation for Deep Learning in Python. arxiv.
  83. ^ "the purposes of serialization or export. For instance, TorchScript" Reed, et al. (2021). Torch.fx: Practical Program Capture and Transformation for Deep Learning in Python. arxiv.
  84. ^ functorch.compile (experimental) — functorch 1.13 documentation PyTorch Foundation
  85. ^ functorch.compile.ts_compile — functorch 1.13 documentation PyTorch Foundation
  86. ^ TorchDynamo(torch.compile) integration in PyTorch XLA PyTorch Foundation
  87. ^ a b The Path to Achieve Ultra-Low Inference Latency With LLaMA 65B on PyTorch/XLA PyTorch Foundation
  88. ^ Quantization PyTorch Foundation
  89. ^ a b c PyTorch Mobile PyTorch Foundation
  90. ^ a b ExecuTorch PyTorch Foundation
  91. ^ torch.utils.mobile_optimizer PyTorch Foundation
  92. ^ torch.nn - Transformer Layers PyTorch Foundation
  93. ^ New Releases: PyTorch 1.2, torchtext 0.4, torchaudio 0.3, and torchvision 0.4 PyTorch Foundation 2019年8月8日
  94. ^ a b c PyTorch 2.0: Our next generation release that is faster, more Pythonic and Dynamic as ever PyTorch Foundation 2023年3月15日
  95. ^ A BetterTransformer for Fast Transformer Inference PyTorch Foundation 2022年7月12日
  96. ^ BetterTransformer - Overview Hugging Face
  97. ^ Transformer for PyTorch NVIDIA
  98. ^ Fairseq Meta AI
  99. ^ 動画も音楽もゲームも 広がるAIエンターテインメントの可能性 ITmedia 2022年11月11日
  100. ^ AltDiffusion Hugging Face
  101. ^ a b Models and pre-trained weights — Torchvision main documentation PyTorch Foundation
  102. ^ a b c d e f g h i New Library Updates in PyTorch 2.1 PyTorch Foundation 2023年10月4日
  103. ^ torchaudio.pipelines PyTorch Foundation
  104. ^ SST-2 Binary text classification with XLM-RoBERTa model PyTorch Foundation
  105. ^ T5-Base Model for Summarization, Sentiment Classification, and Translation PyTorch Foundation
  106. ^ torchtext.transforms PyTorch Foundation
  107. ^ Summary of the tokenizers Hugging Face
  108. ^ torchtext.vocab PyTorch Foundation
  109. ^ torchtext PyTorch Foundation
  110. ^ TorchRL PyTorch Foundation
  111. ^ a b torch.hub — PyTorch 1.13 documentation PyTorch Foundation
  112. ^ fairseq · PyPI Facebook
  113. ^ PyTorch Hub Ultralytics
  114. ^ Hugging Face Introduces Private Hub Weights & Biases 2022年8月3日
  115. ^ Integrate your library with the Hub Hugging Face
  116. ^ PyTorch 1.12: TorchArrow, Functional API for Modules and nvFuser, are now available PyTorch Foundation 2022年6月28日
  117. ^ a b NVIDIA DALI Documentation NVIDIA
  118. ^ "torch.fx.symbolic_trace() ... can’t handle control flow" PyTorch. Why do you need another way of optimizing PyTorch code? - Getting Started - TorchDynamo Overview. pytorch.org. 2023-08-28閲覧.

参考文献[編集]

  • 小川雄太郎:「つくりながら学ぶ! PyTorchによる発展ディープラーニング」,マイナビ出版(2019年7月29日)、ISBN 978-4839970253.
  • 斎藤勇哉『動かしながら学ぶ PyTorchプログラミング入門』オーム社、2020年11月21日。ISBN 978-4-274-22640-3 
  • Eli Stevens, Luca Antiga, Thomas Viehmann: 「PyTorch実践入門」,マイナビ出版(2021年1月30日)、ISBN 978-4839974695.
  • 赤石雅典:「最短コースでわかる PyTorch &深層学習プログラミング」,日経BP(2021年9月17日)、ISBN 978-4296110322.

関連項目[編集]

外部リンク[編集]