Transformers documentation

Eğitim için tensör paralelliği

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

and get access to the augmented documentation experience

to get started

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_map ile distributed_config birlikte 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

Update on GitHub