細粒度のFP8
Fine-grained FP8 quantization は、重みとアクティベーションを fp8 に量子化します。
- 重みは、各2Dブロックごとに8ビットに量子化されます(
weight_block_size=(128, 128))。 - アクティベーションは、トークンごとにグループ単位で8ビットに量子化されます。グループの値は入力チャネルの重みに一致します(デフォルトは128)。
FP8量子化により、DeepSeek-V3およびDeepSeek-R1のサポートが可能になります。

Compute Capability>=9 (H100) をサポートする GPU が必要であり、GPU の CUDA バージョンと互換性のある PyTorch バージョンをインストールしてください。
Accelerate をインストールし、PyTorch を最新バージョンにアップグレードします。
pip install --upgrade accelerate torch
FineGrainedFP8Config クラスを作成し、from_pretrained() に渡して量子化します。重みは、実際の保存データ型に関わらず、デフォルトではフル精度(torch.float32)で読み込まれます。モデルの config.json ファイルで定義されたデータ型で重みをロードし、メモリ効率の最も良いデータ型を自動的に読み込むには、dtype="auto" を設定してください。
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))save_pretrained() を使用して量子化モデルを保存し、from_pretrained() で読み込み直します。
quant_path = "/path/to/save/quantized/model"
quantized_model.save_pretrained(quant_path)
model = AutoModelForCausalLM.from_pretrained(quant_path, device_map="auto")DeepGEMMの高速パス
Hopper (SM90+) および Blackwell (SM100+) GPU では、weight_block_size=(128, 128) かつ activation_scheme="dynamic" の場合、すべての FP8 linear が自動的に kernels-community/deep-gemm の DeepGEMM カーネルにディスパッチされます。DeepGEMM は Triton のフォールバックよりも 3〜6 倍高速です。これを有効にするには、kernels パッケージをインストールまたはアップグレードしてください。
pip install -U kernels
DeepGEMM はシステムの nvcc を使用してカーネルを JIT コンパイルするため、完全な CUDA ツールキットのインストールが必要です。ランタイムのみのインストール(nvcc を含まない CUDA ライブラリ)では動作しません。ツールキットの最低バージョンはハードウェアによって異なり、Hopper (SM90) では 12.3 以降、Blackwell (SM100) では 12.9 以降が必要です。
Transformers は、CUDA_HOME、次に CUDA_PATH、次に PATH 上の nvcc、最後に /usr/local/cuda の順に確認してツールキットを探します。nvcc が検出されない場合は、CUDA_HOME をツールキットのルートに設定してください。
カーネルを読み込めない場合(kernelsが不足している、GPUがサポートされていない、CUDAツールキットがない、またはnvccのバージョンが要求されるバージョンより古い)、Transformersは警告を一度ログに記録し、Tritonのfinegrained-fp8カーネルにフォールバックします。静的アクティベーション量子化は常にTritonパスで実行されます。
TRANSFORMERS_DISABLE_DEEPGEMM_LINEAR=1 を設定すると、DeepGEMM が利用可能であっても Triton のフォールバックを強制できます。これは FP8 linear のディスパッチにのみ影響し、"deepgemm" の experts バックエンドには影響しません。experts バックエンドは set_experts_implementation() で切り替えます。
MoEエキスパートの場合、DeepGEMMパスはオプトイン方式です。読み込み時にexperts_implementation="deepgemm"(Blackwellでは"deepgemm_megamoe")を渡すことで、エキスパートの行列積をDeepGEMM経由で処理するようにルーティングできます。すべてのオプションについては、Experts backendsガイドを参照してください。
UE8M0スケール形式
DeepSeek V4 形式のチェックポイントは、float32 ではなく、パックされた float8_e8m0fnu 形式で FP8 の重みスケールを保存します。これらのチェックポイントは事前量子化されており、量子化設定で scale_fmt="ue8m0" が設定されています。DeepGEMM と Triton の両方のカーネルが UE8M0 スケールを読み取れるため、これらのチェックポイントはどちらのパスでも実行できます。
Blackwell (SM100+) では、DeepGEMM の experts カーネルは UE8M0 スケールのみをサポートしています。通常の float32 スケール (scale_fmt="float") を持つチェックポイントを使用すると、ValueError が発生します。scale_fmt="ue8m0" のチェックポイントを使用するか、float32 スケールを直接サポートする grouped_mm または batched_mm で experts を実行してください。Hopper (SM90+) では、変換なしで DeepGEMM パス上で float32 スケールをサポートしています。experts バックエンドのオプションについては、Experts backends ガイドを参照してください。