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, dan jalankan pekerjaan pelatihan dengan SageMaker Training Compiler.
PyTorch Model dengan Trafo Hugging Face
PyTorch model dengan Hugging FacePyTorch
atau HuggingFace
estimator dengan konfigurasi SageMaker Training Compiler saat Anda akan melanjutkan ke topik berikutnya di. Aktifkan Kompiler SageMaker Pelatihan
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 padding ke urutan terpanjang dalam batch dapat mengubah bentuk tensor untuk setiap batch pelatihan. Bentuk input dinamis dapat memicu kompilasi ulang model dan dapat meningkatkan total waktu pelatihan. Untuk informasi selengkapnya tentang opsi padding tokenizer Transformers, lihat Padding dan pemotongan dalam dokumentasi Hugging Face Transformers.
Topik
Model Bahasa Besar Menggunakan Kelas Hugging Face Transformers Trainer
Jika Anda menggunakan kelas Trainer perpustakaan transformer, Anda tidak perlu membuat perubahan tambahan apa pun pada skrip pelatihan Anda. SageMaker Training Compiler secara otomatis mengompilasi model Trainer Anda jika Anda mengaktifkannya melalui class estimator. 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()
fungsinya. Ini mengalihkan panggilan _mp_fn(index)
fungsi dari runtime SageMaker terdistribusi 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 skrip contoh pemodelan bahasa Hugging Face Transformers
Untuk Transformers v4.17 dan sebelumnya dengan v1.10.2 dan sebelumnya PyTorch
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, SageMaker Training Compiler mengharuskan Anda untuk meneruskan skrip peluncur pelatihan SageMaker terdistribusi ke entry_point
argumen dan meneruskan skrip pelatihan Anda ke hyperparameters
argumen di estimator Hugging SageMaker Face.
Praktik Terbaik untuk Menggunakan Kompiler SageMaker Pelatihan dengan Trainer
-
Pastikan Anda menggunakan SyncFree pengoptimal dengan menyetel
optim
argumenadamw_torch_xla
saat menyiapkan transformer. TrainingArgument. Lihat juga Optimizer dalam dokumentasi Hugging Face Transformers. -
Pastikan bahwa throughput pipa pemrosesan data lebih tinggi daripada throughput pelatihan. Anda dapat men-tweak
dataloader_num_workers
danpreprocessing_num_workers
argumen dari transformator. 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 keJalankan Pekerjaan PyTorch Pelatihan dengan Kompiler SageMaker Pelatihan.
Model Bahasa Besar Menggunakan PyTorch Langsung (tanpa API Pelatih Trainer Hugging Face Transformers)
Jika Anda memiliki skrip pelatihan yang menggunakan PyTorch secara langsung, Anda perlu membuat perubahan tambahan pada skrip PyTorch pelatihan Anda untuk mengimplementasikan PyTorch /XLA. Ikuti petunjuk untuk memodifikasi skrip Anda untuk mengatur primatif PyTorch /XLA 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 PyTorch Automatic Mixed Precision
(AMP), lakukan hal berikut: -
Ganti
torch.cuda.amp
dengan yang berikut ini:import torch_xla.amp
-
Ganti
torch.optim.SGD
dantorch.optim.Adam
dengan yang berikut ini:import torch_xla.amp.syncfree.Adam as adam import torch_xla.amp.syncfree.SGD as SGD
-
Ganti
torch.cuda.amp.GradScaler
dengan yang berikut ini:import torch_xla.amp.GradScaler as grad_scaler
-
-
Jika Anda tidak menggunakan AMP, ganti
optimizer.step()
dengan yang berikut:xm.optimizer_step(optimizer)
-
Jika Anda menggunakan dataloader terdistribusi, bungkus dataloader Anda di kelas /XLA: PyTorch
ParallelLoader
import torch_xla.distributed.parallel_loader as pl parallel_loader=pl.ParallelLoader(dataloader, [device]).per_device_loader(device)
-
Tambahkan
mark_step
di akhir loop pelatihan saat Anda tidak menggunakanparallel_loader
:xm.mark_step()
-
Untuk memeriksa pelatihan Anda, gunakan metode pos pemeriksaan PyTorch model/XLA:
xm.save(model.state_dict(), path_to_save)
Setelah Anda selesai mengadaptasi skrip pelatihan Anda, lanjutkan keJalankan Pekerjaan PyTorch Pelatihan dengan Kompiler SageMaker Pelatihan.
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_reduce
setelahscaler.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_ranks
danworld_size
, gunakan kode yang mirip 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_loader
disediakan olehtorch_xla distributed
modul.import torch_xla.distributed.parallel_loader as pl train_device_loader=pl.MpDeviceLoader(train_loader, device)
train_device_loader
Fungsi-fungsi 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 simpul tunggal 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()
fungsinya. Ini mengalihkan panggilan_mp_fn(index)
fungsi dari runtime SageMaker terdistribusi untuk PyTorch (pytorchxla
) kemain()
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 skrip contoh pemodelan bahasa Hugging Face Transformers. Untuk Transformers v4.17 dan sebelumnya dengan v1.10.2 dan sebelumnya PyTorch
SageMaker Training Compiler menggunakan mekanisme alternatif untuk meluncurkan pekerjaan pelatihan terdistribusi dan mengharuskan Anda untuk meneruskan skrip peluncur pelatihan SageMaker terdistribusi ke
entry_point
argumen dan meneruskan skrip pelatihan Anda kehyperparameters
argumen di estimator Hugging SageMaker Face.
Setelah Anda selesai mengadaptasi skrip pelatihan Anda, lanjutkan keJalankan Pekerjaan PyTorch Pelatihan dengan Kompiler SageMaker Pelatihan.
Praktik Terbaik untuk Menggunakan Kompiler SageMaker Pelatihan dengan/XLA PyTorch
Jika Anda ingin memanfaatkan SageMaker Training Compiler pada skrip PyTorch pelatihan asli Anda, Anda mungkin ingin terlebih dahulu mengenal PyTorch perangkat XLA
catatan
Bagian ini untuk praktik terbaik mengasumsikan bahwa Anda menggunakan modul PyTorch /XLA berikut:
import torch_xla.core.xla_model as xm import torch_xla.distributed.parallel_loader as pl
Memahami mode malas PyTorch di/XLA
Satu perbedaan signifikan antara PyTorch /XLA dan native PyTorch adalah bahwa sistem PyTorch /XLA berjalan dalam mode malas sementara native PyTorch berjalan dalam mode eager. Tensor dalam mode malas adalah placeholder untuk membangun grafik komputasi hingga terwujud setelah kompilasi dan evaluasi selesai. Sistem PyTorch /XLA membuat grafik komputasi dengan cepat saat 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 atau. loss.item()
print(loss)
Minimalkan jumlah compilation-and-executionspenggunaan pl.MpDeviceLoader/pl.ParallelLoader
dan xm.step_closure
Untuk kinerja terbaik, Anda harus mengingat cara-cara yang mungkin untuk memulai compilation-and-executionsseperti yang dijelaskan dalam Memahami mode malas PyTorch di/XLA dan harus mencoba meminimalkan jumlah compilation-and-executions. Idealnya, hanya satu compilation-and-execution yang diperlukan per iterasi pelatihan dan dimulai secara otomatis oleh. pl.MpDeviceLoader/pl.ParallelLoader
MpDeviceLoader
Ini dioptimalkan 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 yang tidak perlu. compilation-and-executions
Gunakan AMP dan syncfree
pengoptimal
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 syncfree
pengoptimal 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
syncfree
Pengoptimal ini harus dipasangkan dengan torch_xla.amp.GradScaler
untuk penskalaan/unscaling gradien.
Tip
Mulai PyTorch 1.13.1, SageMaker Training Compiler meningkatkan kinerja dengan membiarkan PyTorch /XLA mengganti pengoptimal secara otomatis (seperti SGD, Adam, AdamW) di dalam torch.optim
atau transformers.optimization
dengan versi syncfree dari mereka 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.