分布式量化感知训练 (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 的 VRAM 至少为 80GB,例如 A100 或 H100。
目前,您可以用于 QAT 的主要杠杆是使用延迟伪量化。延迟伪量化允许控制伪量化发生后的步骤。根据经验,允许模型在最初不进行伪量化的情况下进行微调,可以使权重和激活值在伪量化之前稳定下来,从而可能提高量化精度。这可以通过 fake_quant_after_n_steps
指定。为了让您了解如何大致配置此参数,我们通过 fake_quant_after_n_steps ~= total_steps // 2
获得了最佳结果。
将来,我们计划支持不同的量化策略。目前,请注意,您需要至少 torch>=2.4.0
才能使用 Int8DynActInt4WeightQATQuantizer 策略。通常,使用 QAT 训练、量化和评估模型的管道如下所示:
使用上述命令或按照教程运行
qat_distributed
食谱。默认情况下,这将使用Int8DynActInt4WeightQATQuantizer
。这会生成一个原始数据类型中的非量化模型。要获取实际的量化模型,请使用
tune run quantize
并在配置中指定相同的量化器,例如:# QAT specific args quantizer: _component_: torchtune.training.quantization.Int8DynActInt4WeightQATQuantizer groupsize: 256
评估 或 运行推理,方法是使用您的量化模型并指定相应的训练后量化器。
quantizer: _component_: torchtune.training.quantization.Int8DynActInt4WeightQuantizer groupsize: 256
注意
我们正在使用配置文件来展示如何在这些示例中自定义食谱。查看 配置教程 以了解更多信息。
我们许多其他内存优化功能也可以在此食谱中使用。
您可以在我们的 内存优化概述 中了解有关我们所有内存优化功能的更多信息。
有兴趣了解此食谱的实际应用?查看我们的一些教程,展示如何使用它。