LLaMa使用torchtune

2025-06-24 12:14:54 64

使用torchtune。LLaMa-3.1 8B。蒸馏为1B。

GiantPandaCV GiantPandaCV 。2025年01月06日 18:35。 。四川。

来源:https://pytorch.org/blog/llama-into-torchtune/ by Linda Wang, Evan Smothers, Kartikay Khandelwal 翻译可以帮助读者了解如何蒸馏LLM。综上所述,,本博客介绍了如何使用torchtune将Llama 3.1 8B模型蒸馏1B模型,通过知识蒸馏技术提高指令跟踪任务中小模型的性能。本文详细阐述了知识蒸馏的工作原理,并展示了torchtune中的实现过程,包括模型下载、教师模型微调和蒸馏步骤。另外,博客上还展示了4个消融实验,讨论了不同配置和超参数对结果的影响,最后,我谈到了我能继续做的事情。

使用。torchtune。LLAMa-3.1 8B蒸馏为1B。

在这个博客中,我们展示了一个使用torchtune的知识蒸馏配方。Llama 3.1 8B模型蒸馏Llama 3.2。案例研究1B。我们演示了训练后如何使用它。知识蒸馏(KD)。为了提高指令跟踪任务的性能,并显示用户如何使用该配方。

什么是知识蒸馏?

