Transformers documentation
NVIDIA GPU
NVIDIA GPU
NVIDIA GPU'lar, PyTorch'u cuda cihaz dizgesiyle CUDA üzerinden çalıştırır. Transformers'taki çoğu dikkat çekirdeği ve sunum optimizasyonu CUDA'yı destekler; FlashAttention-3 ve FlashAttention-4 gibi bazıları ise yalnızca CUDA üzerinde çalışır.
Kurulum
GPU'nuz için CUDA sürücülerini yükleyin, ardından PyTorch ve Transformers'ı yükleyin. NVIDIA Spark (ARM64) cihazları için, NVIDIA'nın paket dizininden PyTorch gerektiren kurulum kılavuzuna bakın.
pip install "transformers[torch]"PyTorch'un GPU'ları görebildiğinden emin olun.
import torch
print(torch.cuda.is_available(), torch.cuda.device_count())True ve GPU sayısını, örneğin True 4 olarak, yazdırır.
GPU'ları seçin ve sıralayın
GPU'ları seçmek ve sıralamalarını belirlemek için CUDA_VISIBLE_DEVICES ortam değişkenini kullanın. Unutulan bir dışa aktarılmış değişken, sonraki bir çalıştırmayı sessizce yanlış GPU'lara yönlendirebileceğinden, bu değişkeni çalıştırma komutuyla aynı komut satırında ayarlayın.
Örneğin, dört GPU'dan 0 ve 2 numaralı GPU'ları seçmek için:
CUDA_VISIBLE_DEVICES=0,2 torchrun trainer-program.py ...PyTorch yalnızca 0 ve 2 numaralı GPU'ları görür ve bunlar sırasıyla cuda:0 ve cuda:1 olarak eşlenir. Sıralamayı tersine çevirmek için (2 numaralı GPU'yu cuda:0 ve 0 numaralı GPU'yu cuda:1 olarak kullanmak için):
CUDA_VISIBLE_DEVICES=2,0 torchrun trainer-program.py ...Hiç GPU kullanmadan çalıştırmak için:
CUDA_VISIBLE_DEVICES= python trainer-program.py ...CUDA, varsayılan olarak GPU'ları en hızlıdan en yavaşa doğru numaralandırır; bu durum nvidia-smi ile eşleşmeyebilir. CUDA_VISIBLE_DEVICES içindeki indekslerin nvidia-smi ile eşleşmesi için CUDA_DEVICE_ORDER=PCI_BUS_ID değerini ayarlayın.
CUDA_DEVICE_ORDER=PCI_BUS_ID CUDA_VISIBLE_DEVICES=0,2 torchrun trainer-program.py ...Bir dikkat arka ucunu seçin
Modeli yüklerken attn_implementation ile dikkat (attention) arka ucunu (backend) ayarlayabilirsiniz; bu ayar hem çıkarım (inference) hem de eğitim için geçerlidir. Modeller varsayılan olarak SDPA kullanır. NVIDIA GPU'lar ayrıca üç FlashAttention sürümünü de destekler. FlashAttention paketi yüklü değilse, Transformers bunun yerine Hub'dan önceden derlenmiş bir çekirdek (kernel) yükler; bunun için kernels ek paketi gereklidir (pip install "transformers[kernels]").
attn_implementation | GPU'lar | Paket yüklü değilken Hub çekirdeği |
|---|---|---|
"flash_attention_2" | Ampere veya daha yeni | kernels-community/flash-attn2 |
"flash_attention_3" | Ampere veya daha yeni | kernels-community/vllm-flash-attn3 |
"flash_attention_4" | Hopper veya daha yeni | kernels-community/flash-attn4 |
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen3-0.6B",
dtype="bfloat16",
device_map="cuda",
attn_implementation="flash_attention_2",
)Çıkarım çalıştır
device_map="auto" parametresini from_pretrained() fonksiyonuna ileterek tek bir GPU’ya sığmayan bir modeli kullanılabilir GPU’lar arasında dağıtın veya device_map="cuda" ile tek bir GPU’da yükleyin. device parametresi iletilmediğinde pipeline() bir GPU’yu otomatik olarak seçer.
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen3-0.6B", dtype="bfloat16", device_map="cuda")
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen3-0.6B")
inputs = tokenizer("NVIDIA GPUs are", return_tensors="pt").to(model.device)
output = model.generate(**inputs, max_new_tokens=50, do_sample=False)
print(tokenizer.decode(output[0], skip_special_tokens=True))Continuous batching, NVIDIA GPU'lerde CUDA grafiklerini ve asenkron toplu işlemleri destekler ve bunların kullanılıp kullanılmayacağını otomatik olarak belirler.
Hub çekirdeklerini kullanın
from_pretrained() içinde use_kernels=True değerini ayarlayarak desteklenen katmanları Hub'daki optimize edilmiş çekirdeklerle değiştirin. NVIDIA GPU'lar, aktivasyonlar, RMSNorm, döner gömme (rotary embeddings), MegaBlocks mixture-of-experts katmanları ve Mamba state-space işlemleri dahil olmak üzere en geniş kapsama alanına sahiptir. Bunları kullanmak için kernels ekini yükleyin.
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen3-0.6B", dtype="bfloat16", device_map="cuda", use_kernels=True
)Hub çekirdekleri eğitim için de geçerlidir. model.train() veya model.eval() çağrıldığında, ilgili moda ait çekirdekler devreye alınır. Çekirdeği kendiniz seçmek için bir KernelConfig iletin ve NVIDIA'ya özgü eşlemeler için cihaz anahtarı olarak "cuda" kullanın. Tam eşleme için Çekirdekleri yükleme bölümüne bakın.
Modelleri kuantize et
Quantization, daha büyük bir modelin GPU belleğine sığmasını sağlar. Transformers'taki çoğu quantization yöntemi CUDA'yı destekler. Yöntemleri karşılaştırmak için quantization genel bakış tablosundaki CUDA sütununa bakın.
GPU belleğine sığmayan bir modeli ince ayar yapmak için, modeli bitsandbytes ile 4-bit olarak yükleyin ve PEFT ile LoRA adaptörlerini eğitin.
Trainer ile Eğitim
TrainingArguments, NVIDIA GPU’leri algılar ve cihazı cuda olarak ayarlar; bu sayede Trainer, herhangi bir cihaz ayarı gerektirmeden bu GPU’larda eğitim yapar. Ampere veya daha yeni GPU’larda bf16 karma hassasiyet, daha eski GPU’larda ise fp16 kullanın.
from transformers import TrainingArguments
training_args = TrainingArguments(
output_dir="./outputs",
bf16=True,
)
print(training_args.device)Trainer tek bir GPU üzerinde eğitim yapacaksa cuda:0 yazdırılır.
Dağıtık eğitim
Çoklu GPU eğitimi, NCCL kolektif arka ucunu kullanır. Her GPU için bir süreç başlatmak için torchrun veya accelerate launch kullanın.
torchrun --nproc_per_node=4 train.py
Bir paralelleştirme stratejisi seçmek için DDP, FSDP2, DeepSpeed ZeRO ve Tensor parallelism seçeneklerine göz atın.
Sonraki adımlar
- PyTorch'un cihazları, akışları ve belleği nasıl yönettiğini öğrenmek için PyTorch CUDA anlamları notlarını okuyun.
- Eğitim sırasında GPU belleğinin nereye harcandığını anlamak için GPU bellek kullanımı bölümünü okuyun.
attn_implementation'in bir dikkat fonksiyonunu nasıl seçtiğini öğrenmek için Dikkat arka uçları bölümünü okuyun.