Transformers documentation

Parallelisme tensor untuk pelatihan

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

Parallelisme tensor untuk pelatihan

Tensor parallelism (TP) membagi matriks bobot secara kolom atau baris di antara beberapa GPU. Setiap GPU menyimpan satu shard, menghitung hasil parsial, dan melakukan sinkronisasi melalui all-reduce untuk menghasilkan output lengkap.

TP bergantung pada komunikasi antar-GPU yang sering. TP bekerja paling baik pada perangkat keras dengan tautan intra-node yang cepat, seperti NVLink.

    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
    β”‚       X  (replicated)       β”‚
    β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”˜
         β”‚          β”‚         β”‚
    β”Œβ”€β”€β”€β”€β–Όβ”€β”€β”€β” β”Œβ”€β”€β”€β”€β–Όβ”€β”€β”€β” β”Œβ”€β”€β”€β–Όβ”€β”€β”€β”€β”
    β”‚ β–“β–“β–“ Wβ‚€ β”‚ β”‚ β–‘β–‘β–‘ W₁ β”‚ β”‚ β–ˆβ–ˆβ–ˆ Wβ‚‚ β”‚
    β”‚  X@Wβ‚€  β”‚ β”‚  X@W₁  β”‚ β”‚  X@Wβ‚‚  β”‚
    β””β”€β”€β”€β”€β”¬β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”¬β”€β”€β”€β”˜ β””β”€β”€β”€β”¬β”€β”€β”€β”€β”˜
         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
               Yβ‚€+Y₁+Yβ‚‚
    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
    β”‚          Y (full)          β”‚
    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Transformers mendukung TP untuk arsitektur yang konfigurasinya mendefinisikan base_model_tp_plan. Periksa field tersebut terlebih dahulu untuk melihat apakah sebuah model mendukung TP native.

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)

Jika sebuah model mendukung TP, buat DistributedConfig dengan jumlah perangkat di tp_size dan teruskan ke from_pretrained(). Transformers menggunakan rencana yang telah didefinisikan sebelumnya oleh model, menginisialisasi device mesh, dan memecah lapisan yang didukung untuk Anda.

Anda juga dapat mengatur tp_plan="auto" di DistributedConfig. Ketika tp_size diabaikan, nilainya disimpulkan dari WORLD_SIZE. Menyalurkan tp_plan secara langsung ke from_pretrained() sudah tidak didukung dan akan dihapus pada v5.18.

Jangan gunakan device_map bersama distributed_config. Keduanya saling bertentangan pada level pemuatan bobot. device_map menempatkan modul utuh pada GPU tertentu, sedangkan tensor parallelism memecah parameter yang sama tersebut di seluruh GPU.

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 mendeteksi rencana parallel tensor, membaca tp_size dari model, dan membuat ParallelismConfig secara otomatis.

Luncurkan pelatihan pada satu node dengan 4 GPU.

torchrun --nproc-per-node 4 train_tp.py

ParallelismConfig

Lewatkan ParallelismConfig secara eksplisit saat menggabungkan TP dengan teknik paralelisasi lain seperti FSDP.

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,
)

Adaptasi PEFT

Anda dapat memuat adapter PEFT ke model dasar yang menggunakan tensor parallel (memerlukan peft >= 0.21.1). PEFT menangani sharding bobot adapter. Lihat PEFT untuk cara menambahkan, memuat, dan melatih adapter, termasuk catatan mengenai pelatihan terdistribusi.

Langkah selanjutnya

Update on GitHub