Jadikan model PyTorch secepat kilat.
Lightning.ai • Performa • Memulai • Instal • Contoh • Inside Thunder • Terlibat! • Dokumentasi
Thunder membuat model PyTorch secepat kilat.
Thunder adalah kompiler sumber-ke-sumber untuk PyTorch. Itu membuat program PyTorch lebih cepat dengan menggabungkan dan menggunakan pelaksana perangkat keras yang berbeda secara bersamaan (misalnya, nvFuser, torch.compile, cuDNN, dan TransformerEngine FP8).
Ini mendukung konfigurasi tunggal dan multi-GPU. Thunder bertujuan agar dapat digunakan, dimengerti, dan diperluas.
Catatan
Petir Guntur dalam versi alfa. Jangan ragu untuk terlibat, tetapi perkirakan akan ada beberapa kendala di sepanjang jalan.
Thunder dapat mencapai percepatan yang signifikan dibandingkan kode PyTorch standar yang tidak dikompilasi ("PyTorch bersemangat"), melalui efek gabungan dari pengoptimalan dan penggunaan eksekutor terbaik di kelasnya. Gambar di bawah menunjukkan throughput prapelatihan untuk Llama 2 7B yang diterapkan di LitGPT.
Seperti yang ditunjukkan dalam plot di atas, Thunder mencapai percepatan 40% dalam throughput pelatihan dibandingkan dengan kode bersemangat pada H100 menggunakan kombinasi eksekutor termasuk nvFuser, torch.compile, cuDNN, dan TransformerEngine FP8.
Thunder juga mendukung strategi terdistribusi seperti DDP dan FSDP untuk model pelatihan pada beberapa GPU. Plot berikut menampilkan throughput yang dinormalisasi yang diukur untuk Llama 2 7B tanpa presisi campuran FP8; dukungan untuk FSDP sedang berlangsung.
Cara termudah untuk memulai dengan Thunder, tidak memerlukan instalasi atau pengaturan tambahan, adalah dengan menggunakan Studio Tutorial Zero to Thunder kami.
Thunder sedang dalam tahap alfa dan perkembangan terbaru sedang terjadi di cabang main
. Anda dapat menginstal Thunder versi terbaru dari cabang main
sebagai berikut:
pip install git+https://github.com/Lightning-AI/lightning-thunder.git@main
Untuk mencapai performa terbaik, Anda dapat menginstal Thunder dengan dependensi tambahan berikut:
# install nvFuser built for the matching stable PyTorch
pip install --pre nvfuser-cu121-torch25
# install cudnn
pip install nvidia-cudnn-frontend
Jika Anda tertarik untuk mengutak-atik dan berkontribusi pada Thunder, kami sarankan untuk mengkloning repositori Thunder dan menginstalnya dalam mode pip yang dapat diedit:
git clone https://github.com/Lightning-AI/lightning-thunder.git
cd lightning-thunder
pip install -e .
Setelah mengkloning repositori Lightning-Thunder dan menginstalnya sebagai paket yang dapat diedit seperti dijelaskan di atas, Anda dapat mengatur lingkungan Anda untuk mengembangkan Thunder dengan menginstal persyaratan pengembangan:
pip install -r requirements/devel.txt
Sekarang Anda menjalankan tes:
pytest thunder/tests
Thunder telah diuji secara menyeluruh, jadi diperkirakan ini akan memakan waktu cukup lama.
Di bawah ini adalah contoh sederhana bagaimana Thunder memungkinkan Anda mengkompilasi dan menjalankan kode 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]])
Fungsi yang dikompilasi jfoo
mengambil dan mengembalikan tensor PyTorch, sama seperti fungsi aslinya, sehingga modul dan fungsi yang dikompilasi oleh Thunder dapat digunakan sebagai bagian dari program PyTorch yang lebih besar.
Thunder sedang dalam tahap awal dan belum boleh digunakan untuk menjalankan produksi.
Namun, ini sudah dapat memberikan kinerja luar biasa untuk pra-pelatihan dan penyempurnaan LLM yang didukung oleh LitGPT, seperti Mistral, Llama 2, Gemma, Falcon, dan lainnya.
Lihat integrasi LitGPT untuk mempelajari cara menjalankan LitGPT dan Thunder secara bersamaan.
Dengan adanya modul Python callable atau PyTorch, Thunder dapat menghasilkan program yang dioptimalkan yang:
Untuk melakukannya, Thunder dikirimkan dengan:
grad
, fusions, terdistribusi (seperti ddp
, fsdp
), fungsional (seperti vmap
, vjp
, jvp
)Thunder seluruhnya ditulis dengan Python. Bahkan jejaknya direpresentasikan sebagai Python yang valid di semua tahap transformasi. Hal ini memungkinkan tingkat introspeksi dan perluasan yang belum pernah terjadi sebelumnya.
Thunder tidak menghasilkan kode untuk akselerator, seperti GPU, secara langsung. Ia memperoleh dan mengubah program pengguna sehingga memungkinkan untuk memilih atau menghasilkan kode perangkat secara optimal menggunakan pelaksana cepat seperti:
Modul dan fungsi yang dikompilasi dengan Thunder sepenuhnya beroperasi dengan vanilla PyTorch dan mendukung autograd PyTorch. Selain itu, Thunder bekerja bersama torch.compile untuk memanfaatkan optimalisasi canggihnya.
Dokumentasi online tersedia. Untuk membuat dokumentasi secara lokal, Anda dapat menggunakan
make docs
dan arahkan browser Anda ke dokumen yang dihasilkan di docs/build/index.html
.
Kami menghargai masukan dan kontribusi Anda. Jika Anda memiliki permintaan fitur, pertanyaan, atau ingin menyumbangkan kode atau file konfigurasi, jangan ragu untuk menggunakan pelacak Masalah GitHub.
Kami menyambut semua kontributor individu, terlepas dari tingkat pengalaman atau perangkat keras mereka. Kontribusi Anda sangat berharga, dan kami sangat senang melihat apa yang dapat Anda capai dalam lingkungan yang kolaboratif dan mendukung ini.
Lightning Thunder dirilis di bawah lisensi Apache 2.0. Lihat file LISENSI untuk detailnya.