Transformers documentation
Eğitim için tensör paralelliği
Eğitim için tensör paralelliği
Tensor parallelism (TP), ağırlık matrislerini GPU'lar arasında sütun bazlı veya satır bazlı olarak böler. Her GPU bir parçayı (shard) barındırır, kısmi bir sonuç hesaplar ve tam çıktıyı üretmek için all-reduce ile senkronize olur.
TP, GPU'lar arası sık iletişime dayanır. NVLink gibi hızlı düğüm içi bağlantılara sahip donanımlarda en iyi şekilde çalışır.
┌─────────────────────────────┐
│ X (replicated) │
└────┬──────────┬─────────┬───┘
│ │ │
┌────▼───┐ ┌────▼───┐ ┌───▼────┐
│ ▓▓▓ W₀ │ │ ░░░ W₁ │ │ ███ W₂ │
│ X@W₀ │ │ X@W₁ │ │ X@W₂ │
└────┬───┘ └────┬───┘ └───┬────┘
└──────────┼─────────┘
Y₀+Y₁+Y₂
┌────────────────────────────┐
│ Y (full) │
└────────────────────────────┘Transformers, config'inde base_model_tp_plan tanımlayan mimariler için TP'yi destekler. Bir modelin yerel TP'yi destekleyip desteklemediğini görmek için önce bu alana bakın.
from transformers import AutoConfig
config = AutoConfig.from_pretrained("Qwen/Qwen3-0.6B")
print(config.base_model_tp_plan is not None)
print(config.base_model_tp_plan)Bir model TP'yi destekliyorsa, tp_size içindeki cihaz sayısı ile bir DistributedConfig oluşturun ve bunu from_pretrained() fonksiyonuna iletin. Transformers, modelin önceden tanımlanmış planını kullanır, cihaz ızgarasını (device mesh) başlatır ve desteklenen katmanları sizin için parçalar (shard).
Ayrıca DistributedConfig içinde tp_plan="auto" değerini ayarlayabilirsiniz. tp_size parametresi belirtilmediğinde, bu değer WORLD_SIZE değişkeninden çıkarılır. tp_plan parametresini doğrudan from_pretrained() fonksiyonuna geçirmek artık kullanımdan kaldırılmıştır ve v5.18 sürümünde kaldırılacaktır.
device_mapiledistributed_configbirlikte kullanmayın. Bu iki yapı, ağırlık yükleme düzeyinde çelişki yaratır.device_map, tüm modülleri belirli GPU'lara yerleştirirken, tensor paralelliği aynı parametreleri tüm GPU'lara dağıtır.
import torch
from transformers import AutoModelForCausalLM, DistributedConfig
distributed_config = DistributedConfig(tp_size=4)
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen3-0.6B",
dtype=torch.bfloat16,
distributed_config=distributed_config,
)Trainer, tensör paralel planını algılar, modelden tp_size değerini okur ve ParallelismConfig nesnesini otomatik olarak oluşturur.
Eğitimi 4 GPU'lu tek bir düğümde başlatın.
torchrun --nproc-per-node 4 train_tp.py
ParallelismConfig
TP'yi FSDP gibi diğer paralelleştirme teknikleriyle birleştirirken ParallelismConfig nesnesini açıkça iletin.
import torch
from accelerate import ParallelismConfig
from transformers import AutoModelForCausalLM, DistributedConfig, TrainingArguments
distributed_config = DistributedConfig(tp_size=4)
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen3-0.6B",
dtype=torch.bfloat16,
distributed_config=distributed_config,
)
parallelism_config = ParallelismConfig(tp_size=4)
args = TrainingArguments(
...,
parallelism_config=parallelism_config,
)PEFT adaptörleri
PEFT adaptörlerini, tensör paralel bir temel modele yükleyebilirsiniz (peft >= 0.21.1 gerektirir). PEFT, adaptör ağırlıklarının bölünmesini (sharding) yönetir. Adaptörlerin nasıl ekleneceği, yükleneceği ve eğitileceği ile dağıtık eğitim notları dahil olmak üzere ayrıntılar için PEFT bölümüne bakın.
Sonraki adımlar
- Nasıl çalıştığına dair daha fazla ayrıntı için The Ultra-Scale Playbook'taki Tensor Parallelism bölümünü okuyun.
- Bölme stratejileri, manuel TP planları ve uygulama detayları hakkında daha fazla bilgi edinmek için tensor paralellik çıkarım kılavuzunu okuyun.