Diffusers documentation

AutoRound

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

and get access to the augmented documentation experience

to get started

AutoRound

AutoRound é um kit de ferramentas avançado de quantização. Ele atinge alta precisão em larguras de bits extremamente baixas (2-4 bits) com ajuste mínimo, aproveitando a descida do gradiente de sinal e oferecendo ampla compatibilidade com hardware. Consulte nossos artigos SignRoundV1 e SignRoundV2 para mais detalhes.

Instale auto-round(versão ≥ 0.13.0):

pip install "auto-round>=0.13.0"

Para usar o kernel Marlin para inferência CUDA mais rápida, instale gptqmodel:

pip install "gptqmodel>=5.8.0"

Carregar um modelo quantizado

Carregue um modelo AutoRound pré-quantizado passando AutoRoundConfig para from_pretrained(). O método funciona com qualquer modelo que seja carregado via Accelerate e que possua camadas torch.nn.Linear.

Você pode usar PipelineQuantizationConfig para quantizar componentes específicos de um pipeline:

import torch
from diffusers import DiffusionPipeline, PipelineQuantizationConfig, AutoRoundConfig

pipeline_quant_config = PipelineQuantizationConfig(
    quant_mapping={"transformer": AutoRoundConfig(backend="auto")}
)
pipe = DiffusionPipeline.from_pretrained(
    "INCModel/Z-Image-W4A16-AutoRound",
    quantization_config=pipeline_quant_config,
    dtype=torch.bfloat16,
    device_map="cuda",  # or "mps", "xpu", "cpu"
)

image = pipe("a cat holding a sign that says hello").images[0]
image.save("output.png")

Ou carregue um componente de modelo quantizado diretamente:

import torch
from diffusers import ZImageTransformer2DModel, ZImagePipeline, AutoRoundConfig

model_id = "INCModel/Z-Image-W4A16-AutoRound"

quantization_config = AutoRoundConfig(backend="auto")
transformer = ZImageTransformer2DModel.from_pretrained(
    model_id,
    subfolder="transformer",
    quantization_config=quantization_config,
    dtype=torch.bfloat16,
    device_map="cuda",  # or "mps", "xpu", "cpu"
)

pipe = ZImagePipeline.from_pretrained(
    model_id,
    transformer=transformer,
    dtype=torch.bfloat16,
    device_map="cuda",
)

image = pipe("a cat holding a sign that says hello").images[0]
image.save("output.png")

O AutoRound no Diffusers só suporta o carregamento de modelos pré-quantizados. Para quantizar um modelo do zero, use diretamente a CLI ou a API Python do AutoRound e, em seguida, carregue o resultado com o Diffusers.

torch.compile

AutoRound é compatível com torch.compile para inferência mais rápida. Você pode compilar o transformer (DiT) quantizado para melhor desempenho:

import torch
from diffusers import DiffusionPipeline, PipelineQuantizationConfig, AutoRoundConfig

pipeline_quant_config = PipelineQuantizationConfig(
    quant_mapping={"transformer": AutoRoundConfig(backend="auto")}
)
pipe = DiffusionPipeline.from_pretrained(
    "INCModel/Z-Image-W4A16-AutoRound",
    quantization_config=pipeline_quant_config,
    dtype=torch.bfloat16,
    device_map="cuda",  # or "mps", "xpu", "cpu"
)

pipe.transformer = torch.compile(pipe.transformer, mode="default", fullgraph=False)

Backends

O AutoRound suporta múltiplos backends de inferência para modelos quantizados apenas em pesos. O backend controla qual kernel lida com a desquantização durante a passagem direta. Defina o parâmetro backend em AutoRoundConfig para escolher um:

BackendValorDispositivoRequisitosObservações
Auto"auto"Qualquer—Padrão. Seleciona automaticamente o melhor backend disponível.
PyTorch"torch"CPU / CUDA—Implementação em PyTorch puro. Maior compatibilidade.
Triton"tritonv2"CUDAtritonKernel baseado em Triton para inferência em GPU.
ExllamaV2"exllamav2"CUDAgptqmodel>=5.8.0Bom desempenho de CUDA por meio do kernel ExllamaV2.
Marlin"marlin"CUDAgptqmodel>=5.8.0Melhor desempenho CUDA por meio do kernel Marlin.
from diffusers import AutoRoundConfig

# Auto-select (default)
config = AutoRoundConfig()

# Explicit Triton backend for CUDA
config = AutoRoundConfig(backend="tritonv2")

# Marlin backend for best CUDA performance (requires gptqmodel>=5.8.0)
config = AutoRoundConfig(backend="marlin")

# ExllamaV2 backend for good CUDA performance (requires gptqmodel>=5.8.0)
config = AutoRoundConfig(backend="exllamav2")

# PyTorch backend for CPU/CUDA inference
config = AutoRoundConfig(backend="torch")

Salvar e carregar

salvar
load

AutoRound requer calibração de dados para quantizar um modelo. Isso é feito fora do Diffusers usando diretamente a biblioteca AutoRound:

from auto_round import AutoRound

autoround = AutoRound(
    "Tongyi-MAI/Z-Image",
    scheme="W4A16",  # W4G128 symmetric
    enable_torch_compile=True,
    num_inference_steps=3,
    guidance_scale=7.5,
    dataset="coco2014",
)
autoround.quantize_and_save("Z-Image-W4A16-AutoRound")

Para mais detalhes sobre as opções de calibração, consulte a documentação do AutoRound.

Esquemas de Quantização Suportados

O AutoRound suporta vários Schemes:

  • W4A16(bits:4,group_size:128,sym:True,act_bits:16)
  • W8A16(bits:8,group_size:128,sym:True,act_bits:16)
  • W3A16(bits:3,group_size:128,sym:True,act_bits:16)
  • W2A16(bits:2,group_size:128,sym:True,act_bits:16)
  • GGUF:Q4_K_M(todos os Q_K,Q_0,Q*_1 fornecidos pelo llamacpp são suportados)
  • NVFP4(Recurso experimental, recomenda-se exportar para o formato llm_compressor com data_type nvfp4,act_data_type nvfp4,static_global_scale,group_size 16)
  • MXFP4(Recurso de pesquisa, sem kernel real, MXFP4 padrão, data_type mxfp,act_data_type mxfp,bits 4, act_bits 4, group_size 32)
  • MXINT4(Recurso de pesquisa, sem kernel real, MXINT4 padrão, data_type mxint,act_data_type mxint,bits 4, act_bits 4, group_size 32)
  • MXFP4_RCEIL(Recurso de pesquisa, sem kernel real, variante da NVIDIA, data_type mxfp,act_data_type mxfp_rceil,bits 4, act_bits 4, group_size 32)
  • MXFP8(Recurso de pesquisa, sem kernel real, data_type mxfp,act_data_type mxfp_rceil,group_size 32)
  • FPW8A16(Recurso de pesquisa, sem kernel real, data_type fp8,group_size 0->per tensor )
  • FP8_STATIC(Recurso de pesquisa, sem kernel real, data_type:fp8,act_data_type:fp8,group_size -1 ->por canal, act_group_size=0->por tensor)

Além disso, você pode modificar o group_size, bits, sym e muitas outras configurações que desejar, embora talvez não existam kernels reais.

Recursos

Update on GitHub