Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Pelatihan presisi campuran
P SageMaker ustaka model paralelisme (SMP) v2 mendukung pelatihan presisi campuran di luar kotak dengan mengintegrasikan dengan kerangka kerja sumber terbuka seperti PyTorch FSDP dan Transformer Engine. Untuk mempelajari lebih lanjut, lihat topik berikut.
Topik
Pelatihan presisi campuran dengan FP8 pada instans P5 menggunakan Transformer Engine
Mulai dari pustaka SageMaker model paralelisme (SMP) v2.2.0, pustaka SMP terintegrasi dengan Transformer Engine MixedPrecision
catatan
SMP v2 menawarkan dukungan FP8 untuk model Hugging Face Transformer berikut:
-
GPT-NeoX (tersedia di SMP v2.2.0 dan yang lebih baru)
-
Llama 2 (tersedia di SMP v2.2.0 dan yang lebih baru)
-
Mixtral 8x7b dan Mixtral 8x22b (tersedia di SMP v2.5.0 dan yang lebih baru)
catatan
Pelatihan FP8 tentang fitur P5 ini tersedia dalam kombinasi perpustakaan SageMaker dan perpustakaan berikut: PyTorch
-
SageMaker Python SDK v2.212.0 dan yang lebih baru
-
PyTorch v2.2.0 dan yang lebih baru
FP8 (presisi titik mengambang 8-bit) adalah tipe data yang telah muncul sebagai paradigma lain untuk mempercepat pelatihan pembelajaran mendalam model LLM. Dengan rilis GPU NVIDIA H100 yang mendukung tipe data FP8, Anda dapat memanfaatkan keuntungan dari peningkatan kinerja pada instans P5 yang dilengkapi dengan GPU H100, sambil mempercepat pelatihan terdistribusi dengan pelatihan presisi campuran FP8.
Tipe data FP8 selanjutnya bercabang ke format E4M3 dan E5M2. E4M3 menawarkan presisi yang lebih baik, memiliki rentang dinamis terbatas, dan sangat ideal untuk umpan maju dalam pelatihan model. E5M2 memiliki rentang dinamis yang lebih luas, tetapi presisi berkurang, dan lebih cocok untuk lintasan mundur, di mana presisi kurang kritis dan rentang dinamis yang lebih luas menjadi bermanfaat. Oleh karena itu, kami menyarankan Anda menggunakan resep strategi FP8 hibrida
Untuk tipe data setengah presisi (FP16 dan BF16), teknik penskalaan kerugian global seperti penskalaan kerugian statis atau penskalaan kerugian dinamis menangani masalah konvergensi yang timbul dari kehilangan informasi karena gradien pembulatan dalam presisi setengah. Namun, rentang dinamis FP8 bahkan lebih sempit, dan teknik penskalaan kerugian global tidak cukup. Pada titik ini, kita membutuhkan teknik penskalaan per-tensor berbutir halus. Penskalaan tertunda adalah strategi yang memilih faktor penskalaan berdasarkan nilai absolut maksimum yang diamati dalam sejumlah tensor dari iterasi sebelumnya. Ada pertukaran dalam strategi ini; ia menggunakan manfaat kinerja penuh dari komputasi FP8 tetapi membutuhkan memori untuk menjaga riwayat nilai maksimum tensor. Untuk mempelajari lebih lanjut tentang strategi penskalaan yang tertunda secara umum, lihat makalah Format FP8 untuk Pembelajaran
Dalam praktiknya, menggunakan FP8 sangat membantu dalam semua skenario pelatihan pada instans P5. Kami sangat menyarankan untuk mengaktifkan FP8 bila memungkinkan untuk meningkatkan kinerja pelatihan.
SMP v2 mendukung Transformer Engine di luar kotak. Oleh karena itu, saat menjalankan pelatihan FP8 dengan SMP v2 pada instance P5 SageMaker AI (ml.p5.48xlarge), satu-satunya hal yang perlu Anda lakukan adalah mengimpor torch.sagemaker skrip pelatihan Anda dan terus menggunakan paket Python Transformer Engine asli. Untuk mempelajari lebih lanjut tentang menggunakan Transformer Engine untuk pelatihan FP8 secara umum, lihat Menggunakan FP8 dengan Transformer Engine
import torch.sagemaker as tsm import transformer_engine.pytorch as te from transformer_engine.common.recipe import DelayedScaling, Format # Initialize the SMP torch.sagemaker API. tsm.init() # Define a transformer model and wrap it with the torch.sagemaker.transform API. from transformers import AutoModelForCausalLM model = AutoModelForCausalLM.from_config(ModelConfig) model = tsm.transform(model) # Enable E4M3 during forward pass, E5M2 during backward pass. fp8_format = Format.HYBRID # Create an FP8 recipe. fp8_recipe = DelayedScaling(fp8_format=fp8_format, amax_history_len=32, amax_compute_algo="max") # Enable FP8 autocasting. with te.fp8_autocast(enabled=True, fp8_recipe=fp8_recipe, fp8_group=tsm.state.world_process_group): out = model(inp) loss = out.sum() loss.backward()
Untuk menemukan contoh praktis pelatihan FP8 dengan SMP v2 pada instans P5, lihat contoh notebook di Ac celerate SageMaker PyTorch FSDP Training of Llama-v2 (or GPT-NeoX) with FP8 on P5 instance.
Pelatihan presisi campuran dengan tipe data setengah presisi menggunakan FSDP PyTorch
SMP v2 mendukung PyTorch FSDP MixedPrecision
catatan
Pelatihan presisi campuran dengan fitur PyTorch FSDP ini tersedia dalam kombinasi perpustakaan SageMaker dan perpustakaan berikut. PyTorch
-
SMP v2.0.0 dan yang lebih baru
-
SageMaker Python SDK v2.200.0 dan yang lebih baru
-
PyTorch v2.0.1 dan yang lebih baru
Cara standar untuk mengonfigurasi model untuk presisi campuran adalah dengan membuat model difloat32, dan kemudian mengizinkan FSDP untuk mentransmisikan parameter ke float16 atau bfloat16 dengan cepat dengan meneruskan MixedPrecision kebijakan, seperti yang ditunjukkan dalam cuplikan kode berikut. Untuk informasi selengkapnya tentang opsi untuk mengubah parameter dtype for, pengurangan, atau buffer untuk presisi campuran di PyTorch, lihat PyTorch FSDP MixedPrecision API
# Native PyTorch API from torch.distributed.fsdp import MixedPrecision dtype = torch.bfloat16 mixed_precision_policy = MixedPrecision( param_dtype=dtype, reduce_dtype=dtype, buffer_dtype=dtype ) model = FSDP( model, ..., mixed_precision=mixed_precision_policy )
Perhatikan bahwa model tertentu (seperti model Hugging Face Transformers Llama) mengharapkan buffer seperti. float32 Untuk menggunakanfloat32, ganti torch.bfloat16 dengan torch.float32 di baris yang mendefinisikan dtype objek.