知识蒸馏(https://arxiv.org/pdf/1503.02531)被广泛使用。压缩技术。,它将知识从更大的(教师)模型转移到更小的(学生)模型。大型模型有更多的参数和知识容量,但这种大容量在部署时也需要更多的计算资源。知识蒸馏可以用来将大模型的知识压缩到小模型中。其基本思想是,通过学习大模型的输出,可以提高小模型的性能。

如何工作知识蒸馏?

知识是通过在迁移集上培训从教师模型转移到学生模型的。在这个过程中,学生模型被培训模仿教师模型 token 等级概率分布。假设教师模型的分布类似于迁移数据集。下图是知识蒸馏工作原理的简化表示。

图片

图1: 知识迁移图,从教师模型到学生模型。

由于LLM的知识蒸馏是一个活跃的研究领域,许多论文正在研究不同的损失函数方法,如MiniLLM(https://arxiv.org/pdf/2306.08543)、DistiLLM(https://arxiv.org/pdf/2402.03898)、AKL(https://arxiv.org/pdf/2404.02657,Generalized KD(https://arxiv.org/pdf/2306.13649)。在本案例研究中,我们将重点关注标准交叉熵(CE)前Kullback损失-Leibler(KL)散度损失(https://en.wikipedia.org/wiki/Kullback–Leibler_divergence)作为基线。前KL散度的目标是通过强制学生模型的分布与教师模型的所有分布对齐来减少差异。

为什么知识蒸馏有用?

知识蒸馏的概念是,一个较小的模型可以通过使用教师模型的输出作为额外信号来获得更好的性能,而不是从零开始训练或监督微调。例如,Llama 3.2轻量级。1B和3B。文本模型(https://ai.meta.com/blog/llama-3-2-connect-2024-vision-edge-mobile-devices剪枝后,整合Llama 3.1 恢复性能的8B和70Blogits。此外,LLM蒸馏的研究表明,知识蒸馏方法可以优于单独使用监督微调(SFT)。

图片

表1: 与监督微调相比,知识蒸馏方法。

以下是一个简化的例子,展示了知识蒸馏和监督微调的区别。

图片

torchtune中的知识蒸馏配方。

使用torchtune,我们可以通过使用torchtune的知识蒸馏配方,轻松地将知识蒸馏应用于Llama3和其他LLM模型系列(https://github.com/pytorch/torchtune/blob/4234b78b914af2384ce034f564e219d107a96recipes/knowledge_distillation_single_device.py)实现的。该配方的目标是通过从Llama3.1-8B蒸馏知识,在Alpaca指令跟随数据集上微调Llama3.2-1B。该配方专注于培训后蒸馏,假设教师和学生模型已经完成。

首先,我们需要下载模型权重。为了与其他torchtune的微调配置保持一致,我们将以llama3.1-8B的指令调优模型为教师模型,以llama3.2-1B为学生模型。

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

为使教师模型的分布与Alpaca数据集相似,我们将使用LoRA来微调教师模型。基于我们在下一节展示的实验,我们发现当教师模型在目标数据集上进行微调时,知识蒸馏效果会更好。基于我们在下一节展示的实验,我们发现当教师模型在目标数据集上进行微调时,知识蒸馏效果会更好。

tune run lora_finetune_single_device --config lllama3_1/8B_lora_single_device。

最后,我们可以在单个GPU上运行以下命令,将微调后的8B模型蒸馏成1B模型。在本案例研究中,我们使用了A100 80GB GPU。我们还有一个分布式配方(https://github.com/pytorch/torchtune/blob/09c2619f713e771b4159f7b83bac8971c7053bd3/recipes/knowledge_distillation_distributed.py)用于在多个设备上运行。

tune run knowledge_distillation_single_device --config lllama3_2/knowledge_distillation_single_device。

消融研究。

在本节中,我们将展示如何改变配置和超参数来影响性能。默认情况下,我们的配置采用Lora微调8B教师模型、下载1B学生模型、3e-4学习率和0.5KD损失率。我们在alpaca__cleaned_dataset(https://pytorch.org/torchtune/main/generated/torchtune.datasets.alpaca_cleaned_dataset.html#torchtune.datasets.alpaca_cleaned_dataset)通过EleutherAI进行微调 LM评估工具(https://github.com/EleutherAI/lm-evaluation-harness/tree/main)truthfulqa_mc2、hellaswag和commonsense在QA任务中评估了模型。让我们来看看以下因素的影响:。

使用微调教师模型。

配置中的默认设置采用微调后的教师模型。现在,让我们来看看不先微调教师模型的效果。

从损失的角度来看,使用基线8B作为教师模型会比使用微调后的教师模型造成更高的损失。KD损失也保持相对恒定,这表明教师模型应与迁移数据集分布相同。

图片

图2: (从左到右)KD损失、交叉熵分类损失、总损失:KD损失与分类损失的均匀组合。

在我们的基准测试中,我们可以看到1B模型的监督微调比基线1B模型获得了更好的精度。通过使用微调后的8B教师模型,我们在truthfulqa上看到了相当大的结果,并在hellaswag和commonsense上得到了改进。当使用基线8B作为教师模型时,我们可以看到所有指标都得到了改进,但低于其它配置。

图片

表2: 将基线与微调后的8B作为教师模型进行比较。

使用微调学生模型。

在这些实验中,我们研究了KD在学生模型微调时的效果。我们分析了使用基线和微调后8B和1B模型的不同组合。

根据损失图,无论学生模型是否通过微调,使用微调后的教师模型都会导致更低的损失。有趣的是,当使用微调学生模型时,分类损失开始增加。

图片

图3: 比较不同教师和学生模型的初始损失。

使用微调学生模型可以进一步提高truthfulqa的准确性,但hellaswag和commonsense上的准确性有所下降。在helllaswag和commonsense数据集中,使用微调后的教师模型和基线学生模型取得了最佳效果。基于这些发现,最佳配置将根据您想要优化的评估数据集和指标进行更改。

图片

表3: 将基线与微调后的师生模型进行比较。

超参数调优:学习率。

默认情况下,配方使用3e-4的学习率。在这些实验中,我们将学习率从最高1e-3调整到最低1e-5。

根据损失图,所有学习率都产生了类似的损失,除了1e-5会导致更高的KD损失和分类损失。

图片

图4: 比较不同学习率的损失。

根据我们的基准测试,最佳学习率将根据您想要优化的评估指标和任务而变化。

图片

表4: 调整学习率的效果。

超参数调优:KD比率。

默认情况下,KD比设置为0.5,可均匀加权分类损失和KD损失。在这些实验中,我们研究了不同KD比的效果,其中0表示只使用分类损失,1表示只使用KD损失。

一般而言,基准测试结果表明,对于这些任务和指标,较高的KD比率表现略好。

图片

表5: 调整KD比的效果。

展望未来。

本文介绍了如何通过torchtune通过torchtune将Llamama传递给KL的损失 3.1 8B和Llama 3.2 蒸馏研究1Blogits。为了进一步提高性能,为蒸馏方法提供更大的灵活性,未来还有许多方向可以探索。

  • 扩展KD损失函数。使用KD配方前向KL散度损失。但如上所述,将学生分布对齐到整个教师分布可能并不有效。Minillmm等多篇论文(https://arxiv.org/pdf/2306.08543)、DistiLLM(https://arxiv.org/pdf/2402.0388)和Generalized KD(https://arxiv.org/pdf/2306.13649),引入新的KD损失和策略来解决这一限制,并已证明交叉熵和前向KL散度损失优于标准。例如,MiniLLM使用反向KL散度来防止学生过度估计教师的低概率区域。Distilm引入了偏差KL损失和自适应训练策略。

  • 使用跨分词器蒸馏。目前的配方要求教师和学生使用相同的分词器,这限制了跨不同LLM家庭的蒸馏能力。有一些关于跨分词器方法的研究(如Universal) Logit Distillation(https://arxiv.org/pdf/2402.12030)值得探索。

  • 将蒸馏扩展到多模态LLM和编码器模型。KD配方的自然扩展是扩展到多模态LLM。类似于部署更高效的LLM,还需要部署更小更高效的多模态LLM。此外,LLM作为编码器模型的应用已经显示在一些工作中(如LLM2Vecc)(https://arxiv.org/pdf/2404.05961))。蒸馏从LLM编码器到更小的编码器模型也可能是一个有前途的方向。

本文地址:http://cdn.baiduyun.im/video/www.bfzx365.com/video/14c45499531.html
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

热门标签

全站热门

C语言基础之【内存管理】

Docker(十五)玩微服务实战系列

python文件操作常用方法(读写txt、xlsx、CSV、和json文件)

SpringBoot导出Excel的四种方式

python做手机app自动测试

Android14适合编译和坑总结

与 D3.js 的对比:ECharts 前端可视化的优缺点

使用Docker构建RStudio实战教程

友情链接