Transformers documentation

Đào tạo độ chính xác hỗn hợp

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

and get access to the augmented documentation experience

to get started

Đào tạo độ chính xác hỗn hợp

Huấn luyện độ chính xác đầy đủ (fp32) lưu trữ và tính toán mọi thứ bằng 32 bit. Độ chính xác hỗn hợp sử dụng fp16 hoặc bf16 cho các bước truyền thẳng và truyền ngược có cường độ tính toán cao, trong khi giữ một bản sao fp32 của trọng số cho việc cập nhật bộ tối ưu hóa. Việc tính toán nhanh hơn, bộ nhớ cho trọng số và kích hoạt được giảm, và tính ổn định của huấn luyện được duy trì.

┌─────────────────────────────────────────────────────┐
│           MIXED PRECISION TRAINING LOOP             │
│                                                     │
│  fp32 master weights ──cast──▶ fp16/bf16            │
│         ▲                          │                │
│         │                    FORWARD (autocast)     │
│         │                    matmuls in fp16/bf16   │
│         │                    reductions stay fp32   │
│         │                          │ loss           │
│         │                    LOSS SCALE ×S  ──fp16  │
│         │                          │                │
│         │                    BACKWARD               │
│         │                    grads in fp16/bf16     │
│         │                          │                │
│         │                    UNSCALE ÷S    ──fp16   │
│         │                    check inf/nan          │
│         │                    cast grads → fp32      │
│         └────────────────────────── optimizer.step  │
└─────────────────────────────────────────────────────┘

Đặt bf16() hoặc fp16() thành True để bật huấn luyện độ chính xác hỗn hợp. Cả hai đều là kiểu 16-bit, nhưng bf16 có phạm số mũ giống fp32 nên gần như không bao giờ tràn số. Hãy dùng bf16 trên các GPU Ampere hoặc mới hơn (A100, H100) và chuyển sang fp16 trên phần cứng cũ hơn như V100 hoặc T4.

Tải mô hình ở fp32, nếu không autocast sẽ không có tác dụng. Việc tải ở bf16 hoặc fp16 sẽ không còn bản master fp32 để optimizer cập nhật.

from transformers import TrainingArguments

args = TrainingArguments(..., bf16=True)
args = TrainingArguments(..., fp16=True)

Nếu mô hình của bạn ổn định về mặt số học trong bf16/fp16, bạn có thể bỏ qua hoàn toàn độ chính xác hỗn hợp và tải cũng như huấn luyện trực tiếp trong bf16/fp16. Điều này giúp tránh bản sao fp32 của trọng số trong bộ nhớ.

tf32

tf32 là một chế độ tính toán trên GPU Ampere, sử dụng phần mantissa 10-bit cho phép nhân ma trận thay vì 23-bit. Điều này có thể giúp tăng tốc độ, đặc biệt khi kết hợp với bf16/fp16. PyTorch mặc định bật tf32 cho phép nhân ma trận trên các GPU Ampere và mới hơn, nhưng việc thiết lập rõ ràng trong TrainingArguments đảm bảo chế độ này luôn được kích hoạt bất kể phiên bản PyTorch hay các cài đặt mặc định của môi trường.

from transformers import TrainingArguments

args = TrainingArguments(..., bf16=True, tf32=True)

Các bước tiếp theo

  • Xem hướng dẫn Kernels để tìm hiểu cách tăng tốc huấn luyện bằng các kernel hợp nhất tùy chỉnh.
  • Xem hướng dẫn torch.compile để tìm hiểu cách biên dịch các bước forward và backward nhằm tăng thêm thông lượng.
Update on GitHub