量子化されたモデルかどうかを、落とす前に判定する
12GB のモデルをダウンロードして、動かして、自分の GPU では動かないと気づく。これを 172KB の取得で回避できます。
ヘッダーに全部書いてある
safetensors の並びは「先頭8バイト=ヘッダー長」「ヘッダー JSON」「テンソル本体」です。ヘッダー JSON にはテンソル名・型・ファイル内の位置がすべて入っているので、本体を1バイトも読まずに中身の構成が分かります。
そして ComfyUI は、量子化の設定をメタデータではなくテンソルとして書き込みます。層ごとに comfy_quant という名前の U8 テンソルがあり、中身は JSON です。
| double_blocks.0.img_attn.qkv.comfy_quant | {"format":"int8_tensorwise","per_row":true,"convrot":true,"convrot_groupsize":256} |
|---|
テンソル名はヘッダーに載っているので「量子化されているか」はヘッダーだけで判定でき、data_offsets も載っているので、この JSON 本体だけを追加で数十バイト取得できます。
実測
2026-07-25Hugging Face 上の実ファイルに対して HTTP Range で計測した値です。「取得」は判定に必要だった実際のバイト数です。
| モデル | 全体 | 取得 | 比率 | 型の分布 | 判定 |
|---|---|---|---|---|---|
| Comfy-Org/Qwen-Image_ComfyUI qwen_image_distill_full_bf16.safetensors | 38,968 MiB | 229 KB | 0.0006% | BF16 ×1,933 | 量子化なし |
| AX1Y2JP/FLUX.1-dev-INT8-ConvRot flux1-dev-int8-convrot.safetensors | 11,767 MiB | 172 KB | 0.0014% | F32 ×266 / BF16 ×514 / I8 ×266 / U8 ×266 | int8_tensorwise + per_row + convrot |
| martin-rizzo/Z-Image-Turbo-INT8-ConvRot-ComfyUI z_image_turbo_int8_convrot_bf16emixed.safetensors | 5,888 MiB | 92 KB | 0.0015% | F32 ×204 / BF16 ×249 / I8 ×204 / U8 ×204 | int8_tensorwise + convrot |
| martin-rizzo/Qwen3-4B-INT8-ConvRot-ComfyUI qwen3-4b_int8_convrot_fp16emixed.safetensors | 4,211 MiB | 102 KB | 0.0023% | F32 ×252 / F16 ×146 / I8 ×252 / U8 ×252 | int8_tensorwise + convrot |
| dummy9996/qwen3-0.6b-4b-mxfp8-nvfp4-int8-convrot-comfyui qwen_3_06b_base-int8cr.safetensors | 717 MiB | 84 KB | 0.0111% | BF16 ×114 / F32 ×196 / I8 ×196 / U8 ×196 | int8_tensorwise(convrot なし) |
一番上は対照として置いた素の BF16 モデルです。39GB ありますが 229KB で「量子化されていない」と確定できます。
ファイル名は当てにならない
最後の行を見てください。ファイル名は int8cr、リポジトリ名にも convrot と入っているのに、中身の設定は convrot を含みません。念のため 12 層をサンプリングしましたが、すべて同じでした。
| qwen_3_06b_base-int8cr | {"format":"int8_tensorwise"} |
|---|---|
| flux1-dev-int8-convrot | {"format":"int8_tensorwise","per_row":true,"convrot":true,"convrot_groupsize":256} |
同じ層で設定が混ざることは今のところ観測していません。混ざるとすればファイル間であって、ファイル内ではないようです。いずれにせよ、名前ではなくヘッダーを見るのが確実です。
INT8 でも、全部が INT8 ではない
型の分布を見ると、I8 と U8 が必ず同数で並び、その横に BF16 や F16 が残っています。I8 が量子化された重み、U8 がその設定、F32 がスケール、そして残りは量子化されなかった層です。FLUX.1-dev の例では I8 が 266 本に対して BF16 が 514 本、つまり本数で言えば大半は元の精度のままです。
ファイル名の bf16emixed / fp16emixed はこの「残った側」の精度を指しています。ヘッダーを読めば、その表記が正しいかどうかも確認できます。
動く GPU の条件
ConvRot の INT8 経路は ComfyUI の comfy/quant_ops.py で有効・無効が決まります。読むと条件はこうです。
| NVIDIA / CUDA | PyTorch が cu130 以上。それ未満は警告を出して無効化されます。Turing 世代以降が対象です。 |
|---|---|
| AMD / ROCm | Triton 3.7 以上、かつ行列演算ユニットを持つ GPU(RDNA3 以降の WMMA、CDNA の MFMA)。RDNA1・RDNA2 は WMMA を持たず、INT8 経路に入れると GPU がハングするため除外されています。 |
| Apple Silicon / MPS | 読み込みは通り、量子化アルゴリズムも登録されます(M2 Max・torch 2.13 で実測)。ただし高速化はしません。comfy-kitchen の CUDA 拡張は macOS 版に同梱されておらず、Triton も入らないため、残るのは eager バックエンドだけです。さらに PyTorch の INT8 行列積 aten::_int_mm が MPS 未実装なので、重みは float に戻してから計算されます。 |
Hugging Face のモデルページはこの条件を表示しません。ダウンロードしてから分かることを、ヘッダーの判定で先に潰せます。
自分のファイルで試す
このサイトのビューアに .safetensors をドロップするか、Hugging Face の URL を貼ると、型の分布・テンソル構成・メタデータをブラウザだけで表示します。ファイルはアップロードされません。
その一枚が、動き出す。
生成した画像も、お気に入りの一枚も。アップロードするだけで、AIがそっと命を吹き込みます。
無料で試してみる →Googleアカウントですぐ・無料クレジットで1本作れますよくある質問
- ダウンロードせずに量子化の有無が分かるのはなぜですか?
- safetensors は「先頭8バイトのヘッダー長 → ヘッダー JSON → テンソル本体」という並びで、ヘッダー JSON にすべてのテンソル名・型・配置が入っています。ComfyUI は量子化設定をテンソルとしてファイル内に書き込むため、その名前がヘッダーに現れます。つまりヘッダーだけ読めば判定できます。
- I8 のテンソルがあれば INT8 量子化ですか?
- 必ずしもそうとは限りません。判定の根拠にすべきは comfy_quant テンソルの有無です。実測した3本ではいずれも I8 と U8 が同数(重みとスケール)で、加えて BF16 や F16 の層が半分以上残っていました。「INT8 量子化」といっても全層が INT8 になるわけではありません。
- ファイル名の bf16emixed や fp16emixed は何を意味しますか?
- 量子化されなかった層がどの精度で残っているかを指しています。ヘッダーの型分布を見ると裏付けが取れます。たとえば Z-Image-Turbo の bf16emixed では BF16 が 249 本残っており、Qwen3-4B の fp16emixed では F16 が 146 本でした。
- ConvRot とは何ですか?
- ComfyUI v0.27.0 で追加された INT8 量子化の方式です。設定に convrot_groupsize が付くことから、一定数(実測ではすべて 256)ごとに回転を掛けてから量子化する系統と読めますが、これは名称と設定値からの推測です。実装は comfy/quant_ops.py と comfy-kitchen パッケージにあります。
- 自分の GPU で動きますか?
- 高速な INT8 カーネルが使えるのは、PyTorch が cu130 以上の NVIDIA(Turing 以降)か、Triton 3.7 以上かつ行列演算ユニットを持つ AMD(RDNA3 以降、CDNA)です。Mac でも読み込み自体は通りますが、速くはなりません。
- Mac で int8 モデルを読ませると実際どうなりますか?
- M2 Max / torch 2.13 で実測したところ、ファイルは問題なく読めて(702 テンソル、重みは torch.int8)、量子化アルゴリズムも登録されました。ただし comfy-kitchen のバックエンドは eager だけが有効で、CUDA 拡張は macOS 版に同梱されておらず(_C.abi3.so が無い)、Triton も入りません。加えて PyTorch の INT8 行列積 aten::_int_mm が MPS 未実装のため、INT8 のまま計算する経路がありません。つまり容量は小さくなりますが、速度の利得はありません。
出典
- comfy/quant_ops.py — 量子化レイアウトとバックエンドの有効化条件
- PR #14636 “Support int8 models.” — comfy_quant の読み出しと comfy-kitchen の導入
- PR #14662 “int8 support on turing GPUs.”
- safetensors — フォーマット本体(Rust 実装)
PR 生成した画像を動かしてみたい方は、AI動画生成 「動かし式部」もどうぞ。画像1枚から動画になります。