TRL documentation
Eğitimi Dağıtma
Eğitimi Dağıtma
TRL ile Çoklu GPU Eğitimi
TRL'deki eğitimciler, PyTorch'un dağıtık başlatıcısı olan torchrun ile başlatılır. Her GPU için bir süreç başlatır:
torchrun --nproc_per_node 8 train.py <SCRIPT_ARGS>
trl CLI, arka planda aynı işi yapar; bu nedenle trl sft ... komutu, makinedeki tüm GPU'larda çalışır. Daha az GPU kullanmak için --nproc_per_node parametresini iletin.
Arka planda, 🤗 Accelerate her GPU için bir model oluşturur. Her süreç:
- Kendi veri grubunu işler
- O partinin kaybını ve gradyanlarını hesaplar
- Tüm GPU'lar arasında gradyan güncellemelerini paylaşır

Etkili batch boyutu şu şekilde hesaplanır:
Birden fazla GPU'ya ölçeklendirirken tutarlı bir parti boyutu korumak için per_device_train_batch_size ve gradient_accumulation_steps değerlerini buna göre güncelendiğinizden emin olun.
Örnek olarak, bu yapılandırmalar eşdeğerdir ve aynı sonuçları üretmelidir:
| GPU sayısı | Cihaz başına parti boyutu | Gradient birikimi adımları | Yorumlar |
|---|---|---|---|
| 1 | 32 | 1 | Olası yüksek bellek kullanımı, ancak daha hızlı eğitim |
| 1 | 4 | 8 | Düşük bellek kullanımı, yavaş eğitim |
| 8 | 4 | 1 | Her iki dünyanın da en iyisini almak için Çoklu GPU |
Her GPU için tek bir model kullanmak, büyük modeller veya düşük bellekli GPU'lar için uygulanabilir olmayan yüksek bellek kullanımına yol açabilir. Bu tür durumlarda, model parçalama, Zero Redundancy Optimizer, karma hassasiyetli eğitim ve CPU veya NVMe'ye aktarma gibi optimizasyonlar sunan DeepSpeed'i kullanabilirsiniz. Daha fazla ayrıntı için DeepSpeed Integration kılavuzumuza göz atın.
Çok uzun diziler üzerinde eğitim için kendi rehberi vardır: 1M Token Ötesinde Eğitim.
Çok Düğümlü Eğitim
Tek bir makinede yeterli GPU yoksa, torchrun eğitim sürecini birden fazla makineye (düğüm) ölçeklendirebilir. Her düğüm, toplam düğüm sayısı, kendi sıralaması ve ana düğümdeki buluşma noktası (rendezvous endpoint) ile aynı komutu çalıştırır.
Seçenek 1: Manuel Başlatma (HPC Dışı)
Aşağıdakileri her düğümde manuel olarak çalıştırın:
# Node 0 (main node, IP 10.0.0.1)
torchrun --nnodes 2 --nproc_per_node 8 --node_rank 0 --rdzv_backend c10d --rdzv_endpoint 10.0.0.1:29500 train.py
# Node 1
torchrun --nnodes 2 --nproc_per_node 8 --node_rank 1 --rdzv_backend c10d --rdzv_endpoint 10.0.0.1:29500 train.py
10.0.0.1değerini, rank 0 (ana) düğümünün gerçek IP adresiyle değiştirin.
Seçenek 2: SLURM Başlatma (HPC Kümeleleri)
SLURM iş zamanlayıcısı kullanan kümeler için bir iş betiği (ör. slurm_job.sh) oluşturun:
#!/bin/bash
#SBATCH --nodes=2
#SBATCH --gpus-per-node=8
#SBATCH --job-name=trl_multi
MAIN_NODE=$(scontrol show hostnames $SLURM_JOB_NODELIST | head -n 1)
srun torchrun --nnodes 2 --nproc_per_node 8 --node_rank $SLURM_NODEID --rdzv_backend c10d --rdzv_endpoint $MAIN_NODE:29500 train.pySonra işi gönderin:
sbatch slurm_job.sh
srun her düğümde bir torchrun başlatır ve bunların her biri GPU başına bir süreç başlatır.
Önemli SLURM yönergeleri:
--nodes=2: 2 hesaplama düğümü iste--gpus-per-node=8: Düğüm başına 8 GPU ayır (toplam 16)--job-name: İş kuyruğunda izleme için etiket
Eğitim yapılandırmasında deepspeed değerini ayarlayarak çoklu düğüm (multi-node) yapılandırmasını DeepSpeed ile birleştirebilirsiniz. DeepSpeed entegrasyon kılavuzu'na bakın.
Daha Fazla Okuma
- torchrun (Elastik Başlatma)
- SLURM Workload Manager Belgeleme - Küme işi zamanlaması için