Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
PyTorch
Bawa PyTorch model Anda sendiri ke SageMaker AI, dan jalankan pekerjaan pelatihan dengan Tra SageMaker ining Compiler.
PyTorch Model dengan Transformer Wajah Pelukan
PyTorch model dengan Hugging Face Transformers PyTorch atau HuggingFace ModelTrainer dengan konfigurasi Kompiler Pelatihan ketika Anda akan melanjutkan ke topik berikutnya diAktifkan Kom SageMaker piler Pelatihan. SageMaker
Tip
Saat Anda membuat tokenizer untuk model NLP menggunakan Transformers dalam skrip pelatihan Anda, pastikan Anda menggunakan bentuk tensor input statis dengan menentukan. padding='max_length' Jangan gunakan padding='longest' karena bantalan ke urutan terpanjang dalam batch dapat mengubah bentuk tensor untuk setiap batch pelatihan. Bentuk input dinamis dapat memicu kompilasi ulang model dan mungkin meningkatkan total waktu pelatihan. Untuk informasi selengkapnya tentang opsi padding dari tokenizer Transformers, lihat Padding dan truncation
Topik
Model Bahasa Besar Menggunakan Kelas Pel atih Hugging Face Transformers
Jika Anda menggunakan kelas Trainer library transformer, Anda tidak perlu membuat perubahan tambahan pada skrip pelatihan Anda. SageMaker Training Compiler secara otomatis mengkompilasi model Trainer Anda jika Anda mengaktifkannya melalui kelas. ModelTrainer Kode berikut menunjukkan bentuk dasar skrip PyTorch pelatihan dengan Hugging Face Trainer API.
from transformers import Trainer, TrainingArguments training_args=TrainingArguments(**kwargs) trainer=Trainer(args=training_args, **kwargs)
Topik
Untuk pelatihan GPU tunggal
Anda tidak perlu mengubah kode Anda saat menggunakan transformers.Trainer
Untuk pelatihan terdistribusi
PyTorch v1.11.0 dan yang lebih baru
Untuk menjalankan pelatihan terdistribusi dengan SageMaker Training Compiler, Anda harus menambahkan _mp_fn() fungsi berikut dalam skrip pelatihan Anda dan membungkus main() fungsi tersebut. Ini mengalihkan panggilan _mp_fn(index) fungsi dari runtime ter SageMaker distribusi AI untuk PyTorch (pytorchxla) ke main() fungsi skrip pelatihan Anda.
def _mp_fn(index): main()
Fungsi ini menerima index argumen untuk menunjukkan peringkat GPU saat ini di cluster untuk pelatihan terdistribusi. Untuk menemukan lebih banyak contoh skrip, lihat skri p contoh pemodelan bahasa
Untuk Transformers v4.17 dan sebelumnya dengan PyTorch v1.10.2 dan sebelumnya
SageMaker Training Compiler menggunakan mekanisme alternatif untuk meluncurkan pekerjaan pelatihan terdistribusi, dan Anda tidak perlu melakukan modifikasi apa pun dalam skrip pelatihan Anda. Sebagai gantinya, Tra SageMaker ining Compiler mengharuskan Anda untuk mener SageMaker uskan skrip peluncur pelatihan terdistribusi AI ke entry_point argumen dan meneruskan skrip pelatihan Anda ke hyperparameters argumen di SageMaker AI Hugging Face. ModelTrainer
Praktik Terbaik untuk Menggunakan Kompiler Pel SageMaker atihan dengan Pelatih
-
Pastikan Anda menggunakan pengoptimal SyncFree dengan menyetel
optimargumen keadamw_torch_xlasaat menyiapkan transformer. TrainingArgument. Lihat juga Peng optimal dalam dokumentasi Hugging Face Transformers. -
Pastikan throughput pipeline pemrosesan data lebih tinggi dari throughput pelatihan. Anda dapat mengubah
preprocessing_num_workersargumdataloader_num_workersen dan dari transformer. TrainingArgumentkelas untuk mencapai hal ini. Biasanya, ini harus lebih besar dari atau sama dengan jumlah GPU tetapi kurang dari jumlah CPU.
Setelah Anda selesai mengadaptasi skrip pelatihan Anda, lanjutkan keJalan PyTorch kan Pekerjaan Pelatihan dengan Tra SageMaker ining Compiler.
Model Bahasa Besar Menggunakan Lang PyTorch sung (tanpa API Hugging Face Transformers Trainer)
Jika Anda memiliki skrip pelatihan yang digunakan PyTorch secara langsung, Anda perlu membuat perubahan tambahan pada skrip PyTorch pelatihan Anda untuk diterapkan PyTorch/XLA. Ikuti instruksi untuk memodifikasi skrip Anda untuk mengatur PyTorch/XLA primatif dengan benar.
Topik
Untuk pelatihan GPU tunggal
-
Impor pustaka pengoptimalan.
import torch_xla import torch_xla.core.xla_model as xm -
Ubah perangkat target menjadi XLA alih-alih
torch.device("cuda")device=xm.xla_device() -
Jika Anda menggunakan Automatic PyTorch Mixed Precision
(AMP), lakukan hal berikut: -
Ganti
torch.cuda.ampdengan yang berikut:import torch_xla.amp -
Ganti
torch.optim.SGDdantorch.optim.Adamdengan yang berikut:import torch_xla.amp.syncfree.Adam as adam import torch_xla.amp.syncfree.SGD as SGD -
Ganti
torch.cuda.amp.GradScalerdengan yang berikut:import torch_xla.amp.GradScaler as grad_scaler
-
-
Jika Anda tidak menggunakan AMP, ganti
optimizer.step()dengan yang berikut ini:xm.optimizer_step(optimizer) -
Jika Anda menggunakan pemuat data terdistribusi, bungkus dataloader Anda di kelasnya: PyTorch/XLA
ParallelLoaderimport torch_xla.distributed.parallel_loader as pl parallel_loader=pl.ParallelLoader(dataloader, [device]).per_device_loader(device) -
Tambahkan
mark_stepdi akhir loop pelatihan saat Anda tidak menggunakanparallel_loader:xm.mark_step() -
Untuk memeriksa pelatihan Anda, gunakan metode PyTorch/XLA pos pemeriksaan model:
xm.save(model.state_dict(), path_to_save)
Setelah Anda selesai mengadaptasi skrip pelatihan Anda, lanjutkan keJalan PyTorch kan Pekerjaan Pelatihan dengan Tra SageMaker ining Compiler.
Untuk pelatihan terdistribusi
Selain perubahan yang tercantum di Untuk pelatihan GPU tunggal bagian sebelumnya, tambahkan perubahan berikut untuk mendistribusikan beban kerja dengan benar di seluruh GPU.
-
Jika Anda menggunakan AMP, tambahkan
all_reducesetelahscaler.scale(loss).backward():gradients=xm._fetch_gradients(optimizer) xm.all_reduce('sum', gradients, scale=1.0/xm.xrt_world_size()) -
Jika Anda perlu mengatur variabel untuk
local_ranksdanworld_size, gunakan kode serupa dengan yang berikut ini:local_rank=xm.get_local_ordinal() world_size=xm.xrt_world_size() -
Untuk setiap
world_size(num_gpus_per_node*num_nodes) yang lebih besar dari1, Anda harus menentukan sampler kereta yang akan terlihat mirip dengan berikut ini:import torch_xla.core.xla_model as xm if xm.xrt_world_size() > 1: train_sampler=torch.utils.data.distributed.DistributedSampler( train_dataset, num_replicas=xm.xrt_world_size(), rank=xm.get_ordinal(), shuffle=True ) train_loader=torch.utils.data.DataLoader( train_dataset, batch_size=args.batch_size, sampler=train_sampler, drop_last=args.drop_last, shuffle=False if train_sampler else True, num_workers=args.num_workers ) -
Buat perubahan berikut untuk memastikan Anda menggunakan yang
parallel_loaderdisediakan olehtorch_xla distributedmodul.import torch_xla.distributed.parallel_loader as pl train_device_loader=pl.MpDeviceLoader(train_loader, device)train_device_loaderFungsi seperti PyTorch loader biasa sebagai berikut:for step, (data, target) in enumerate(train_device_loader): optimizer.zero_grad() output=model(data) loss=torch.nn.NLLLoss(output, target) loss.backward()Dengan semua perubahan ini, Anda harus dapat meluncurkan pelatihan terdistribusi dengan PyTorch model apa pun tanpa Transformer Trainer API. Perhatikan bahwa instruksi ini dapat digunakan untuk multi-GPU single-node dan multi-node multi-GPU.
-
Untuk PyTorch v1.11.0 dan yang lebih baru
Untuk menjalankan pelatihan terdistribusi dengan SageMaker Training Compiler, Anda harus menambahkan
_mp_fn()fungsi berikut dalam skrip pelatihan Anda dan membungkusmain()fungsi tersebut. Ini mengalihkan panggilan_mp_fn(index)fungsi dari runtime ter SageMaker distribusi AI untuk PyTorch (pytorchxla) kemain()fungsi skrip pelatihan Anda.def _mp_fn(index): main()Fungsi ini menerima
indexargumen untuk menunjukkan peringkat GPU saat ini di cluster untuk pelatihan terdistribusi. Untuk menemukan lebih banyak contoh skrip, lihat skri p contoh pemodelan bahasaHugging Face Transformers. Untuk Transformers v4.17 dan sebelumnya dengan PyTorch v1.10.2 dan sebelumnya
SageMaker Training Compiler menggunakan mekanisme alternatif untuk meluncurkan pekerjaan pelatihan terdistribusi dan mengharuskan Anda untuk meneruskan skrip peluncur pelatihan terdistribusi SageMaker AI ke
entry_pointargumen dan meneruskan skrip pelatihan Anda kehyperparametersargumen di SageMaker AI Hugging Face. ModelTrainer
Setelah Anda selesai mengadaptasi skrip pelatihan Anda, lanjutkan keJalan PyTorch kan Pekerjaan Pelatihan dengan Tra SageMaker ining Compiler.
Praktik Terbaik untuk Menggunakan Kompiler Pel SageMaker atihan dengan PyTorch/XLA
Jika Anda ingin memanfaatkan Kompiler SageMaker Pelatihan pada skrip PyTorch pelatihan asli Anda, Anda mungkin ingin membiasakan diri terlebih dahulu PyTorch di perangkat XLA.
catatan
Bagian ini untuk praktik terbaik mengasumsikan bahwa Anda menggunakan PyTorch/XLA modul berikut:
import torch_xla.core.xla_model as xm import torch_xla.distributed.parallel_loader as pl
Pahami mode malas di PyTorch/XLA
Satu perbedaan signifikan antara PyTorch/XLA dan asli PyTorch adalah bahwa PyTorch/XLA sistem berjalan dalam mode malas sementara yang asli PyTorch berjalan dalam mode penasaran. Tensor dalam mode malas adalah placeholder untuk membangun grafik komputasi sampai terwujud setelah kompilasi dan evaluasi selesai. PyTorch/XLA Sistem membangun grafik komputasi dengan cepat ketika Anda memanggil PyTorch API untuk membangun komputasi menggunakan tensor dan operator. Grafik komputasi dikompilasi dan dieksekusi ketika xm.mark_step() dipanggil secara eksplisit atau implisit olehpl.MpDeviceLoader/pl.ParallelLoader, atau ketika Anda secara eksplisit meminta nilai tensor seperti dengan memanggil loss.item() atau. print(loss)
Minimalkan jumlah kompilasi-dan-eksekusi menggunakan pl. MpDeviceLoader/pl.ParallelLoaderdan xm.step_close
Untuk kinerja terbaik, Anda harus mengingat cara yang mungkin untuk memulai kompilasi-dan-eksekusi seperti yang dijelaskan di Pahami mode malas di PyTorch/XLA dan harus mencoba meminimalkan jumlah kompilasi-dan-eksekusi. Idealnya, hanya satu kompilasi-dan-eksekusi yang diperlukan per iterasi pelatihan dan dimulai secara otomatis oleh. pl.MpDeviceLoader/pl.ParallelLoader Di MpDeviceLoader optimalkan untuk XLA dan harus selalu digunakan jika memungkinkan untuk kinerja terbaik. Selama pelatihan, Anda mungkin ingin memeriksa beberapa hasil menengah seperti nilai kerugian. Dalam kasus seperti itu, pencetakan tensor malas harus dibungkus menggunakan xm.add_step_closure() untuk menghindari kompilasi dan eksekusi yang tidak perlu.
Gunakan pengoptimal AMP dan sinkronisasi
Pelatihan dalam mode Automatic Mixed Precision (AMP) secara signifikan mempercepat kecepatan latihan Anda dengan memanfaatkan inti Tensor GPU NVIDIA. SageMaker Training Compiler menyediakan syncfree pengoptimal yang dioptimalkan untuk XLA untuk meningkatkan kinerja AMP. Saat ini, tiga peng syncfree optimal berikut tersedia dan harus digunakan jika memungkinkan untuk kinerja terbaik.
torch_xla.amp.syncfree.SGD torch_xla.amp.syncfree.Adam torch_xla.amp.syncfree.AdamW
Pengoptimal syncfree ini harus dipasangkan dengan torch_xla.amp.GradScaler untuk gradien scaling/unscaling.
Tip
Mulai PyTorch 1.13.1, Tra SageMaker ining Compiler meningkatkan kinerja dengan PyTorch/XLA membiarkan pengoptimal secara otomatis mengganti (seperti SGD, Adam, AdamW) di dalam torch.optim atau transformers.optimization dengan versi sinkfree di (seperti,,). torch_xla.amp.syncfree torch_xla.amp.syncfree.SGD torch_xla.amp.syncfree.Adam torch_xla.amp.syncfree.AdamW Anda tidak perlu mengubah baris kode tempat Anda menentukan pengoptimal dalam skrip pelatihan Anda.