Transformers documentation
CPU
CPU
CPU menjalankan model Transformers dengan string perangkat cpu, tanpa akselerator. CPU berfungsi untuk inferensi dan pelatihan saat GPU tidak tersedia, atau ketika Anda menginginkan setup yang hemat biaya.
Jalankan inferensi
Model dimuat di CPU secara default saat Anda tidak meneruskan device_map, dan pipeline() menggunakan CPU saat tidak ada akselerator yang tersedia. Teruskan device_map="cpu" atau device="cpu" untuk menggunakan CPU pada mesin yang juga memiliki akselerator.
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"])Latih dengan Trainer
CPU dengan dukungan bf16, seperti prosesor Intel dan AMD terbaru, dapat menggunakan pelatihan presisi campuran bf16 dengan AMP PyTorch, yang mengurangi penggunaan memori dan mempercepat pelatihan.
Contoh di bawah ini mencakup tiga konfigurasi, dari satu CPU hingga beberapa mesin ketika satu CPU terlalu lambat:
- satu CPU
- beberapa proses pada satu mesin (satu per soket CPU)
- beberapa proses di beberapa mesin
Contoh single-node dan multi-node meluncurkan proses dengan mpirun dari Intel MPI, bagian dari Intel oneAPI HPC Toolkit, dan Trainer menjalankan DDP di atas backend gloo.
Set bf16=True dan use_cpu=True di TrainingArguments, atau lewati --bf16 dan --use_cpu ke skrip pelatihan. Utamakan bf16 daripada fp16 di CPU karena lebih stabil secara numerik.
from transformers import TrainingArguments
training_args = TrainingArguments(
output_dir="./outputs",
bf16=True,
use_cpu=True,
)Pada CPU dual-socket, jalankan satu proses per socket. Menjaga akses memori tetap lokal di setiap socket meningkatkan throughput. Contoh di bawah ini meluncurkan dua proses pada satu mesin dengan satu proses per socket, di mana train.py adalah skrip pelatihan Trainer Anda.
Set
OMP_NUM_THREADSke jumlah core fisik pada satu socket, dikurangi satu core yang dicadangkan untuk OS. Misalnya, pada socket 24-core, setOMP_NUM_THREADS=23.
export MASTER_ADDR=127.0.0.1
mpirun -n 2 -genv OMP_NUM_THREADS=23 \
python3 train.py \
--output_dir ./outputs \
--use_cpu \
--bf16Skalakan pelatihan ke empat proses di dua mesin (node0 dan node1) menggunakan hostfile yang mencantumkan alamat IP setiap node. Flag -n 4 mengatur jumlah total proses. -ppn 2 mengatur dua proses per node (satu per soket).
Jalankan skrip ini dari node0, yang bertindak sebagai proses utama.
Set
OMP_NUM_THREADSke jumlah core fisik pada satu socket, dikurangi satu core yang dicadangkan untuk OS. Misalnya, pada socket 24-core, setOMP_NUM_THREADS=23.
Buat hostfile dengan alamat IP dari setiap node.
cat hostfile
xxx.xxx.xxx.xxx #node0 ip
xxx.xxx.xxx.xxx #node1 ipLalu jalankan skrip pelatihan.
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 \
--bf16Sesuaikan kinerja CPU
Pramuatkan alokator memori yang lebih cepat dan runtime OpenMP dari Intel untuk mengurangi overhead dalam pelatihan CPU. Instal google-perftools (untuk libtcmalloc) dan paket Python intel-openmp (untuk libiomp5), lalu tambahkan kedua pustaka tersebut ke variabel lingkungan LD_PRELOAD sebelum Anda memulai pelatihan.
Set OMP_NUM_THREADS ke jumlah core yang dapat digunakan oleh setiap proses. Dalam container atau pekerjaan cluster dengan batas CPU, itu adalah jumlah unit CPU yang dialokasikan, jadi sisakan beberapa core yang tidak dialokasikan untuk proses sistem.
Langkah selanjutnya
- Baca artikel blog Accelerating PyTorch Transformers with Intel Sapphire Rapids untuk melihat lebih dalam tentang kinerja BF16 pada perangkat keras Intel modern.
- Baca DDP untuk informasi lebih lanjut tentang strategi distribusi yang digunakan oleh contoh multi-proses.
- Baca catatan threading CPU PyTorch untuk mempelajari bagaimana
OMP_NUM_THREADSmemengaruhi kinerja. - Baca panduan PyTorchJob Kubeflow untuk menjalankan pelatihan CPU terdistribusi di Kubernetes.