
手把手带你实战transformers
文章平均质量分 87
记录B站up主“你可是处女座啊”的学习视频笔记
笨笨sg
NEU-CS
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
4.1 低精度训练与大模型下载
之前我们节约显存占用的优化手段都是针对降低训练时的显存占用,那么如何降低模型本身的显存占用呢?这就需要涉及低精度问题。原创 2024-10-17 15:19:47 · 400 阅读 · 0 评论 -
5.1 分布式训练与环境配置
分为上下2个数据流通通路,因此为2路数据并行;分为4个阶段,每个阶段分设8层,因此为4路流水并行;阶段内部每层又分设4种不同颜色的权重,因此为4路张量并行。因此一共需要2*4*4=32张卡。原创 2024-10-19 13:56:44 · 375 阅读 · 0 评论 -
4.5 量化与8bit模型训练(以LLaMA2为例)
一个示例:可以发现,上述示例中最后得到的结果和原始数据存在较大的误差,那么主要原因在哪呢?存在离群值。原创 2024-10-18 19:02:12 · 1329 阅读 · 0 评论 -
4.2 半精度训练与LLaMA2训练实战+4.3 LLaMA2训练细节补充
目录1 FP32和FP16:1.1 FP32 (单精度浮点数)1.2 FP16 (半精度浮点数)1.3 FP32 和 FP16 的对比2 如何启用半精度训练:3 代码实战演练(基于LlaMA2): 3.1 导包3.2 加载数据集3.3 数据集处理3.4 创建模型3.4.1 配置文件3.4.2 构建模型3.5 配置训练参数3.6 创建训练器3.7 模型训练3.8 模型推理3.9 细节总结FP32(32-bit floating point)和FP16(16-bit floating point)是计算机处理原创 2024-10-18 12:05:54 · 941 阅读 · 0 评论 -
4.4 半精度训练与ChatGLM3训练实战
目录1 GLM模型:2 ChatGLM:3 查看数据标准输入格式:4 代码实战演练:4.1 导包4.2 加载数据集4.3 数据集处理4.4 创建模型4.4.1 配置文件4.4.2 构建模型4.5 配置训练参数4.6 创建训练器4.7 模型训练4.8 模型推理4.9 细节总结GLM 从输入文本中随机挖掉一些连续的词语,然后训练模型按照一定的顺序逐个恢复这些词语。这种方法结合了自编码和自回归两种预训练方式的优点。GLM 还有两个改进点,一个是打乱空白区域的预测顺序,另一个是使用二维位置编码。实验表明,GLM 在原创 2024-10-18 17:07:52 · 830 阅读 · 0 评论 -
3.7 PEFT 进阶操作
nn.ReLU(),net10.weight0.bias2.weight2.biasnn.ReLU(),net20.weight0.bias2.weight2.bias本节中,我们为2个适配器分别命名为"loraA"和"loraB",这允许我们在同一个主模型中加载多个适配器,并通过适配器名称(激活)在推理时选择使用哪个适配器。原创 2024-10-16 11:29:08 · 865 阅读 · 0 评论 -
4.6 4bit量化与QLoRA模型训练
bnb_4bit_compute_dtype=torch.bfloat16:电脑的卡较好情况下可以使用bfloat16,不太好就可以使用FP16,FP16有时候会出现一些溢出的问题。bnb_4bit_use_double_quant=True:这个参数启用了。optim="paged_adamw_32bit":使用32位分页优化器。bnb_4bit_quant_type="nf4":指定了使用。QLoRA 的核心思想是在大型语言模型的微调过程中,采用。来压缩模型的权重,从而减少显存的占用,并使用。原创 2024-10-18 19:37:23 · 1628 阅读 · 0 评论 -
2.11 实战演练之文本摘要(GLM)
目录1 前缀语言模型(以GLM为例)2 基于GLM的文本摘要代码实战2.1 导包2.2 加载数据集2.3 数据集处理2.4 创建模型2.5 配置训练参数2.6 创建训练器2.7 模型训练2.8 模型推理GLM 从输入文本中随机挖掉一些连续的词语,然后训练模型按照一定的顺序逐个恢复这些词语。这种方法结合了自编码和自回归两种预训练方式的优点。GLM 还有两个改进点,一个是打乱空白区域的预测顺序,另一个是使用二维位置编码。实验表明,GLM 在参数量和计算成本相同的情况下,能够在 SuperGLUE 基准测试中显著原创 2024-10-12 12:59:18 · 749 阅读 · 0 评论 -
3.5 Lora 原理与实战
通过将权重矩阵的变化部分拆分成两个低秩矩阵 AAA 和 BBB,LoRA 极大地减少了需要微调的参数量。即使在原始权重矩阵非常大的情况下,LoRA 也能通过训练少量的参数高效地进行模型微调。假设我们有一个大型模型的一层权重矩阵 W,维度为 768×768。它的核心思想是将模型中的权重矩阵分解为低秩矩阵的形式,通过这种方式减少参数数量,同时保持模型的能力。A 和 B来近似这个权重矩阵的变化 ΔW,从而只需要训练较少的参数。权重与原始模型的权重合并,最终得到一个完整的模型,并卸载不再需要的。原创 2024-10-15 22:52:43 · 1478 阅读 · 0 评论 -
2.12 实战演练之生成式对话机器人(Bloom)
通过指令微调,NLP模型变得更加灵活和智能,能够更好地理解上下文和任务需求,从而为各种应用场景提供更自然、更直观的解决方案。原创 2024-10-14 13:38:04 · 1032 阅读 · 0 评论 -
3.3 P-Tuning 原理与实战
在上个章节中,我们发现hard在该任务|模型上的表现优于soft,那么soft就真的一无是处么?如何对其进行优化呢,便是今天我们要讲的内容。在Prompt-Tuning的soft方法中,仅仅对Prompt进行一个Embedding,为了改善其效果,P-Tuning通常会将。这一策略的目的是利用 LSTM 或 MLP 的强大建模能力,以更好地生成和调整提示,从而提高模型在特定任务上的性能。加入到提示嵌入的处理过程中。原创 2024-10-15 15:24:40 · 486 阅读 · 0 评论 -
3.4 Prefix-Tuning 原理与实战
相当于微调后会训出一个固定的前缀向量。推理的时候输入的token向量化后会和这个前缀向量拼起来,再进行后面的qkv操作,模型的结构和参数都没有变,只是输入变了;注意只是将prompt vectors加在K、V上,Q、K、V的维度是一样的,但是seq_len不一定要一样。时,模型将会在输入的前缀嵌入上应用一个线性变换(通常是一个全连接层),使得前缀向量可以映射到与主模型输入相同的特征空间中。一般来讲,Prefix-Tuning包含这个,P-Tuning不包含这个。原创 2024-10-15 20:06:03 · 1015 阅读 · 0 评论 -
3.2 Prompt-Tuning原理与实战
这块大体上我们沿用之前的代码,需要注意的是,Prompt Tuning微调是要在训练数据前加入一小段Prompt,但是这并不意味着我们要在数据处理时加入,只需要在创建模型时予以修改即可。可以看到采用硬提示方式即使用于训练的参数量非常小,但是训练过程中loss降低地也还可以,至少可以说在这个模型|任务上会比soft的效果要好。如何对其进行优化呢?这个我们将在下个章节中展开讨论。可以看到采用软提示方式虽然用于训练的参数量非常小,但是训练过程中loss降低地很缓慢,可能需要训练很多轮才有一个不错的效果。原创 2024-10-15 14:43:06 · 1416 阅读 · 0 评论 -
3.6 IA3 原理与实战
是一种参数高效微调方法,旨在通过调整特定注意力层的缩放参数来实现模型的微调。原创 2024-10-15 23:25:19 · 1022 阅读 · 0 评论 -
3.1 参数高效微调与BitFit实战
Additive: 通过添加额外的可训练模块,适应新任务。Selective: 选择性微调模型中的一部分参数。Adapters: 插入小型模块,仅微调这些模块。: 通过可学习的提示向量调整模型输入,适应任务。: 对模型参数进行低维度分解,微调低维部分。原创 2024-10-14 21:39:33 · 1655 阅读 · 0 评论 -
2.6 实战演练之文本相似度(上)
若仍然使用二分类方法,假如我们得到A和B、C都是相似的,但这样子的后果就是无法判断B与C哪个与A更相似。因此我们可以使用回归方法,得到A和集合{B,C,D}中每个句子的相似性得分,然后取最大值即可。通过得到A和B的相似性得分score(我们训练的标签就是0或1,拟合的就是这个值,所以就不用再过sigmod了,因此score可能会超过1,范围并不在(0,1)之间),然后与阈值作比较得到标签。使用回归方法,label要由字符串类型强制转换为float类型,因为最后得到的要是一个浮点数表示分数。原创 2024-10-10 17:07:02 · 570 阅读 · 0 评论 -
2.7 实战演练之文本相似度(下)
向量匹配策略是一种用于计算文本相似度的方法,它通过将文本转化为向量表示,然后使用数学方法(如余弦相似度、欧氏距离等)来比较这些向量,从而评估文本之间的相似度。首先把候选集合中所有句子的向量表示拿到并存储,当新的用户问题A来时,计算相似度时只需重新计算一次可变文本A的向量表示,然后跑一下模型匹配即可,显著提高了效率。按照之前的处理策略,需要合并为句子对(不同于之前的简单合并为一个句子),并按照CosineEmbeddingLoss的定义对标签进行处理。这个问题,如果仍然采用交互策略会导致效率低下的问题。原创 2024-10-10 18:10:50 · 1102 阅读 · 0 评论 -
2.5 实战演练之多项选择
不同于之前的机器阅读理解任务是“要从文本中总结答案”,多项选择任务的本质是“给定一个或多个文档,以及一个问题Q和对应的多个答案候选项,要求从候选项中输出一个答案”。例子:不再需要像机器阅读理解任务一样定义起始位置和结束位置,本质是一个分类任务。可以看到模型名称为BertForMultipleChoice,我们只需要Crtl点击AutoModelForMultipleChoice,然后在上方路径中选择models\bert\modeling_bert.py即可查看源码。原创 2024-10-10 15:39:10 · 1216 阅读 · 0 评论 -
2.9 实战演练之预训练模型
预训练是机器学习中的一种技术,通常用于自然语言处理(NLP)、计算机视觉等领域。它指的是在大型通用数据集上训练一个模型,使其学习到广泛的知识和模式,然后再通过**微调(fine-tuning)**来适应具体任务。预训练的目标是让模型在开始特定任务的学习之前,已经具备对数据的基本理解,从而减少对大量任务特定标注数据的依赖。前缀语言模型是一种有条件的生成模型,能够根据给定的前缀来生成符合上下文的文本。它在很多自然语言生成任务中有着广泛的应用,尤其是在对话生成、文本补全和机器翻译等领域。原创 2024-10-11 16:18:55 · 840 阅读 · 0 评论 -
2.8 实战演练之检索机器人
问题-问题(QQ)匹配策略是基于检索的对话系统中一种常用的流程。这个流程的核心思路是,将用户输入的问题(Q1)与知识库中的问题(Q2)进行匹配,找到与Q1最相似的问题Q2,然后返回Q2对应的答案作为回答。流程详细描述:输入问题 Q1用户输入一个问题,系统首先对这个问题进行预处理,通常是将问题转换为向量表示。问题库中的候选问题集 {Q2, Q3, Q4, ...}系统内置一个知识库,里面包含了大量的问题和答案对 {Q2, A2}, {Q3, A3}, {Q4, A4}, …。原创 2024-10-11 15:00:06 · 1131 阅读 · 0 评论 -
2.10 实战演练之文本摘要(T5)
ROUGE-1 是通过计算生成摘要和参考摘要之间的单个词(unigrams)重叠来评估摘要质量。ROUGE-2 通过计算生成摘要和参考摘要之间的二元词组(bigrams)重叠来评估摘要质量。ROUGE-L基于最长公共子序列(LCS)来计算生成摘要和参考摘要之间的相似性。原创 2024-10-11 17:27:19 · 606 阅读 · 0 评论 -
2.3+2.4 实战演练之机器阅读理解(上)(下)
在bert中,cls是起始符,而sep是分隔符。在3中我们介绍了基于截断策略的机器阅读理解任务实现,有些部分并不完整。(比如没有评估函数,没有使用测试集测试,仅仅简单采用了截断策略)那么接下来在本节中我们将学习基于滑动窗口策略的机器阅读理解任务实现。如上图所示,这是一种简单的无重叠滑动窗口,有一个问题就是如果我们的答案是9-12,那么这个其实最后得到的答案就并不完整。在实际中,我们会采用如下图所示的带有重叠overflow的滑动窗口比如我们的最后答案在第一条中起始位置是2,结束位置是7;原创 2023-12-05 23:04:00 · 1564 阅读 · 4 评论 -
2.1 基于Transformers的NLP解决方案
up主的,这些策略还是非常有效的,时间换空间当然还有其他的高效微调策略,敬请期待下个章节最后的最后,我们在跑一个较大模型的时候,如果自由组合上述策略还不行(buff叠满了),那就只能寻求类似功能的小模型,做一个取舍。原创 2023-12-03 21:17:53 · 1405 阅读 · 0 评论 -
1.8 基础组件之Trainer
目录Trainer简介:TrainingArguments + Trainers代码优化:说明文档位于transformers里面:TrainingArguments里边有很多参数,需要我们按照具体的任务进行相应的设计。 可以通过控制台进入tensorbord,在TensorBoard界面中,我们可以查看和分析训练过程中的各种指标、损失曲线、模型结构图等信息。可以根据需要在代码中使用TensorBoard回调来记录这些信息,并在训练期间将其写入TensorBoard日志文件中。然后,通过启动TensorBo原创 2023-12-01 14:57:10 · 395 阅读 · 0 评论 -
1.7 基础组件之Evalaute
在Hugging Face的库中,Evaluate是一个用于评估模型性能的类。它提供了一些功能来计算模型在给定数据集上的指标,如准确率、F1值、损失等。Evaluate类通常与Trainer类一起使用,Trainer是库中用于训练和评估模型的高级API。在训练过程中,可以使用Trainer的evaluate()方法来调用Evaluate类进行评估。使用Evaluatemodel:要评估的模型对象。:包含评估数据的对象。:一个可选的回调函数,用于计算指标。原创 2023-12-01 13:57:44 · 292 阅读 · 0 评论 -
1.6 基础组件之Datasets
和模型的加载方式类似,也是直接复制数据集名称就可以加载了。是一个用于处理数据批次的类,它用于将模型的输入数据组合成适合训练或评估的批次。在自然语言处理任务中,输入数据通常是以样本的形式存在,每个样本包含输入文本和对应的标签或目标值。类提供了一些常见的数据处理功能,例如将样本的输入文本进行填充(padding)以保证批次中的输入序列长度一致,以及将标签或目标值进行适当的处理。它可以根据具体任务的需求进行自定义配置,以满足特定的数据处理需求。在Hugging Face的库中,原创 2023-12-01 00:15:56 · 485 阅读 · 0 评论 -
2.2 实战演练之命名实体识别NER
目录1 命名实体识别任务介绍2 基于Transfromers的解决方案2.1 模型结构:2.2 评估函数:3 代码实战演练1)导包:2)加载数据集3)数据预处理4)创建模型5)常见评估函数6)配置训练参数 7)创建训练器 8)模型训练 9)模型预测4 NER实战过程中需要注意的7点: 使用不同的model head用于解决不同的任务,如果说我们需要对每一个词(token)去做一个标签预测的话,这个时候我们就需要用到xxxForTokenClassification可以看到数据集已经划分好了训练集、验证集和测原创 2023-12-04 13:39:01 · 1921 阅读 · 2 评论 -
1.1 基础知识与环境安装
安装教程先安装Anaconda或者miniconda然后创建虚拟环境在虚拟环境中安装pypi、pytorch(包括torchvision、torchaudio)在虚拟环境中下载transformers和jupyterlab等一些需要用到的库pytorch安装教程PyTorch中torch、torchvision、torchaudio、torchtext版本对应关系。原创 2023-11-27 23:53:16 · 584 阅读 · 0 评论 -
1.2 基础组件之Pipeline
可以通过“from transformers.pipelines import SUPPORTED_TASKS”进行查看。原创 2023-11-28 00:37:46 · 1787 阅读 · 0 评论 -
1.3 基础组件之Tokenizer
传统的数据预处理方法主要包含以下步骤。Tokenizer的出现将这些步骤都封装起来,我们可以直接使用Tokenizer,而不需要再四处调包。原创 2023-11-28 18:04:41 · 1615 阅读 · 0 评论 -
1.4 基础组件之Model(上)基本使用
目录1 Model简介:2 Model基本使用方法:2.1 模型下载:2.1.1 在线下载: 2.1.2 离线下载:2.1.3 git clone下载:2.2 模型加载参数:2.2 模型调用:2.2.1 输入进tokenizer:2.2.2 不带model head的模型调用:2.2.3 带model head的模型调用:通过浏览器下载后,放到项目文件夹下进行离线下载: 第一个指令是下载这个模型所有的文件,由于我们只需要pytorch文件,因此可以使用第二条指令。可以通过model.config查看模型的配原创 2023-11-29 15:25:51 · 1710 阅读 · 1 评论 -
手把手带你实战Transformers(学习笔记)
B站链接:手把手带你实战HuggingFace Transformers章节篇章 小节 主要内容 一:基础入门篇 1.1 基础知识与环境安装 主要介绍自然语言处理的常见任务、发展阶段、Transformers的几个主要库、环境安装以及两个极简示例 1.2 基础组件之Pipeline 主要介绍Pipeline支持的任务类型、如何创建、如何确定参数以及其背后的封装内部的原理 1.3 基础组件之Tokenizer 主要介绍Tokenizer的使原创 2023-11-28 18:06:10 · 1103 阅读 · 0 评论 -
1.5 基础组件之Model(下)BERT文本分类
可以看到只执行这个操作后,我们得到的labels确实是一个张量tensor了,方便我们后续在PyTorch模型中直接进行使用,但是reviews确实仍然是原始的形式,因此我们要想办法对reviews进行处理。为了更方便地对数据进行批量处理和迭代,我们需要创建DataLoader,它可以将数据集封装成一个可迭代的对象,使得我们可以按批次加载和处理数据。数据清洗和处理:Pandas提供了广泛的数据清洗和处理功能,包括数据过滤、排序、删除重复值、填充缺失值、数据转换、重塑和合并等操作。因此我们要先引入这个。原创 2023-11-29 16:56:16 · 1029 阅读 · 2 评论