分布式量化感知训练 (QAT)¶
QAT 允许在推理时利用量化的节省内存的优化,而不会显著 降低模型性能。在 torchtune 中,我们使用 torchao 来实现 QAT。 这是通过在微调期间模拟量化数字来实现的。虽然这可能会引入内存和 计算开销在训练期间,我们的测试发现 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
将来,我们计划支持不同的量化策略。现在,请注意,您至少需要使用 Int8DynActInt4WeightQATQuantizer 策略。通常,使用 QAT 训练、量化和评估模型的管道是:torch>=2.4.0
使用上述命令运行配方,或按照教程运行。默认情况下,这将使用 .
qat_distributed
Int8DynActInt4WeightQATQuantizer
这将生成原始数据类型的未量化模型。要获得实际的量化模型,请在配置中指定相同的量化器时遵循此 API,例如
tune run quantize
# QAT specific args quantizer: _component_: torchtune.training.quantization.Int8DynActInt4WeightQATQuantizer groupsize: 256
通过指定相应的训练后量化器,使用您的量化模型评估或运行推理:
quantizer: _component_: torchtune.training.quantization.Int8DynActInt4WeightQuantizer groupsize: 256
注意
在这些示例中,我们将使用配置文件来展示如何自定义配方。查看 configs 教程以了解更多信息。
我们的许多其他内存优化功能也可以在此配方中使用:
您可以在我们的内存优化概述中了解有关我们所有内存优化功能的更多信息。
有兴趣查看此示例的实际效果吗?查看我们的一些教程,展示如何使用它: