分布式量化感知训练 (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
注意
我们正在使用配置文件来展示如何在这些示例中自定义配方。查看 配置教程以了解更多信息。
我们许多其他的内存优化功能也可以在这个配方中使用:
您可以在我们的内存优化概述中了解更多关于我们所有内存优化功能的信息。
有兴趣看看这个配方如何实际应用吗?查看我们的一些教程,展示它的使用方法: