Transformers documentation
CPU
CPU
CPUs, hızlandırıcı olmadan cpu cihaz dizgesiyle Transformers modellerini çalıştırır. GPU'lar kullanılamadığında veya maliyet etkin bir kurulum istendiğinde hem çıkarım hem de eğitim için işe yararlar.
Çıkarım çalıştır
device_map parametresini iletmediğinizde modeller varsayılan olarak CPU’da yüklenir ve hızlandırıcı bulunmadığında pipeline() CPU’yu kullanır. Hem hızlandırıcı hem de CPU bulunan bir makinede CPU’yu kullanmak için device_map="cpu" veya device="cpu" parametresini iletin.
from transformers import pipeline
generator = pipeline("text-generation", model="Qwen/Qwen3-0.6B", device="cpu")
print(generator("CPUs are", max_new_tokens=50, do_sample=False)[0]["generated_text"])Trainer ile Eğitim
bf16 desteğine sahip CPU'lar, örneğin son nesil Intel ve AMD işlemciler, PyTorch AMP ile bf16 karma hassasiyetli eğitim kullanabilir; bu yöntem bellek kullanımını azaltır ve eğitimi hızlandırır.
Aşağıdaki örnekler, tek bir CPU'dan, tek bir CPU'nun yetersiz kaldığı durumlarda birden fazla makineye kadar üç farklı kurulumu kapsamaktadır:
- tek bir CPU
- tek bir makinede birden çok süreç (CPU soketi başına bir tane)
- birden fazla makinede birden çok süreç
Tek düğüm ve çoklu düğüm örnekleri, Intel oneAPI HPC Toolkit bileşeni olan Intel MPI'den mpirun ile süreçleri başlatır ve Trainer, gloo arka ucu üzerinden DDP çalıştırır.
TrainingArguments içinde bf16=True ve use_cpu=True değerlerini ayarlayın veya bir eğitim betiğine --bf16 ve --use_cpu parametrelerini iletin. CPU üzerinde fp16 yerine bf16 tercih edin çünkü sayısal olarak daha kararlıdır.
from transformers import TrainingArguments
training_args = TrainingArguments(
output_dir="./outputs",
bf16=True,
use_cpu=True,
)Çift soketli bir CPU'da, her soket için bir süreç çalıştırın. Bellek erişimlerini her sokete yerel tutmak, verimliliği artırır. Aşağıdaki örnek, tek bir makinede her soket için bir süreç olacak şekilde iki süreç başlatır; burada train.py, Trainer eğitim script'inizdir.
OMP_NUM_THREADSdeğerini, bir soket üzerindeki fiziksel çekirdek sayısından, işletim sistemi için ayrılan bir çekirdek çıkarılarak elde edilen sayıya ayarlayın. Örneğin, 24 çekirdekli bir soketteOMP_NUM_THREADS=23olarak ayarlayın.
export MASTER_ADDR=127.0.0.1
mpirun -n 2 -genv OMP_NUM_THREADS=23 \
python3 train.py \
--output_dir ./outputs \
--use_cpu \
--bf16Eğitimi, her düğümün IP adresini listeleyen bir hostfile kullanarak iki makinede (node0 ve node1) dört sürece ölçekleyin. -n 4 bayrağı toplam süreç sayısını belirler. -ppn 2 düğüm başına iki süreç (her soket için bir tane) ayarlar.
Bu betiği, ana süreç olarak görev yapan node0 düğümünden çalıştırın.
OMP_NUM_THREADSdeğerini, bir soket üzerindeki fiziksel çekirdek sayısından, işletim sistemi için ayrılan bir çekirdek çıkarılarak elde edilen sayıya ayarlayın. Örneğin, 24 çekirdekli bir soketteOMP_NUM_THREADS=23olarak ayarlayın.
Her düğümün IP adresini içeren bir hostfile oluşturun.
cat hostfile
xxx.xxx.xxx.xxx #node0 ip
xxx.xxx.xxx.xxx #node1 ipArdından eğitim betiğini çalıştırın.
export MASTER_ADDR=xxx.xxx.xxx.xxx #node0 ip
mpirun -f hostfile -n 4 -ppn 2 \
-genv OMP_NUM_THREADS=23 \
python3 train.py \
--output_dir ./outputs \
--use_cpu \
--bf16CPU performansını ayarlayın
CPU eğitimindeki yükü azaltmak için daha hızlı bir bellek ayıracı ve Intel’in OpenMP çalışma zamanını önceden yükleyin. google-perftools (libtcmalloc için) ve intel-openmp Python paketini (libiomp5 için) kurun, ardından eğitim başlatmadan önce her iki kütüphaneyi de LD_PRELOAD ortam değişkenine ekleyin.
OMP_NUM_THREADS değerini, her bir sürecin kullanabileceği çekirdek sayısına ayarlayın. CPU sınırları olan bir konteynerde veya küme işinde bu, tahsis edilen CPU birimlerinin sayısıdır; bu nedenle sistem süreçleri için bazı çekirdekleri tahsis etmemiş bırakın.
Sonraki adımlar
- Modern Intel donanımlarında BF16 performansına daha derinlemesine bakmak için Intel Sapphire Rapids ile PyTorch Transformers'ı Hızlandırma blog yazısını okuyun.
- Çoklu işlem örneklerinin kullandığı dağıtık strateji hakkında daha fazla bilgi için DDP bölümünü okuyun.
OMP_NUM_THREADS'in performansı nasıl etkilediğini öğrenmek için PyTorch CPU threading notlarını okuyun.- Kubernetes üzerinde dağıtık CPU eğitimi çalıştırmak için Kubeflow PyTorchJob kılavuzunu okuyun.