AMD Quark是什么?

Quark 是一个全面的跨平台工具包,旨在简化和增强深度学习模型的量化。 Quark 支持 PyTorch 和 ONNX 模型,使开发人员能够优化其模型,以便在各种硬件后端上部署,在不影响准确性的情况下实现显著的性能提升。

在这里插入图片描述

Quark for PyTorch: 灵活高效的 PyTorch 模型量化

Quark for PyTorch 为开发人员提供了一个灵活、高效、易用的工具包,用于量化 PyTorch 的深度学习模型。 当前的量化方法基于 PyTorch 的就地算子替换。 具体而言,该工具提供了以下主要功能和经过验证的模型:

主要功能

  • 全面的量化支持
    • 急切模式训练后量化 (PTQ): 量化预训练模型,无需重新训练数据。
    • FX 图形模式 PTQ 和量化感知训练 (QAT): 在训练过程中优化模型,从而在量化硬件上获得更高的准确性。
    • 优化的 QAT 方法: 支持深度神经网络精确高效定点推理的训练量化阈值(TQT)、学习步长量化(LSQ),以获得更好的 QAT 效果。
    • 灵活的量化策略: 可选择对称/非对称、仅加权/静态/动态量化,以及各种量化级别(每个张量/通道),以微调性能和精度权衡。
    • 广泛的数据类型支持 使用多种数据类型量化模型,包括 float16、bfloat16、int4、uint4、int8、fp8(e4m3fn 和 e5m2)、具有多级缩放功能的共享微指数(MX6、MX9`),以及具有 int8、fp8_e4m3fn、fp8_e5m2、fp4、fp6_e3m2 和 fp6_e2m3 元素的微缩放 (MX) 数据类型。
    • 可配置的校准方法: 使用 MinMax、Percentile 和 MSE 校准方法优化量化精度。
  • 高级功能:
    • 大型语言模型优化: 通过 kv 缓存量化,为量化大型语言模型提供专门支持。
    • 尖端算法: 利用最先进的算法,如 SmoothQuant、AWQ 和 GPTQ,在 GPU 上实现 uint4 量化,为要求苛刻的任务提供最佳性能。
  • 无缝集成和部署
    • 导出为多种格式: 将量化模型导出为 ONNX、JSON-safetensors 和 GGUF 格式,以便在各种平台上部署。
    • APL 集成: 与 AMD Pytorch-light (APL) 无缝集成,优化 AMD 硬件性能,提供 INT-K、BFP16 和 BRECQ 支持。
    • Brevitas 整合实验: 探索与 Brevitas 的无缝集成,以量化 Stable Diffusion 和 ImageNet 分类模型。
  • 包含示例: 从 LLM 模型、SDXL 模型(Eager 模式)和 CNN 模型(FX Graph 模式)的实用示例中获益,加速您的量化之旅。
  • 跨平台支持: 在 Linux(CPU 和 GPU)和 Windows(CPU 模式)操作系统上进行开发和部署。

Quark for ONNX:ONNX 模型的简化量化

Quark for ONNX 利用 ONNX Runtime Quantization 工具的强大功能,为量化 ONNX 模型提供了强大而灵活的解决方案。

主要功能

  • 全面量化支持
    • 训练后量化 (PTQ): 量化预训练模型,无需重新训练数据。
    • 灵活的量化策略: 可选择对称/非对称、仅加权/静态/动态量化,以及各种量化级别(每个张量/通道),以微调性能和精度权衡。
    • 广泛的数据类型支持 使用多种数据类型量化模型,包括 uint32、int32、float16、bfloat16、int16、uint16、int8、uint8 和 bfp。
    • 可配置的校准方法: 使用 MinMax、Entropy、Percentile、NonOverflow 和 MinMSE 校准方法优化量化精度。
  • 高级功能
    • 多种部署目标: 针对各种硬件平台,包括 NPU_CNN、NPU_Transformer 和 CPU。
    • 尖端算法: 利用最先进的算法,如 SmoothQuant、CLE、BiasCorrection、AdaQuant 和 AdaRound,为要求苛刻的任务实现最佳性能。
    • 灵活的缩放类型: 支持使用浮点缩放、int16 缩放和 2 次幂缩放选项进行量化。
    • 自动混合精度: 通过自动混合精度,实现精度和性能之间的最佳平衡。

有关夸克特性和功能的更多详细信息,请参阅 📖Documentation 和 💡Examples 页面。

PyTorch Quark 入门

如果用户想使用 int8 数据类型对 opt-125m 模型进行只对称张量权重量化,可以编写如下所示的 Python 脚本。 每个步骤的详细说明将在《用户指南》的其他章节中提供。

# 1. Set model
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("facebook/opt-125m")
model.eval()
tokenizer = AutoTokenizer.from_pretrained("facebook/opt-125m")

# 2. Set quantization configuration
from quark.torch.quantization.config.type import Dtype, ScaleType, RoundType, QSchemeType
from quark.torch.quantization.config.config import Config, QuantizationSpec, QuantizationConfig
from quark.torch.quantization.observer.observer import PerTensorMinMaxObserver
DEFAULT_INT8_PER_TENSOR_SYM_SPEC = QuantizationSpec(dtype=Dtype.int8,
                                        qscheme=QSchemeType.per_tensor,
                                        observer_cls=PerTensorMinMaxObserver,
                                        symmetric=True,
                                        scale_type=ScaleType.float,
                                        round_method=RoundType.half_even,
                                        is_dynamic=False)

DEFAULT_W_INT8_PER_TENSOR_CONFIG = QuantizationConfig(weight=DEFAULT_INT8_PER_TENSOR_SYM_SPEC)
quant_config = Config(global_quant_config=DEFAULT_W_INT8_PER_TENSOR_CONFIG)

# 3. Define calibration dataloader (still need this step for weight only and dynamic quantization)
from torch.utils.data import DataLoader
text = "Hello, how are you?"
tokenized_outputs = tokenizer(text, return_tensors="pt")
calib_dataloader = DataLoader(tokenized_outputs['input_ids'])

# 4. In-place replacement with quantized modules in model
from quark.torch import ModelQuantizer
quantizer = ModelQuantizer(quant_config)
quant_model = quantizer.quantize_model(model, calib_dataloader)

# # 5. (Optional) Export onnx
# # If user want to export the quantized model, please freeze the quantized model first
# freezed_quantized_model = quantizer.freeze(quant_model)
# from quark.torch import ModelExporter
# # Get dummy input
# for data in calib_dataloader:
#     input_args = data
#     break
# quant_model = quant_model.to('cuda')
# input_args = input_args.to('cuda')
# exporter = ModelExporter('export_path')
# exporter.export_onnx_model(quant_model, input_args)

Huggingface

在这里插入图片描述
感谢大家花时间阅读我的文章,你们的支持是我不断前进的动力。期望未来能为大家带来更多有价值的内容,请多多关注我的动态!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值