Transformers documentation

학습을 위한 텐서 병렬

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

and get access to the augmented documentation experience

to get started

학습을 위한 텐서 병렬

Tensor parallelism(TP)은 가중치 행렬을 GPU 간에 열 방향 또는 행 방향으로 분할합니다. 각 GPU는 샤드를 보유하며 부분 결과를 계산한 후, all-reduce를 통해 동기화하여 전체 출력을 생성합니다.

TP는 GPU 간 빈번한 통신에 의존합니다. NVLink와 같은 빠른 노드 내 링크를 갖춘 하드웨어에서 가장 잘 작동합니다.

    ┌─────────────────────────────┐
    │       X  (replicated)       │
    └────┬──────────┬─────────┬───┘
         │          │         │
    ┌────▼───┐ ┌────▼───┐ ┌───▼────┐
    │ ▓▓▓ W₀ │ │ ░░░ W₁ │ │ ███ W₂ │
    │  X@W₀  │ │  X@W₁  │ │  X@W₂  │
    └────┬───┘ └────┬───┘ └───┬────┘
         └──────────┼─────────┘
               Y₀+Y₁+Y₂
    ┌────────────────────────────┐
    │          Y (full)          │
    └────────────────────────────┘

Transformers는 base_model_tp_plan을 정의하는 config를 가진 아키텍처에 대해 TP를 지원합니다. 모델이 네이티브 TP를 지원하는지 확인하려면 해당 필드를 먼저 확인하세요.

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)

모델이 TP를 지원하는 경우, tp_size에 장치 수를 지정하여 DistributedConfig를 생성하고 from_pretrained()에 전달합니다. Transformers는 모델의 사전 정의된 플랜을 사용하고, device mesh를 초기화하며, 지원되는 레이어를 자동으로 샤딩합니다.

tp_plan="auto"를 DistributedConfig에 설정할 수도 있습니다. tp_size가 생략된 경우 WORLD_SIZE에서 추론됩니다. tp_plan을 from_pretrained()에 직접 전달하는 방식은 비추천(deprecated)되며 v5.18에서 제거됩니다.

device_map을 distributed_config과 함께 사용하지 마세요. 두 설정은 가중치 로딩 단계에서 충돌합니다. device_map은 모듈 전체를 특정 GPU에 배치하는 반면, 텐서 병렬 처리는 동일한 매개변수를 모든 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는 텐서 병렬 계획을 감지하고 모델에서 tp_size를 읽은 후 ParallelismConfig를 자동으로 생성합니다.

4개의 GPU가 있는 1개의 노드에서 학습을 시작합니다.

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

ParallelismConfig

ParallelismConfig을 FSDP와 같은 다른 병렬화 기법과 TP를 조합할 때 명시적으로 전달하세요.

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

PEPT 어댑터

텐서 병렬 기반 모델에 PEFT 어댑터를 로드할 수 있습니다(peft >= 0.21.1 필요). PEFT가 어댑터 가중치의 샤딩을 처리합니다. 어댑터를 추가, 로드 및 학습하는 방법과 분산 학습 관련 참고 사항은 PEFT를 참조하세요.

다음 단계

Update on GitHub