TRL documentation

Eğitimi Dağıtma

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v1.17.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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

multi gpu

Etkili batch boyutu şu şekilde hesaplanır: Batch Size=per_device_train_batch_size×num_devices×gradient_accumulation_steps \text{Batch Size} = \text{per\_device\_train\_batch\_size} \times \text{num\_devices} \times \text{gradient\_accumulation\_steps}

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 boyutuGradient birikimi adımlarıYorumlar
1321Olası yüksek bellek kullanımı, ancak daha hızlı eğitim
148Düşük bellek kullanımı, yavaş eğitim
841Her 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.1 değ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.py

Sonra 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

Update on GitHub