Buckets:

mishig's picture
|
download
raw
7.55 kB

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:

Backend Valor Dispositivo Requisitos Observaçõ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" CUDA triton Kernel baseado em Triton para inferência em GPU.
ExllamaV2 "exllamav2" CUDA gptqmodel>=5.8.0 Bom desempenho de CUDA por meio do kernel ExllamaV2.
Marlin "marlin" CUDA gptqmodel>=5.8.0 Melhor 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

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.

import torch
from diffusers import ZImageTransformer2DModel, ZImagePipeline

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

# The inference backend will be automatically selected.
pipe = ZImagePipeline.from_pretrained(
    model_id,
    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")

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

Xet Storage Details

Size:
7.55 kB
·
Xet hash:
4fb19872aa536757cb191f185348d0e1e059fbbb802b19783f3a946d3dc93c67

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.