Transformers documentation

FP8 bergranularitas halus

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

FP8 bergranularitas halus

Kuantisasi FP8 bergranularitas halus mengkuantisasi bobot dan aktivasi ke fp8.

  • Bobot dikuantisasi menjadi 8-bit untuk setiap blok 2D (weight_block_size=(128, 128)).
  • Aktivasi dikuantisasi menjadi 8-bit untuk setiap grup per token. Nilai grup sesuai dengan bobot pada kanal input (128 secara default).

Kuantisasi FP8 memungkinkan dukungan untuk DeepSeek-V3 dan DeepSeek-R1.

Anda memerlukan GPU dengan Compute Capability>=9 (H100), dan menginstal versi PyTorch yang kompatibel dengan versi CUDA dari GPU Anda.

Instal Accelerate dan tingkatkan ke versi terbaru PyTorch.

pip install --upgrade accelerate torch

Buat kelas FineGrainedFP8Config dan teruskan ke from_pretrained() untuk melakukan kuantisasi. Secara default, bobot dimuat dalam presisi penuh (torch.float32) terlepas dari tipe data aktual tempat bobot disimpan. Atur dtype="auto" untuk memuat bobot dalam tipe data yang didefinisikan di file config.json model, sehingga tipe data yang paling optimal dari segi memori dimuat secara otomatis.

from transformers import FineGrainedFP8Config, AutoModelForCausalLM, AutoTokenizer

model_name = "meta-llama/Meta-Llama-3-8B"
quantization_config = FineGrainedFP8Config()
quantized_model = AutoModelForCausalLM.from_pretrained(model_name, dtype="auto", device_map="auto", quantization_config=quantization_config)

tokenizer = AutoTokenizer.from_pretrained(model_name)
input_text = "What are we having for dinner?"
input_ids = tokenizer(input_text, return_tensors="pt").to(quantized_model.device.type)

output = quantized_model.generate(**input_ids, max_new_tokens=10)
print(tokenizer.decode(output[0], skip_special_tokens=True))

Gunakan save_pretrained() untuk menyimpan model terkuantisasi dan memuatnya kembali dengan from_pretrained().

quant_path = "/path/to/save/quantized/model"
quantized_model.save_pretrained(quant_path)
model = AutoModelForCausalLM.from_pretrained(quant_path, device_map="auto")

Jalur cepat DeepGEMM

Pada GPU Hopper (SM90+) dan Blackwell (SM100+), setiap linear FP8 secara otomatis di-dispatch ke kernel DeepGEMM dari kernels-community/deep-gemm ketika weight_block_size=(128, 128) dan activation_scheme="dynamic". DeepGEMM 3-6x lebih cepat daripada fallback Triton. Instal atau upgrade paket kernels untuk mengaktifkannya.

pip install -U kernels

DeepGEMM mengompilasi kernel-nya secara JIT menggunakan nvcc sistem, sehingga toolkit CUDA lengkap harus diinstal. Instalasi hanya runtime (library CUDA tanpa nvcc) tidak akan berfungsi. Versi minimum toolkit bergantung pada perangkat keras: 12.3 atau lebih baru pada Hopper (SM90), dan 12.9 atau lebih baru pada Blackwell (SM100).

Transformers menemukan toolkit dengan memeriksa CUDA_HOME, kemudian CUDA_PATH, kemudian nvcc di PATH Anda, kemudian /usr/local/cuda. Atur CUDA_HOME ke root toolkit jika nvcc tidak ditemukan.

Jika kernel tidak dapat dimuat (karena kernels tidak ada, GPU tidak didukung, tidak ada CUDA toolkit, atau nvcc lebih lama dari versi yang diperlukan), Transformers mencatat peringatan sekali dan beralih ke kernel Triton finegrained-fp8. Kuantisasi aktivasi statis selalu tetap berada di jalur Triton.

Untuk memaksa penggunaan fallback Triton meskipun DeepGEMM tersedia, atur TRANSFORMERS_DISABLE_DEEPGEMM_LINEAR=1. Hal ini hanya memengaruhi dispatch linear FP8 dan tidak mengubah backend experts "deepgemm", yang dapat Anda ubah dengan set_experts_implementation().

Untuk pakar MoE, jalur DeepGEMM bersifat opt-in. Sampaikan experts_implementation="deepgemm" (atau "deepgemm_megamoe" pada Blackwell) saat pemuatan untuk mengalihkan perkalian matriks pakar melalui DeepGEMM. Lihat panduan Backends pakar untuk kumpulan opsi lengkap.

Format skala UE8M0

Checkpoint bergaya DeepSeek V4 menyimpan skala bobot FP8 dalam format float8_e8m0fnu yang ter-packing, alih-alih float32. Checkpoint ini sudah ter-kuantisasi sebelumnya dan mengatur scale_fmt="ue8m0" dalam konfigurasi kuantisasinya. Baik kernel DeepGEMM maupun Triton membaca skala UE8M0, sehingga checkpoint ini dapat dijalankan di jalur mana pun.

Pada Blackwell (SM100+), kernel DeepGEMM experts hanya mendukung skala UE8M0. Checkpoint dengan skala float32 biasa (scale_fmt="float") akan memicu ValueError. Gunakan checkpoint scale_fmt="ue8m0", atau jalankan experts dengan grouped_mm atau batched_mm, yang mendukung skala float32 secara langsung. Hopper (SM90+) mendukung skala float32 pada jalur DeepGEMM tanpa konversi. Lihat panduan Experts backends untuk opsi backend experts.

Update on GitHub