PyTorch モデルを超高速で作成します。
Lightning.ai • パフォーマンス • 始めましょう • インストール • 例 • Thunder の内部 • 参加してください! • ドキュメント
Thunder は PyTorch モデルを超高速にします。
Thunder は、PyTorch のソース間コンパイラーです。さまざまなハードウェア エグゼキューター (nvFuser、torch.compile、cuDNN、TransformerEngine FP8 など) を一度に組み合わせて使用することで、PyTorch プログラムを高速化します。
シングル GPU 構成とマルチ GPU 構成の両方をサポートします。 Thunder は、使いやすく、理解しやすく、拡張可能であることを目指しています。
注記
ライトニングサンダーはアルファ版です。気軽に参加していただけますが、途中でいくつかの困難が生じることが予想されます。
Thunder は、最適化とクラス最高のエグゼキュータの使用の複合効果により、コンパイルされていない標準の PyTorch コード (「PyTorch 熱心」) よりも大幅な高速化を実現できます。以下の図は、LitGPT で実装された Llama 2 7B の事前トレーニング スループットを示しています。
上のプロットに示されているように、Thunder は、nvFuser、torch.compile、cuDNN、TransformerEngine FP8 などのエグゼキューターの組み合わせを使用して、H100 の Eager コードと比較してトレーニング スループットで 40% の高速化を達成しています。
Thunder は、複数の GPU でモデルをトレーニングするための DDP や FSDP などの分散戦略もサポートしています。次のプロットは、FP8 混合精度を使用しない Llama 2 7B で測定された正規化されたスループットを示しています。 FSDP のサポートは進行中です。
追加のインストールやセットアップを必要とせず、Thunder を使い始める最も簡単な方法は、Zero to Thunder チュートリアル スタジオを使用することです。
Thunder はアルファ版であり、最新の開発はmain
ブランチで行われています。次のようにして、 main
ブランチから Thunder の最新バージョンをインストールできます。
pip install git+https://github.com/Lightning-AI/lightning-thunder.git@main
最高のパフォーマンスを実現するには、次の追加の依存関係を指定して Thunder をインストールします。
# install nvFuser built for the matching stable PyTorch
pip install --pre nvfuser-cu121-torch25
# install cudnn
pip install nvidia-cudnn-frontend
Thunder をいじったり、Thunder に貢献したりすることに興味がある場合は、Thunder リポジトリのクローンを作成し、pip の編集可能モードでインストールすることをお勧めします。
git clone https://github.com/Lightning-AI/lightning-thunder.git
cd lightning-thunder
pip install -e .
上記で説明したように、lightning-thunder リポジトリを複製し、編集可能なパッケージとしてインストールした後、開発要件をインストールすることで、Thunder を開発するための環境をセットアップできます。
pip install -r requirements/devel.txt
ここでテストを実行します。
pytest thunder/tests
Thunder は非常に徹底的にテストされているため、しばらく時間がかかることが予想されます。
以下は、Thunder で PyTorch コードをコンパイルして実行できる方法の簡単な例です。
import torch
import thunder
def foo ( a , b ):
return a + b
jfoo = thunder . jit ( foo )
a = torch . full (( 2 , 2 ), 1 )
b = torch . full (( 2 , 2 ), 3 )
result = jfoo ( a , b )
print ( result )
# prints
# tensor(
# [[4, 4]
# [4, 4]])
コンパイルされた関数jfoo
、元の関数と同じように PyTorch テンソルを取得して返します。そのため、Thunder によってコンパイルされたモジュールと関数は、より大きな PyTorch プログラムの一部として使用できます。
Thunder は初期段階にあるため、まだ本番稼働には使用しないでください。
ただし、Mistral、Llama 2、Gemma、Falcon など、LitGPT でサポートされる LLM の事前トレーニングおよび微調整では、すでに優れたパフォーマンスを提供できます。
LitGPT と Thunder を一緒に実行する方法については、LitGPT の統合を確認してください。
Python 呼び出し可能モジュールまたは PyTorch モジュールを指定すると、Thunder は次のような最適化されたプログラムを生成できます。
そのために、Thunder には以下が同梱されています。
grad
、 fusions 、分散型 ( ddp
、 fsdp
など)、関数型 ( vmap
、 vjp
、 jvp
など))Thunder はすべて Python で書かれています。そのトレースも、変換のすべての段階で有効な Python として表現されます。これにより、前例のないレベルの内省と拡張性が可能になります。
Thunder は、GPU などのアクセラレータ用のコードを直接生成しません。ユーザー プログラムを取得して変換するため、次のような高速エグゼキューターを使用してデバイス コードを最適に選択または生成できます。
Thunder でコンパイルされたモジュールと関数は、標準の PyTorch と完全に相互運用でき、PyTorch の autograd をサポートします。また、Thunder は torch.compile と連携して、最先端の最適化を活用します。
オンラインドキュメントが利用可能です。ローカルでドキュメントを構築するには、次を使用できます
make docs
そして、ブラウザでdocs/build/index.html
にある生成されたドキュメントを参照します。
フィードバックやご貢献に感謝いたします。機能のリクエストや質問がある場合、またはコードや構成ファイルの提供を希望する場合は、遠慮なく GitHub Issue Tracker を使用してください。
経験やハードウェアのレベルに関係なく、個人の寄稿者を歓迎します。皆さんの貢献は貴重であり、この協力的で協力的な環境で皆さんが何を達成できるか楽しみにしています。
Lightning Thunder は、Apache 2.0 ライセンスに基づいてリリースされています。詳細については、LICENSE ファイルを参照してください。