目录

分布式量化感知训练(QAT)

QAT(量化感知训练)允许在推理时利用量化带来的内存节省优化,而不会显著降低模型性能。在torchtune中,我们使用torchao来实现QAT。 其工作原理是通过在微调过程中模拟量化数值。虽然这可能会在训练期间引入内存和计算开销,但我们的测试表明,QAT在量化模型的评估中显著减少了性能下降,同时没有牺牲模型大小减少的优势。请参阅PyTorch博客文章,深入了解该技术的工作原理。

我们提供经过预先测试的开箱即用的配置,您只需两步即可使用最新的 Llama 模型 开始运行:

tune download meta-llama/Meta-Llama-3-8B-Instruct  \
--output-dir /tmp/Meta-Llama-3-8B-Instruct \
--ignore-patterns "original/consolidated.00.pth" \
--HF_TOKEN <HF_TOKEN>

tune run --nproc_per_node 6 qat_distributed \
--config llama3/8B_qat_full

注意

您可能需要获得访问您感兴趣的Llama模型的权限。有关访问受限制存储库的详细信息,请参阅 此处。 此外,此工作负载至少需要6个GPU,每个GPU的显存至少为80GB,例如A100或H100。

目前,你可以通过使用延迟伪量化来对量化感知训练(QAT)进行主要调整。 延迟伪量化允许你控制在哪个步骤之后开始伪量化。 经验表明,让模型在初始阶段不进行伪量化的情况下微调,可以使权重和激活值稳定下来,然后再进行伪量化,这可能会提高量化后的准确性。这可以通过fake_quant_after_n_steps来指定。为了帮助你大致配置这个参数,我们发现最佳结果是在fake_quant_after_n_steps ~= total_steps // 2时获得的。

在未来,我们计划支持不同的量化策略。目前,请注意,您至少需要 torch>=2.4.0 来使用 Int8DynActInt4WeightQATQuantizer 策略。一般来说,使用 QAT 训练、量化和评估模型的流程是:

  1. 运行上述命令或按照教程中的 qat_distributed 示例,或者通过以下教程。默认情况下,这将使用 Int8DynActInt4WeightQATQuantizer

  2. 这将生成一个原始数据类型的未量化模型。要获得实际的量化模型,请在配置中指定相同的量化器,例如 tune run quantize

    # QAT specific args
    quantizer:
      _component_: torchtune.training.quantization.Int8DynActInt4WeightQATQuantizer
      groupsize: 256
    
  3. 评估运行推理 使用您的量化模型,通过指定相应的后训练量化器:

    quantizer:
      _component_: torchtune.training.quantization.Int8DynActInt4WeightQuantizer
      groupsize: 256
    

注意

我们使用配置文件来展示如何在这些示例中自定义配方。查看 配置文件教程以了解更多信息。

我们的许多其他内存优化功能也可用于此方案:

您可以了解更多关于我们内存优化功能的信息,请参阅我们的 内存优化概述

想看看这个示例的实际效果吗?查看我们的部分教程,了解如何应用它:

文档

访问 PyTorch 的全面开发人员文档

查看文档

教程

获取面向初学者和高级开发人员的深入教程

查看教程

资源

查找开发资源并解答您的问题

查看资源