View a markdown version of this page

Pelatihan FP16 dengan Model Paralelisme - Amazon SageMaker AI

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Pelatihan FP16 dengan Model Paralelisme

Untuk pelatihan FP16, terapkan modifikasi berikut ke skrip pelatihan Anda dan ModelTrainer.

catatan

Fitur ini tersedia untuk pustaka PyTorch paralelisme SageMaker model v1.10.0 dan yang lebih baru.

Sesuaikan skrip PyTorch pelatihan Anda

  1. Bungkus model Anda menggunakan pengelola konteks smdistributed.modelparallel.torch.model_creation ().

    # fp16_training_script.py import torch import smdistributed.modelparallel.torch as smp with smp.model_creation( dtype=torch.float16 if args.fp16 else torch.get_default_dtype() ): model = ...
    Tip

    Jika Anda menggunakan paralelisme tensor, tambahkan tensor_parallelism=smp.tp_size() > 1 ke pengelola konteks. smp.model_creation Menambahkan baris ini juga membantu mendeteksi secara otomatis apakah paralelisme tensor diaktifkan atau tidak.

    with smp.model_creation( ... , tensor_parallelism=smp.tp_size() > 1 ): model = ...
  2. Saat Anda membungkus pengoptimal dengansmdistributed.modelparallel.torch.DistributedOptimizer, atur dynamic_loss_scaling argumen static_loss_scaling atau. Secara default, static_loss_scaling diatur ke 1.0, dan dynamic_loss_scaling diatur ke False. Jika Anda mengaturdynamic_loss_scale=True, Anda dapat memberi makan opsi penskalaan kerugian dinamis sebagai kamus melalui dynamic_loss_args argumen. Dalam kebanyakan kasus, kami sarankan Anda menggunakan penskalaan kerugian dinamis dengan opsi default. Untuk informasi selengkapnya, opsi, dan contoh fungsi pembungkus pengoptimal, lihat smdistributed.modelparallel.torch. DistributedOptimizer API.

    Kode berikut adalah contoh pembungkus objek pengoptimal Adadelta dengan penskalaan kerugian dinamis untuk pelatihan FP16.

    optimizer = torch.optim.Adadelta(...) optimizer = smp.DistributedOptimizer( optimizer, static_loss_scale=None, dynamic_loss_scale=True, dynamic_loss_args={ "scale_window": 1000, "min_scale": 1, "delayed_shift": 2 } )

Konfigurasikan a SageMaker PyTorch ModelTrainer

Tambahkan parameter FP16 ("fp16") ke konfigurasi distribusi untuk paralelisme model saat membuat objek. SageMaker PyTorch ModelTrainer Untuk daftar lengkap parameter konfigurasi untuk paralelisme model, lihat Parameter untuk. smdistributed

from sagemaker.train import ModelTrainer from sagemaker.train.configs import SourceCode smp_options = { "enabled": True, "parameters": { "microbatches": 4, "pipeline_parallel_degree": 2, "tensor_parallel_degree": 2, ..., "fp16": True } } fp16_model_trainer = ModelTrainer( source_code=SourceCode(entry_script="fp16_training_script.py"), ..., distribution={ "smdistributed": {"modelparallel": smp_options}, "mpi": {...} } ) fp16_model_trainer.train(...)

Ketika pelatihan FP16 dimulai, model dan pengoptimal dibungkus oleh FP16_Module dan FP16_Optimizer masing-masing, yang merupakan smdistributed versi modifikasi dari utils Apex. FP16_Modulemengubah model menjadi FP16 dtype dan menangani pass maju di FP16.

Tip

Anda dapat menerapkan kliping gradien dengan memanggil clip_master_grads sebelumnyaoptimizer.step.

optimizer.clip_master_grads(max_norm) # max_norm(float or int): max norm of the gradients
Tip

Saat menggunakan torch.optim.lr_scheduler dan pelatihan FP16, Anda harus lulus optimizer.optimizer ke penjadwal LR daripada pengoptimal. Lihat contoh kode berikut.

from torch.optim.lr_scheduler import StepLR scheduler = StepLR( optimizer.optimizer if smp.state.cfg.fp16 else optimizer, step_size=1, gamma=args.gamma )