首页 > 其他分享 >LLM大模型新手训练指南

LLM大模型新手训练指南

时间:2024-07-18 16:58:51浏览次数:12  
标签:指南 训练 AI 模型 微调 学习 LLM 新手

lmg-train.png


基础

用于语言建模的最常见架构是 Transformer 架构,由 Vaswani 等人在著名论文《Attention Is All You Need》中提出。我们不会在这里讨论该架构的具体细节,因为我们必须讨论导致并促成其创建的所有旧技术。Transformer 使我们能够训练具有惊人推理能力的大型语言模型 (LLM),同时保持架构足够简单,以便机器学习新手可以开始训练/使用它们。

用于训练和构建 Transformer 模型的最常见语言是 Python,这是一种非常高级(即远离原始机器代码)的语言。这使得外行人很容易熟悉该过程。最流行的库是 HuggingFace Transformers,它是当今几乎每个 LLM 培训师的支柱。

本质上,LLM 是一种有损文本压缩形式。我们创建具有随机值和参数的张量(多维矩阵),然后向其输入大量文本数据(以 TB 为单位!),以便它们能够学习所有数据之间的关系并识别它们之间的模式。所有这些模式都存储在我们随机初始化为概率的张量中 - 模型会学习一个特定单词后面跟着另一个单词的可能性,依此类推。LLM 的一个非常高级的定义是“将一种语言(例如英语)的概率分布压缩成一组矩阵。”

例如,如果你在 LLM 中输入“How are”,它会计算下一个单词出现的概率。例如,它可能会为“you?”分配 60% 的概率,“things”分配 20% 的概率,等等。

上面讨论的随机初始化在很大程度上不适用于我们,因为它非常昂贵(我们说的是大型模型的数百万美元)。本文将介绍如何微调模型 - 即采用预先训练的模型并为其提供少量数据(通常为几 MB),以使其行为与您所想的任何任务保持一致。例如,如果您想要一个编码助手模型,您可以根据编码示例对模型进行微调,等等。

Transformer 架构

了解您正在处理的内容始终是一种很好的做法,尽管对于微调目的而言这并不是绝对必要的,因为您将运行调用 Transformers 库的类的脚本。

当然,最好的来源是《Attention Is All You Need》这篇论文。它介绍了 Transformer 架构,是一篇非常重要的论文。不过,你可能需要先阅读这些,因为作者假设你已经对神经网络有了基本的了解。我建议按顺序阅读这些:

论文太难读?

你并不孤单。学者们往往会故意混淆他们的论文。你可以随时查找每个主题的博客文章或文章,它们往往会提供易于理解的解释。一个很好的资源是 HuggingFace 博客文章。


训练基础知识

训练 LLM 基本上有三 (3) 种方法:预训练、微调和 LoRA/Q-LoRA。

预训练

预训练涉及几个步骤。首先,收集大量文本数据集(通常以 TB 为单位)。接下来,选择或创建专门用于当前任务的模型架构。此外,训练标记器以适当处理数据,确保它能够有效地对文本进行编码和解码。然后使用标记器的词汇表对数据集进行预处理,将原始文本转换为适合训练模型的格式。此步骤涉及将标记映射到其相应的 ID,并合并任何必要的特殊标记或注意掩码。数据集预处理后,即可用于预训练阶段。

在预训练期间,模型会利用大量数据来学习预测句子中的下一个单词或填补缺失的单词。此过程涉及通过迭代训练程序优化模型的参数,以最大限度地提高根据上下文生成正确单词或单词序列的可能性。

为实现此目的,预训练阶段通常采用自监督学习技术的变体。向模型提供部分掩蔽的输入序列,其中某些标记被故意隐藏,并且模型必须根据周围上下文预测那些缺失的标记。通过以这种方式对大量数据进行训练,模型逐渐对语言模式、语法和语义关系有了丰富的理解。这种特定方法用于掩蔽语言建模。然而,当今最常用的方法是因果语言建模。与掩蔽语言建模(其中某些标记被掩蔽并且模型预测那些缺失的标记)不同,因果语言建模侧重于根据前面的上下文预测句子中的下一个单词

初始预训练阶段旨在捕捉一般语言知识,使模型成为熟练的语言编码器。但毫不奇怪,它缺乏有关特定任务或领域的具体知识。为了弥补这一差距,预训练之后是后续的微调阶段

微调

在初始预训练阶段之后,模型会学习一般的语言知识,然后通过微调我们可以专门化模型的功能,并在更窄、特定于任务的数据集上优化其性能

微调过程涉及几个关键步骤。首先,收集特定于任务的数据集,其中包含与所需任务相关的标记示例。例如,如果任务是指令调整,则收集指令-响应对的数据集。微调数据集的大小明显小于通常用于预训练的数据集。

接下来,使用之前学习到的参数初始化预训练模型。然后在特定任务数据集上训练模型,优化其参数以最小化特定任务的损失函数(即模型与期望结果的“偏差”程度)。

在微调过程中,使用基于梯度的优化算法(例如随机梯度下降 (SGD)Adam )调整预训练模型的参数。通过在模型层中反向传播损失来计算梯度,从而使模型能够从错误中学习并相应地更新其参数。

为了增强微调过程,可以采用其他技术,例如学习率调度、正则化方法(如dropout权重衰减)或提前停止以防止过度拟合。这些技术有助于优化模型的泛化能力,并防止其过于紧密地记忆训练数据集。

低秩自适应(LoRA)

微调的计算成本很高,需要数百 GB 的 VRAM 来训练数十亿参数的模型。为了解决这个特定问题,提出了一种新方法:低秩自适应。与使用 Adam 对 OPT-175B 进行微调相比,LoRA 可以将可训练参数的数量减少 10,000 倍,并将 GPU 内存需求减少 3 倍以上。请参阅论文《LoRA:大型语言模型的低秩自适应》和博客文章《HuggingFace PEFT:在低资源硬件上对十亿规模模型进行参数高效微调》

对于普通消费者来说,将内存需求减少 3 倍仍然是不可行的。幸运的是,引入了一种新的 LoRA 训练方法:量化低秩自适应 (QLoRA)。它利用 bitsandbytes 库对语言模型进行即时和近乎无损的量化,并将其应用于 LoRA 训练过程。这大大减少了内存需求 - 使得在 2 个 NVIDIA RTX 3090 上训练多达 700 亿个参数的模型成为可能!相比之下,通常需要超过 16 个 A100-80GB GPU 来微调该大小的模型;相关成本将是巨大的。

本系列的下一部分将重点介绍微调和 LoRA/QLoRA 方法。


微调

如前所述,微调的成本可能很高,具体取决于您选择的模型大小。您通常需要至少 6B/7B 个参数。我们将介绍一些获取训练计算的选项。

如何系统的去学习大模型LLM ?

作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。

但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的 AI大模型资料 包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来

标签:指南,训练,AI,模型,微调,学习,LLM,新手
From: https://blog.csdn.net/2401_86188739/article/details/140526834

相关文章

  • 【LLM大模型】《开源大模型食用指南》全网发布,轻松助你速通llm大模型!
    前言《开源大模型食用指南》是一个围绕开源大模型、针对国内初学者、基于AutoDL平台的中国宝宝专属大模型教程,针对各类开源大模型提供包括环境配置、本地部署、高效微调等技能在内的全流程指导,简化开源大模型的部署、使用和应用流程,让更多的普通学生、研究者更好地使用......
  • Vim 高手指南:Linux 环境下的高级使用技巧
    Vim高手指南:Linux环境下的高级使用技巧前言Vim是一个功能强大的文本编辑器,广泛应用于Linux系统以及各种编程环境中。作为一个Vim高级用户和Linux系统管理员,你将在这里学到如何充分利用Vim的高级功能,提升你的工作效率。第1章:Vim编辑器的基本概念和模式1.1Vi......
  • Memcached故障排查与恢复策略指南!
    欢迎来到Memcached故障排查与恢复策略指南!在这里,你将学习到如何确保你的Memcached服务的高可用性和业务连续性。无论你是刚接触Memcached的新手,还是经验丰富的系统管理员,本指南都将为你提供全面的故障排查与恢复策略。第1章:Memcached的基本原理和架构1.1Memcached简介M......
  • OpenStack安装指南
    目录前置条件方法一:1.准备环境1.1更新系统包1.2安装依赖包1.3创建一个非root用户并切换到该用户2.下载DevStack2.1下载DevStack代码2.2创建local.conf文件3.确保必要的目录存在4.安装OpenStack4.1执行安装脚本5.验证安装5.1访问OpenStackDashboard......
  • java八股复习指南-计网篇
    网络分层模型osi七层模型tcp-ip四层模型应用层传输层网络层网络接口层与osi七层模型对应为:应用层主要提供两个终端设备上应用之间的消息交换的服务。它定义了消息交换的格式。常见协议有:结合常见的协议,可以这样理解应用层:应用层就是专门为特定的应用之间的通信提......
  • 探索Nuxt.js的useFetch:高效数据获取与处理指南
    title:探索Nuxt.js的useFetch:高效数据获取与处理指南date:2024/7/15updated:2024/7/15author:cmdragonexcerpt:摘要:“探索Nuxt.js的useFetch:高效数据获取与处理指南”详述了Nuxt.js中useFetch函数的使用,包括基本用法、动态参数获取、拦截器使用,及参数详解。文章......
  • 独立站运营常用工具,新手必备
    新手在独立站的运营上,可能没有头绪,不知道自己网站存在什么问题,该如何进行优化,这边推荐一些新手必备工具,可以帮助你在独立站运营的过程中事半功倍,轻松超越同行。1、SEO工具要提升独立站的谷歌搜索排名,被更多用户看到,seo优化是必须要做的,谷歌自身就提供一些免费的seo工具,比如G......
  • 《DNK210使用指南 -CanMV版 V1.0》第十三章 蜂鸣器实验
    第十三章蜂鸣器实验1)实验平台:正点原子DNK210开发板2)章节摘自【正点原子】DNK210使用指南-CanMV版V1.03)购买链接:https://detail.tmall.com/item.htm?&id=7828013987504)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/k210/ATK-DNK210.html5)正点原子......
  • 【2024版】超详细Python+Pycharm安装保姆级教程,Python+Pycharm环境配置和使用指南,看完
    目录一、Python开发环境配置1.Python下载与安装二、PyCharm安装+运行测试+汉化1.PyCharm下载及安装2.解释器配置及项目测试3.PyCharm汉化本文将从Python解释器安装到Pycharm专业版安装和配置汉化等使用都进行了详细介绍,希望能够帮助到大家。Python解释器&Pycharm安......
  • 高质量C/C++编程指南总结(十)—— const 用法
    const的用法1)用const修饰函数的输入参数如果输入的参数采用“指针传递”,那么加const修饰可以防止意外地改动该指针,起到保护作用。如果输入参数采用“值传递”,由于函数将自动产生临时变量用于复制该参数,该输入参数本来就无需保护,所以不要加const修饰。对于非内部数据类......