QuickStart | Instalasi | Panduan Pengguna | Contoh | Konvergensi FP8 | Integrasi | Catatan Rilis

Transformer Engine (TE) adalah perpustakaan untuk mempercepat model transformator pada NVIDIA GPU, termasuk menggunakan presisi 8-bit floating point (FP8) pada Hopper GPU, untuk memberikan kinerja yang lebih baik dengan pemanfaatan memori yang lebih rendah baik dalam pelatihan dan inferensi. TE menyediakan koleksi blok bangunan yang sangat dioptimalkan untuk arsitektur transformator populer dan API seperti presisi campuran otomatis yang dapat digunakan dengan mulus dengan kode khusus kerangka kerja Anda. TE juga mencakup kerangka kerja API Agnostik C ++ yang dapat diintegrasikan dengan perpustakaan pembelajaran mendalam lainnya untuk memungkinkan dukungan FP8 untuk Transformers.
Karena jumlah parameter dalam model transformator terus tumbuh, pelatihan dan inferensi untuk arsitektur seperti Bert, GPT dan T5 menjadi sangat memori dan komputasi intensif. Kebanyakan kerangka kerja belajar yang mendalam berlatih dengan FP32 secara default. Namun, ini tidak penting untuk mencapai akurasi penuh bagi banyak model pembelajaran yang mendalam. Menggunakan pelatihan presisi campuran, yang menggabungkan format presisi tunggal (FP32) dengan format presisi yang lebih rendah (misalnya FP16) ketika melatih model, menghasilkan speedup yang signifikan dengan perbedaan minimal dalam akurasi dibandingkan dengan pelatihan FP32. Dengan Hopper GPU Arsitektur FP8 Precision diperkenalkan, yang menawarkan peningkatan kinerja dibandingkan FP16 tanpa degradasi dalam akurasi. Meskipun semua kerangka kerja pembelajaran mendalam utama mendukung FP16, dukungan FP8 tidak tersedia secara asli dalam kerangka kerja saat ini.
TE membahas masalah dukungan FP8 dengan menyediakan API yang berintegrasi dengan perpustakaan model bahasa besar (LLM) yang populer. Ini menyediakan API Python yang terdiri dari modul untuk dengan mudah membangun lapisan transformator serta perpustakaan kerangka kerja-agnostik di C ++ termasuk struct dan kernel yang diperlukan untuk dukungan FP8. Modul yang disediakan oleh TE secara internal mempertahankan faktor penskalaan dan nilai -nilai lain yang diperlukan untuk pelatihan FP8, sangat menyederhanakan pelatihan presisi campuran untuk pengguna.
import torch
import transformer_engine . pytorch as te
from transformer_engine . common import recipe
# Set dimensions.
in_features = 768
out_features = 3072
hidden_size = 2048
# Initialize model and inputs.
model = te . Linear ( in_features , out_features , bias = True )
inp = torch . randn ( hidden_size , in_features , device = "cuda" )
# Create an FP8 recipe. Note: All input args are optional.
fp8_recipe = recipe . DelayedScaling ( margin = 0 , fp8_format = recipe . Format . E4M3 )
# Enable autocasting for the forward pass
with te . fp8_autocast ( enabled = True , fp8_recipe = fp8_recipe ):
out = model ( inp )
loss = out . sum ()
loss . backward () import flax
import jax
import jax . numpy as jnp
import transformer_engine . jax as te
import transformer_engine . jax . flax as te_flax
from transformer_engine . common import recipe
BATCH = 32
SEQLEN = 128
HIDDEN = 1024
# Initialize RNG and inputs.
rng = jax . random . PRNGKey ( 0 )
init_rng , data_rng = jax . random . split ( rng )
inp = jax . random . normal ( data_rng , [ BATCH , SEQLEN , HIDDEN ], jnp . float32 )
# Create an FP8 recipe. Note: All input args are optional.
fp8_recipe = recipe . DelayedScaling ( margin = 0 , fp8_format = recipe . Format . HYBRID )
# Enable autocasting for the forward pass
with te . fp8_autocast ( enabled = True , fp8_recipe = fp8_recipe ):
model = te_flax . DenseGeneral ( features = HIDDEN )
def loss_fn ( params , other_vars , inp ):
out = model . apply ({ 'params' : params , ** other_vars }, inp )
return jnp . mean ( out )
# Initialize models.
variables = model . init ( init_rng , inp )
other_variables , params = flax . core . pop ( variables , 'params' )
# Construct the forward and backward function
fwd_bwd_fn = jax . value_and_grad ( loss_fn , argnums = ( 0 , 1 ))
for _ in range ( 10 ):
loss , ( param_grads , other_grads ) = fwd_bwd_fn ( params , other_variables , inp )Cara tercepat untuk memulai dengan mesin transformator adalah dengan menggunakan gambar Docker pada katalog NVIDIA GPU Cloud (NGC). Misalnya menggunakan wadah NGC Pytorch secara interaktif,
docker run --gpus all -it --rm nvcr.io/nvidia/pytorch:23.10-py3Di mana 23.10 adalah versi kontainer. Misalnya, 23.10 untuk rilis Oktober 2023.
Untuk menginstal versi stabil terbaru dari mesin transformator,
pip install git+https://github.com/NVIDIA/TransformerEngine.git@stableIni akan secara otomatis mendeteksi jika ada kerangka pembelajaran mendalam yang didukung dipasang dan membangun dukungan mesin transformator untuk mereka. Untuk secara eksplisit menentukan kerangka kerja, atur variabel lingkungan nvte_framework ke daftar yang dipisahkan koma (misalnya nvte_framework = jax, pytorch, padang).
Atau, paket ini dapat langsung diinstal dari PYPI mesin transformator, misalnya
pip install transformer_engine[pytorch]Untuk mendapatkan binding Python yang diperlukan untuk mesin transformator, kerangka kerja yang dibutuhkan harus secara eksplisit ditentukan sebagai dependensi tambahan dalam daftar yang dipisahkan koma (misalnya [Jax, Pytorch, Paddle]). Mesin Transformer mengirimkan roda untuk perpustakaan inti serta ekstensi Paddlepaddle. Distribusi sumber dikirim untuk ekstensi JAX dan Pytorch.
Lihat Panduan Instalasi.
Transformer Engine Release v0.11.0 Menambahkan dukungan untuk flashattention-2 di pytorch untuk peningkatan kinerja.
Ini adalah masalah yang diketahui bahwa kompilasi flashattention-2 adalah sumber daya yang intensif dan membutuhkan sejumlah besar RAM (lihat bug), yang dapat menyebabkan kesalahan memori selama pemasangan mesin transformator. Silakan coba pengaturan max_jobs = 1 di lingkungan untuk menghindari masalah ini.
Perhatikan bahwa wadah NGC Pytorch 23.08+ termasuk flashattention-2.
Dalam upaya untuk menyatukan definisi dan penggunaan topeng perhatian di ketiga kerangka kerja dalam mesin transformator, topeng padding telah berubah dari inklusi makna sebenarnya dari posisi yang sesuai dengan perhatian pada pengecualian posisi itu dalam implementasi Pytorch kami. Sejak v1.7, semua tipe topeng perhatian mengikuti definisi yang sama di mana benar berarti menutupi posisi yang sesuai dan cara palsu termasuk posisi dalam perhitungan perhatian.
Contoh perubahan ini adalah,
# for a batch of 3 sequences where `a`s, `b`s and `c`s are the useful tokens
# and `0`s are the padding tokens,
[a, a, a, 0, 0,
b, b, 0, 0, 0,
c, c, c, c, 0]
# the padding mask for this batch before v1.7 is,
[ True, True, True, False, False,
True, True, False, False, False,
True, True, True, True, False]
# and for v1.7 onwards it should be,
[False, False, False, True, True,
False, False, True, True, True,
False, False, False, False, True]FP8 telah diuji secara luas di berbagai arsitektur dan konfigurasi model dan kami tidak menemukan perbedaan yang signifikan antara kurva kehilangan pelatihan FP8 dan BF16. FP8 juga telah divalidasi untuk akurasi pada tugas LLM hilir (misalnya Lambada dan Wikuxt). Di bawah ini adalah contoh model yang diuji untuk konvergensi di berbagai kerangka kerja.
| Model | Kerangka | Sumber |
|---|---|---|
| T5-770m | JAX/T5X | https://github.com/nvidia/jax-toolbox/tree/main/rosetta/rosetta/projects/t5x#convergence-and-performance |
| MPT-1.3B | Komposer mosaik | https://www.mosaicml.com/blog/coreweave-nvidia-h100-part-1 |
| GPT-5B | JAX/PAXML | https://github.com/nvidia/jax-toolbox/tree/main/rosetta/rosetta/projects/pax#h100-results |
| GPT-5B | Kerangka kerja Nemo | Tersedia berdasarkan permintaan |
| Llama2-7b | Alibaba Pai | https://mp.weixin.qq.com/s/nqt0ukxlbxyh5031zbdebq |
| T5-11B | JAX/T5X | Tersedia berdasarkan permintaan |
| MPT-13B | Komposer mosaik | https://www.databricks.com/blog/turbocharged-training-optimizing-databricks-mosaic-ai-stack-f8 |
| GPT-22B | Kerangka kerja Nemo | Tersedia berdasarkan permintaan |
| Llama2-70b | Alibaba Pai | https://mp.weixin.qq.com/s/nqt0ukxlbxyh5031zbdebq |
| GPT-175B | JAX/PAXML | https://github.com/nvidia/jax-toolbox/tree/main/rosetta/rosetta/projects/pax#h100-results |
Mesin transformator telah diintegrasikan dengan kerangka kerja LLM populer seperti:
Kami menyambut kontribusi untuk mesin transformator! Untuk berkontribusi pada mesin transformator dan membuat permintaan tarik, ikuti pedoman yang diuraikan dalam Panduan Kontribusi.RST.