PyTorch
作者 |
|
---|---|
初版 | 2016年10月 |
最新版 | 2.5.0[1] - 2024年10月17日 [±] |
リポジトリ | |
プログラミング 言語 | |
対応OS | |
プラットフォーム | |
対応言語 | 英語 |
種別 | 機械学習/ディープラーニングライブラリ |
ライセンス | 修正BSDライセンス |
公式サイト |
pytorch |
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は以下の機能を備えている:
- 強力なGPUサポートを備えた(NumPyのような)テンソル演算[13]
- 自動微分エンジンの上に構築された深層学習トレーニング[13] (torch.autograd)
- 自動微分化や自動ベクトル化などの(Google JAXのような)関数変換(functorch / torch.func)
- 実行時コンパイル (torch.jit)
- 並列処理(#並列処理参照)
- 機械学習モデル形式「ONNX」へのエクスポート(torch.onnx)
歴史
[編集]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.quint8
やdtype=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で、Intel製GPU向けにはSYCLで[28][29][注釈 1]、macOS向けにはMetal Performance Shaders (MPS) で実装されている。CUDAにバージョン毎の互換性の問題があることもあって、PyTorch のバイナリはGPUプラットフォーム毎に別々で提供されている。
AI専用チップ向けのバックエンドでは外部プロジェクトとして Intel Gaudi 向けの habana_frameworks.torch [30]、Huawei Ascend 向けの torch_npu などが存在する[31]。PyTorchではこれら外部バックエンドを登録するための仕組み「PrivateUse1」が用意されている[31][32]。
PyTorch 2.0以降にはOpenAIのTritonなどをバックエンドとして使用できるTorchDynamoも統合されている(#TorchDynamoを参照)。TorchDynamo ではバックエンドの実装を簡略化するために、複合的な Aten 命令を単純な Prims 命令 (torch._prims) へと低下させる機能も提供している[33]。
また PyTorch では別パッケージとして Torch-TensorRT が用意されており、これを使うことにより PyTorch のバックエンドとして NVIDIA の TensorRT を使うことも可能となっている[34][35]。
並列処理
[編集]PyTorch は標準で並列処理機能を内蔵しているものの一部のみとなっている。外部プロジェクトの DeepSpeed はより高度な並列処理を実装している。並列処理を簡単に使うための補助ライブラリとして HuggingFace Accelerate や Lightning Fabric(旧Lightning Lite)が存在する。
また既存モデルでは推論の並列処理を簡単に使うための DeepSpeed MII も存在する[36][37]。
またコンピュータ・クラスターを使った学習向けでは外部プロジェクトに MosaicML の Composer が存在し、この Composer はクラウドコンピューティングを使った学習とも相性が良いとされる[38][39][40]。
データ並列 (DP)
[編集]PyTorchは以下のデータ並列処理に対応している:
- マルチスレッドデータ並列処理 (torch.nn.DataParallel) - 2024年現在Pythonのグローバルインタプリタロック (GIL) の問題がありスケールしにくい[41]。
- マルチプロセス/マルチマシンデータ並列処理 (DDP; torch.nn.parallel.DistributedDataParallel)
- 完全共有データ並列処理 (FSDP; torch.distributed.fsdp.FullyShardedDataParallel) - FairScale の FSDP を統合した[42]。
前述の FairScale 及び DeepSpeed は、どちらも最適化状態分割 (OSS; ZeRO Stage 1)、最適化および勾配状態分割 (SDP; ZeRO Stage 2)、完全共有データ並列処理 (FSDP; ZeRO Stage 3) の3つに対応している[43][44]。加えて DeepSpeed は ZeRO Stage 3 よりもノード間通信効率の良い ZeRO++ にも対応している[45]。
その他 DeepSpeed にはデータをCPUメモリやNVMeなどへとオフロードするための ZeRO-Infinity[46](及びそのサブセットでホストCPUメモリのみ対応の旧来の ZeRO-Offload[47])も搭載されている。
パイプライン並列 (PP)
[編集]PyTorchは以下のパイプライン並列処理に対応している:
- パイプライン並列処理 (torch.distributed.pipeline) - nn.Sequentialにのみ対応[48]。FairScaleの実装 (Fairscale.nn.Pipe) を統合したもので、元々は torchgpipe の GPipe実装に由来する[48][49]。
PyTorchモデルの自動パイプライン並列処理に向けては PiPPy が開発中となっている[50]。また DeepSpeed もパイプライン並列処理に対応している (deepspeed.pipe)[51]。
また推論のパイプライン並列処理にはPetals[52]やFlexGen[53]も存在する。
テンソル並列 (TP)
[編集]PyTorchは以下のテンソル並列処理に対応している:
- テンソル並列処理 (torch.distributed.tensor.parallel)[54]
また DeepSpeed も DeepSpeed-Inference で推論におけるテンソル並列処理に対応している[55]。
エキスパート並列
[編集]エキスパート並列は複数エキスパート(専門家)の混合 (MoE) レイヤー(Switch Transformerなど)を用いたモデルの並列処理を行う[56]。
このエキスパート並列には DeepSpeed MoE が対応している[56]。
推論の自動ウェイトオフロード
[編集]この節の加筆が望まれています。 |
HuggingFaceのAccelerateは大規模モデルの推論を処理するためにウェイトの自動オフロードに対応している[57][58]。
またDeepSpeed も推論でのデータオフロードにも対応している(DeepSpeed ZeRO-Inference)[59]。
その他
[編集]PyTorch は CUDA の複数ストリームを使った明示的なGPU並列処理にも対応している[60]。
ファイル形式
[編集]この節の加筆が望まれています。 |
PyTorch で良く使われているファイル形式は Python における Python オブジェクトの標準シリアライズ(直列化)である Pickle形式 (*.pkl) [61]及びウェイトやバイアスなどのパラメータを無圧縮ZIPアーカイブでまとめたpt形式となっている。PyTorchでのこの形式の読み書きはtorch.load/torch.save
やtorch.jit.load/torch.jit.save
(TorchScript向け)などを使うことで可能となっている。この形式はPyTorch内外を含め広く用いられているものの、Pickle形式は仮想マシンの命令コードを記述したものであり[62]様々な操作が実行できるため、セキュリティのリスクが存在している[61]。
そのため PyTorch 標準形式よりも安全で効率的なパラメータ保存形式が開発されてきており、その中の一つ HuggingFace の safetensors 形式は広く普及してきている。
ONNX出力
[編集]この節の加筆が望まれています。 |
ONNX出力 (torch.onnx) には従来のTorchScript経由によるもの (torch.onnx.export) と新しいTorchDynamo経由によるもの (torch.onnx.dynamo_export) がある[63]。前者は#TorchScriptを参照。
TorchScript
[編集]TorchScriptは推論モデル生成のための静的型付け言語である[64]。Pythonのサブセット[65]。TorchScriptプログラムはPythonに依存しない環境(例: C++)で実行可能であり[66]、JITコンパイルにより動作環境での最適化がおこなわれる。JITコンパイラでは演算fusion等がおこなわれる[67]。
なおTorchScriptモデルの保存にはTorchScriptモデル形式が使われている (torch.jit.load / torch.jit.save) が、この形式はPyTorchモデル形式と同じく拡張子に「.pt」が使われている[68]。またTorchScriptを介したONNX形式への変換 (torch.onnx.export) も可能となっている[69]。また外部の LLVM プロジェクトの Torch-MLIR では TorchScript を介してPyTorchモデルのコンパイルを行うことができる[70]。
実行
[編集]TorchScriptはJITオプティマイザ・JITコンパイラ付きのインタプリタにより実行される[71]。内部ではGraphExecutorによる最適化とinterpreterによる実行がおこなわれる。対応している最適化には、入力型に基づくGraphの特殊化[72]、演算子の融合 (Op fusion)、定数の事前計算[73]、不要ノード削除[74]などがある。
生成
[編集]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ラッパー関数である[75]。
torch.jit.script
はPythonオブジェクトとして書かれたTorchScriptコードをコンパイラへ渡し、コンパイル結果へPythonからアクセスするためのラッパーオブジェクトを返す。Pythonデコレータとしても利用できる。
TorchScriptコードのコンパイルをおこなうため、全てのTorchScirpt機能を利用できる(c.f. torch.jit.trace
によるトレース)。例えば動的条件分岐を記述できる。
torch.jit.trace
[編集]torch.jit.trace
は実行時トレースに基づくPython-to-TorchScriptトランスパイラである[76]。
torch.jit.trace
は実行可能Pythonオブジェクトとその仮入力を引数に取り、これをトレースしながら実行し、トレース結果に基づいてTorchScriptコードを生成する。すなわち実行時トレースに基づいてPythonコードをTorchScriptコードへ変換する。
仮入力を用いたトレースに基づいて生成をおこなうため、利用できるTorchScript機能に制限がある(c.f. torch.jit.script
によるコンパイル)。例えば条件分岐は仮入力が満たす片方のパスしか記録されないため、TorchScriptの動的条件分岐として変換されない。すなわちTorchScriptの動的条件分岐は利用できない[77]。
FX
[編集]torch.fx はモデルの高レベルグラフ化・変換・コード生成に関するモジュールである[78][79]。モデルを入力/出力/演算の有向非巡回グラフと見なすIRを定義し[80]、モデル→IR→モデルの変換とIR編集をサポートする。主に次の3つの機能を提供する[81]。
- Model-to-IR: シンボリックトレースによるPython/PyTorchモデルからのIR生成
- IR-to-IR: IRで表現されたグラフの変換
- IR-to-Model: IRからのPython/PyTorchコード生成
FXはPythonをホスト言語とするIRグラフのメタプログラミングであり[82]、グラフの分析・可視化[83]、演算子の書き換えによる量子化[84]、グラフ全体を考慮したop fusion[85]、IRからのアクセラレータコード直接生成[86]など様々な用途に利用される。
モデルエクスポートのための幅広い演算サポートを目指すTorchScript IR[87]と異なり、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) は前向き関数と後向き関数をコンパイルするための実験的サブシステムである[88]。FX GraphをTorchScriptのコンパイラによってコンパイルするための functorch.compile.ts_compile も実験的に提供されている[89]。
以下は前向き (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を作るサブシステムであり[33]、FX Graphを各実行環境向けIRへと変換するための各バックエンド(TorchInductor、onnxrtバックエンドなど)と組み合わせてPythonコードのコンパイルを行うことができる[33]。バックエンドを実装しやすくするためのものとして、FX Graphの複合的なAten命令を単純なPrim命令へと置き換えるPrimTorchも存在する[33]。
以下は前向き (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へと対応しており[90][91]、場合によってはTorchDynamo+Inductorよりも高速であるとされる[91]。
事前コンパイルと量子化
[編集]この節の加筆が望まれています。 |
PyTorch 2.1以降には事前コンパイル (torch.export) が試験的に実装されている[16]。また量子化 (torch.ao.quantization[注釈 2]) も試験的にtorch.exportに対応している[16]。
量子化では訓練後量子化(Post Training Quantization; PTQ)と量子化意識訓練 (Quantization Aware Training; QAT) の両方に対応している[92]。
モバイル向け展開
[編集]この節の加筆が望まれています。 |
PyTorchモデルのモバイル向け展開にはPyTorch MobileとExecutorchが存在する[93][94]。
PyTorch MobileはTorchScriptを使った軽量インタプリタとなっている[93]が、最適化 (torch.utils.mobile_optimizer) [95]にも対応している[93]。
一方、Executorchはtorch.compileベースとなっている[94]。
またPyTorchのモデルから別の機械学習フレームワーク「TensorFlow」のモバイル向け実装「TFLite (TensorFlow Lite)」のモデルへと変換することも可能であり、これには前述のONNX出力でONNX形式を出力した後にそのファイルをONNX2TFでTFLiteモデルへと変換する方法[96]や、GoogleのAI Edge Torchを使う方法が存在する[96]。
モデル / ライブラリ
[編集]Transformer モデル
[編集]この節の加筆が望まれています。 |
性能の高い機械学習モデル「Transformer」が人気となるにつれ、PyTorchでも内部プロジェクト外部プロジェクト合わせ数多くの実装が登場した。その代表的なものには以下が存在する:
- torch.nn.Transformer[97] - PyTorch 1.2で実装された[98]。
- Transformers (Hugging Face) - 様々な応用モデルを実装している。PyTorch以外にも対応している。
- Fairseq (Meta AI) - Transformer派生を含む様々な応用モデルを実装している。またNVIDIAによりこのFairseqに基づくTransformerの実装が「Transformer for PyTorch」として提供されている[102]。
- xFormers (Meta AI) - 高速かつ省メモリな複数の実装を含んでいる(CUTLASSを使った実装やOpenAI Tritonを使った実装など)。前述のFairseqや後述のDiffusersでも使えるようになっている[103][104]。
拡散モデル
[編集]拡散モデル(確率拡散モデル; Diffusion model)は特に生成AI(ジェネレーティブAI)において人気となり、PyTorchでもその実装が登場した。その代表的なものには以下が存在する:
- Diffusers (Hugging Face) - 単純なU-Netベースの拡散モデルだけでなく、変分オートエンコーダー (VAE) による潜在空間を使った潜在拡散モデル (LDM) やその応用の Stable Diffusion (SD)、埋め込み表現にCLIPの代わりにXLM-RobertaベースのAltCLIPを使ってマルチリンガル化した AltDiffusion[105]、ベクトル量子化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) などに対応している[106]。
torchaudio
[編集]torchaudio は PyTorch 向けの音声処理向けのライブラリである。音声認識 (Emformer RNN-T / XLS-R / Conformer RNN-T[107])、視覚音声認識 (AV-ASR[107])、テキスト音声合成 (Tacotron2)、音声強調 (MVDR)、ビームフォーミング (DNNBeamformer[107])、音源分離 (Hybrid Demucs)、音声品質測定 (TorchAudio-Squim[107]) 、テキストへの強制位置合わせ (CTC forced alignment[107]) などに対応している。
その他、音声のベクトル化では wav2vec 2.0、HuBERT、WavLM に対応している[108]。GPUベースのCTCビームサーチ (CUCTCDecoder) にも対応している[107]。
torchtext
[編集]この節の加筆が望まれています。 |
torchtext は PyTorch 向けのテキスト処理ライブラリである。大規模言語モデル (LLM) の XLM-RoBERTa[109] や T5[110] に対応している。なお大規模言語モデルで文書分類、言語モデリング、質疑応答、機械翻訳などの多様なタスクを行うには、モデルをそれぞれへと適応するためのファインチューニングやプロンプティングが必要となる。
その他、テキストのトークン化では正規表現での置換によるトークン化 (RegexTokenizer)、文字バイト対符号化 (BPE) によるトークン化 (CharBPETokenizer)、バイトレベルBPEによるトークン化(CLIPで使われるCLIPTokenizerやGPT-2で使われるGPT2BPETokenizer)、WordPieceによるトークン化(BERTで使われるBERTTokenizer)、事前学習モデルによるトークン化(T5などに使われるSentencePieceTokenizer)に対応している[111][112]。また単語の埋め込みベクトルへの変換では GloVe、FastText、CharNGram に対応している[113]。
2023年9月、開発をメンテナンスモードに移行し[107]、2024年4月開発終了となった[114]。
TorchRL
[編集]TorchRL は PyTorch 向けの強化学習ライブラリである。暗黙的Q学習 (IQL)、深層Q学習 (DQN)、近傍方策最適化 (PPO)、深層決定論的方策勾配法 (DDPG)、双生遅延DDPG (TD3)、Advantage Actor-Critic (A2C)、Soft-Actor-Critic (SAC)、保守的Q学習 (CQL)[107]、ランダム化アンサンブル化ダブルQ学習 (REDQ)、Dreamer、Decision Transformer[107]、人間のフィードバックによる強化学習 (RLHF)に対応している[115]。
TensorDict
[編集]この節の加筆が望まれています。 |
TensorDict は PyTorch 向けの辞書構造ライブラリである。
TorchRec
[編集]この節の加筆が望まれています。 |
tensordict は PyTorch 向けのレコメンデーション(推薦)ライブラリである。
torchtune
[編集]この節の加筆が望まれています。 |
torchtuneは PyTorch 向けの大規模言語モデル (LLM) ファインチューニングライブラリである。
torchchat / gpt-fast
[編集]この節の加筆が望まれています。 |
torchchatはPyTorch向けのLLMを使ったチャット実装であり[116]、gpt-fastはPyTorchを使ったLLM実装である[117]。
PyTorch Hub
[編集]PyTorch Hub (torch.hub) は GitHub のリポジトリ上に存在するPyTorchの事前学習モデルを簡単に使用できるようにするための仕組みである[118]。リポジトリをこの PyTorch Hub で使えるようにするためにはリポジトリ上に「hubconf.py」を設置する必要がある[118]。
PyTorch Hub に対応しているリポジトリには例えば以下が存在する:
- torchvision ("pytorch/vision")[106]
- Fairseq ("pytorch/fairseq")[119]
- YOLOv5 ("ultralytics/yolov5")[120]
PyTorch Hubでリポジトリ上のモデルを読み込むコードの例:
import torch
yolov5s_model = torch.hub.load('ultralytics/yolov5', 'yolov5s')
なお外部プロジェクトには GitHub 及び PyTorch Hubを使わずに、GitHubに似た独自リポジトリシステムとその読み込みスクリプトを提供するものも存在する(Hugging Face の Hugging Face Hub[121][122]など)。
TorchMetrics
[編集]この節の加筆が望まれています。 |
Lightning AI製の評価指標(メトリクス)用ライブラリ。
学習
[編集]この節の加筆が望まれています。 |
データローダ
[編集]PyTorchに使うことのできるデータローダには以下が存在する:
- DataLoader (torch.utils.data.DataLoader) - PyTorch標準のデータローダ。
- DataLoader2 (torchdata.dataloader2.DataLoader2) - 別パッケージのTorchDataで開発されているDataPipesを基にした実験的なデータローダ[123]。
- FFCV (Fast Forward Computer Vision; ffcv.loader)
- NVIDIA DALI (Data Loading Library; nvidia.dali.plugin.pytorch) - GPUDirect Storageに対応したデータローダ[124]。PyTorch以外にも対応している[124]。実験的なGPUデータ解凍にも対応している (fn.experimental.inflate)。
またデータセットの自動ダウンロードに対応するデータローダとして HuggingFace Datasets Hub のデータセットが使用可能な HuggingFace 製の Datasets も存在する。
PyTorch Lightning
[編集]PyTorch Lightning は学習から展開までの簡易化のための 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では扱えない[125]。
脚注
[編集]出典
[編集]- ^ "PyTorch 2.5.0 Release, SDPA CuDNN backend, Flex Attention"; 閲覧日: 2024年10月17日; 出版日: 2024年10月17日.
- ^ “Natural Language Processing (NLP) with PyTorch — NLP with PyTorch documentation” (英語). dl4nlp.info. 2019年3月30日閲覧。
- ^ Yegulalp, Serdar (19 January 2017). “Facebook brings GPU-powered machine learning to Python”. InfoWorld 30 March 2019閲覧。
- ^ Lorica, Ben (3 August 2017). “Why AI and machine learning researchers are beginning to embrace PyTorch”. O'Reilly Media. 30 March 2019閲覧。
- ^ 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
- ^ Patel, Mo (2017年12月7日). “When two trends fuse: PyTorch and recommender systems” (英語). O'Reilly Media 2019年3月30日閲覧。
- ^ Mannes, John. “Facebook and Microsoft collaborate to simplify conversions from PyTorch to Caffe2” (英語). TechCrunch 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."
- ^ Arakelyan, Sophia (2017年11月29日). “Tech giants are using open source frameworks to dominate the AI community” (英語). VentureBeat. 2019年3月30日閲覧。
- ^ “Uber AI Labs Open Sources Pyro, a Deep Probabilistic Programming Language” (英語). Uber Engineering Blog. (2017年11月3日) 2017年12月18日閲覧。
- ^ PYTORCH-TRANSFORMERS: PyTorch implementations of popular NLP Transformers, PyTorch Hub, (2019-12-01) 2019年12月1日閲覧。
- ^ GitHub - catalyst-team/catalyst: Accelerated DL & RL, Catalyst-Team, (2019-12-05) 2019年12月5日閲覧。
- ^ “PyTorch” (英語). www.pytorch.org. 2019年12月5日閲覧。
- ^ a b “PyTorch – About”. pytorch.org. 2018年6月15日時点のオリジナルよりアーカイブ。2018年6月11日閲覧。
- ^ Synced (2018年4月2日). “Caffe2 Merges With PyTorch”. 2019年3月30日閲覧。
- ^ Chainer Team (2010年12月5日). “Chainer/CuPy v7のリリースと今後の開発体制について”. Chainer Blog. 2020年8月10日閲覧。
- ^ a b c d PyTorch 2.1: automatic dynamic shape compilation, distributed checkpointing
- ^ “An Introduction to PyTorch – A Simple yet Powerful Deep Learning Library”. analyticsvidhya.com (2018年2月22日). 2018年6月11日閲覧。
- ^ a b c d e torch.tensor PyTorch Foundation
- ^ Autograd PyTorch Foundation
- ^ Complex Numbers PyTorch Foundation
- ^ a b Quantization PyTorch Foundation
- ^ Using FP8 with Transformer Engine NVIDIA
- ^ NVIDIA Ampereにおけるプルーニング対応の特徴 Impress 2020年7月20日
- ^ Sparse Semi-Structured Tensors PyTorch Foundation
- ^ a b c d e Module PyTorch Foundation
- ^ “The C++ Frontend”. PyTorch Master Documentation. 2019年7月29日閲覧。
- ^ Tensor Basics PyTorch Foundation
- ^ Getting Started on Intel GPU PyTorch Foundation
- ^ PyTorch 2.5 Released With Improved Intel GPU Support Phoronix 2024年10月17日
- ^ Intel Gaudi PyTorch Python API (habana_frameworks.torch) — Gaudi Documentation 1.18.0 documentation Intel
- ^ a b Facilitating New Backend Integration by PrivateUse1 PyTorch Foundation
- ^ Challenges and Efforts in PyTorch Multi-Device Integration: Compatibility, Portability, and Integration Efficiencies PyTorch Foundation 2024年9月18日
- ^ a b c d PyTorch 2.0 PyTorch Foundation
- ^ Installation PyTorch Foundation
- ^ Torch-TensorRT で PyTorch の推論を最大 6 倍高速化 NVIDIA 2021年12月2日
- ^ DeepSpeed-MII: instant speedup on 24,000+ open-source DL models with up to 40x cheaper inference Microsoft 2022年10月10日
- ^ DeepSpeed Deep Dive — Model Implementations for Inference (MII) Towards Data Science 2022年11月17日
- ^ Reduce deep learning training time and cost with MosaicML Composer on AWS Amazon Web Services 2022年10月24日
- ^ Cloudflare R2 and MosaicML enable training LLMs on any compute, anywhere in the world, with zero switching costs Cloudflare 2023年5月16日
- ^ Train and deploy generative AI faster with MosaicML and Oracle オラクル 2023年5月16日
- ^ Getting Started with Distributed Data Parallel — PyTorch Tutorials 2.3.0+cu121 documentation PyTorch Foundation
- ^ Introducing PyTorch Fully Sharded Data Parallel (FSDP) API PyTorch Foundation 2022年3月14日
- ^ ZeRO Microsoft
- ^ Efficient Memory management - FairScale documentation Facebook Research
- ^ ZeRO++ Microsoft
- ^ ZeRO-Infinity and DeepSpeed: Unlocking unprecedented model scale for deep learning training Microsoft
- ^ ZeRO-Offload Microsoft
- ^ a b Pipeline Parallelism PyTorch Foundation
- ^ Pipeline Parallelism - FairScale documentation Facebook Research
- ^ PiPPy PyTorch Foundation
- ^ Pipeline Parallelism - DeepSpeed Microsoft
- ^ PETALS: Collaborative Inference and Fine-tuning of Large Models p.2 Alexander Borzunov et al. 2023年
- ^ FlexGen: High-Throughput Generative Inference of Large Language Models with a Single GPU p.6 Ying Sheng et al. 2023年
- ^ Tensor Parallelism - torch.distributed.tensor.parallel PyTorch Foundation
- ^ Model Parallelism — transformers 4.11.3 documentation Hugging Face
- ^ a b Mixture of Experts - DeepSpeed Microsoft
- ^ Handling big models for inference HuggingFace
- ^ How 🤗 Accelerate runs very large models thanks to PyTorch HuggingFace 2022年9月27日
- ^ ZeRO-Inference: Democratizing massive model inference Microsoft 2022年9月9日
- ^ Docs > CUDA semantics - CUDA streams PyTorch Foundation
- ^ a b Pickle Scanning HuggingFace
- ^ Python pickle serialization format: format specification Kaitai Project
- ^ torch.onnx PyTorch Foundation
- ^ "TorchScript is a way to create serializable and optimizable models from PyTorch code." PyTorch. TorchScript.
- ^ "TorchScript is a statically typed subset of Python" PyTorch. TorchScript Language Reference.
- ^ "TorchScript program that can be run independently from Python, such as in a standalone C++ program." PyTorch. TorchScript.
- ^ "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. - ^ Saving and Loading Models — PyTorch Tutorials 1.12.1+cu102 documentation PyTorch Foundation
- ^ torch.onnx — PyTorch 1.13 documentation PyTorch Foundation
- ^ My spring internship – torch-mlir eager mode, OPT and blowing away the main git repo nod.ai 2022年6月20日
- ^ "TorchScript is executed using an interpreter attached to a JIT-optimizer and compiler." PyTorch. JIT Technical Overview. 2022-03-19閲覧.
- ^ "The executor specializes the
Graph
for the particular set of inputs." PyTorch. JIT Technical Overview. 2022-03-19閲覧. - ^ "It propagates constants, pre-computing as much as possible" PyTorch. JIT Technical Overview. 2022-03-19閲覧.
- ^ "Eliminating dead code" PyTorch. JIT Technical Overview. 2022-03-19閲覧.
- ^ "Scripting a function or
nn.Module
will inspect the source code, compile it as TorchScript code using the TorchScript compiler, and return aScriptModule
orScriptFunction
." PyTorch. TORCH.JIT.SCRIPT. pytorch.org. 2023-08-29閲覧. - ^ "Using torch.jit.trace and torch.jit.trace_module, you can turn an existing module or Python function into a TorchScript
ScriptFunction
orScriptModule
. 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閲覧. - ^ "Tracing will not record any control-flow like if-statements or loops." Python. TORCH.JIT.TRACE. pytorch.org. 2023-08-29閲覧.
- ^ "FX is a toolkit for developers to use to transform
nn.Module
instances." PyTorch. TORCH.FX. 2022-03-23閲覧. - ^ "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.
- ^ "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.
- ^ "FX consists of three main components: a symbolic tracer, an intermediate representation, and Python code generation." PyTorch. TORCH.FX. 2022-03-23閲覧.
- ^ "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.
- ^ "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.
- ^ "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.
- ^ "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.
- ^ " 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.
- ^ "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.
- ^ functorch.compile (experimental) — functorch 1.13 documentation PyTorch Foundation
- ^ functorch.compile.ts_compile — functorch 1.13 documentation PyTorch Foundation
- ^ TorchDynamo(torch.compile) integration in PyTorch XLA PyTorch Foundation
- ^ a b The Path to Achieve Ultra-Low Inference Latency With LLaMA 65B on PyTorch/XLA PyTorch Foundation
- ^ Quantization PyTorch Foundation
- ^ a b c PyTorch Mobile PyTorch Foundation
- ^ a b ExecuTorch PyTorch Foundation
- ^ torch.utils.mobile_optimizer PyTorch Foundation
- ^ a b AI Edge Torch: High Performance Inference of PyTorch Models on Mobile Devices Google 2024年5月14日
- ^ torch.nn - Transformer Layers PyTorch Foundation
- ^ New Releases: PyTorch 1.2, torchtext 0.4, torchaudio 0.3, and torchvision 0.4 PyTorch Foundation 2019年8月8日
- ^ a b c PyTorch 2.0: Our next generation release that is faster, more Pythonic and Dynamic as ever PyTorch Foundation 2023年3月15日
- ^ A BetterTransformer for Fast Transformer Inference PyTorch Foundation 2022年7月12日
- ^ BetterTransformer - Overview Hugging Face
- ^ Transformer for PyTorch NVIDIA
- ^ Fairseq Meta AI
- ^ 動画も音楽もゲームも 広がるAIエンターテインメントの可能性 ITmedia 2022年11月11日
- ^ AltDiffusion Hugging Face
- ^ a b Models and pre-trained weights — Torchvision main documentation PyTorch Foundation
- ^ a b c d e f g h i New Library Updates in PyTorch 2.1 PyTorch Foundation 2023年10月4日
- ^ torchaudio.pipelines PyTorch Foundation
- ^ SST-2 Binary text classification with XLM-RoBERTa model PyTorch Foundation
- ^ T5-Base Model for Summarization, Sentiment Classification, and Translation PyTorch Foundation
- ^ torchtext.transforms PyTorch Foundation
- ^ Summary of the tokenizers Hugging Face
- ^ torchtext.vocab PyTorch Foundation
- ^ torchtext PyTorch Foundation
- ^ TorchRL PyTorch Foundation
- ^ Introducing torchchat: Accelerating Local LLM Inference on Laptop, Desktop and Mobile PyTorch Foundation 2024年7月30日
- ^ Accelerating Generative AI with PyTorch II: GPT, Fast PyTorch Foundation 2023年11月30日
- ^ a b torch.hub — PyTorch 1.13 documentation PyTorch Foundation
- ^ fairseq · PyPI Facebook
- ^ PyTorch Hub Ultralytics
- ^ Hugging Face Introduces Private Hub Weights & Biases 2022年8月3日
- ^ Integrate your library with the Hub Hugging Face
- ^ PyTorch 1.12: TorchArrow, Functional API for Modules and nvFuser, are now available PyTorch Foundation 2022年6月28日
- ^ a b NVIDIA DALI Documentation NVIDIA
- ^ "
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.