大模型训练和推理

来源:大模型技术栈全览

一、NLP基础

1. Tokenizer

Tokenizer是用于将文本切分为更小的单元(token)的方法,常用于自然语言处理(NLP)和机器翻译(MT)等任务中。不同的tokenizer有不同的优缺点和适用场景:

  1. BPE(Byte Pair Encoding)是一种数据压缩方法,也可以用于生成subword词表。它的基本思想是反复合并最高频的相邻字符对,直到达到预设的词表大小或者没有更多的合并可能。BPE可以有效地减少词表的大小,同时保留一定的语义信息。BPE被OpenAI GPT-2和Facebook RoBERTa等模型采用。
    ByteBPE是BPE的一种变体,它使用字节而不是字符作为基本单位,这样可以覆盖所有的Unicode字符,而不需要考虑编码的问题。ByteBPE也可以解决一些罕见或未知字符的表示问题,但是它会增加序列的长度,从而增加模型的计算开销。ByteBPE被OpenAI GPT-3等模型采用。
  2. WordPiece是另一种生成subword词表的方法,它与BPE类似,但是它选择使得语言模型概率最大的相邻字符对进行合并,而不是最高频的。WordPiece可以更好地考虑语言模型的效果,同时也可以减少词表的大小。WordPiece被Google BERT等模型采用。
  3. UniLM(Unigram Language Model)是一种基于统计的分词方法,它可以输出带概率的多个子词分段。它的假设是所有的subword的出现都是独立的,而且subword序列由subword出现概率的乘积产生。UniLM的优点是可以生成多种可能的分词结果,从而提高模型的鲁棒性和泛化能力。UniLM被Bloomberg GPT等模型采用。
  4. SentencePiece是一种统一的分词框架,它可以支持多种分词算法,如BPE,Unigram等,也可以支持多种语言和编码。SentencePiece的优点是可以直接从原始文本中学习分词规则,而不需要预先进行分词或标准化,从而简化了分词的流程。SentencePiece被Google ALBERT等模型采用。

参考:
NLP 中的Tokenizer:BPE、BBPE、WordPiece、UniLM 理论
大模型中的分词器tokenizer:BPE、WordPiece、Unigram LM、SentencePiece
理解tokenizer之WordPiece: Subword-based tokenization algorithm

2. position encoding

position encoding方是用于给Transformer模型添加位置信息的方法。不同的position encoding方案有不同的优缺点和适用场景,以下是两种方法:

  1. Alibi(Adaptive Learnable Interpretable Bias)是一种相对位置编码方案,它通过在自注意力机制中添加可学习的偏置项,来表示不同位置之间的相对关系。Alibi的优点是可以动态地适应不同的任务和数据,同时也可以外推到比训练时更长的序列长度。Alibi被Google T5等模型采用。
  2. RoPE(Rotary Position Embedding)是一种绝对位置编码方案,它通过将位置信息编码为复数,然后与输入向量进行旋转,来表示每个位置的绝对值。RoPE的优点是可以直接地表示位置信息,同时也可以保留输入向量的原始信息。RoPE被EleutherAI GPT-Neo等模型采用。

综述:利用位置编码实现长度外推
大模型基础|位置编码|RoPE|ALiBi
ALiBi位置编码深度解析:代码实现、长度外推
混合精度下位置编码竟有大坑,LLaMA等主流开源模型纷纷中招

3. 注意力机制与transformer架构

注意力机制是一种能够有效地捕捕获序列内的长距离依赖的神经网络技术,它可以用于处理各种序列数据,如自然语言、音频、视频等。Transformer 是 Google Brain 团队于 2017 年在论文《Attention Is All You Need》中提出的一种新的神经网络架构,它完全基于自注意力机制来处理序列数据,摒弃了之前常用的循环网络结构。Transformer 主要包括编码器(Encoder)和解码器(Decoder)两部分,每部分由多个相同的层堆叠而成。每一层都包含一个自注意力子层和一个前馈神经网络子层。Transformer 在机器器翻译、文本生成、对话系统等领域取得了显显著的性能提升。

二、大模型训练

1. SFT训练

SFT是Supervised Fine Tuning的缩写,它是一种用于自然语言处理的技术,它通过对预训练的语言模型进行微调,使其适应特定任务。在大模型SFT中,使用的是大型的预训练语言模型,例如LLAMA、GPT等,这些模型具有数十亿甚至数百亿个参数,可以处理大量的文本数据。

SFT的基本思想是利用指令(instruction)来引导模型生成特定任务所需的输出。指令是一种简短的文本,用于描述任务的目标和要求,例如“翻译以下句子”、“写一首诗”等。指令可以作为模型的输入的一部分,也可以作为模型的输出的一部分,具体取决于任务的类型。SFT的优点是可以动态地适应多种不同的任务,而不需要为每个任务单独设计模型或损失函数。

SFT的训练过程如下:

  1. 首先,需要准备一个包含多种任务指令和对应输出的数据集,这个数据集可以从网上开源的数据集中获取,也可以自己构建。
  2. 然后,需要加载一个预训练好的语言模型,例如LLAMA、GPT等,这个模型可以从网上下载,也可以自己训练。
  3. 接着,需要创建一个sfttrainer的实例,传入模型、数据集、指令和输出的字段名、最大序列长度等参数,也可以传入自定义的数据整理函数、数据整合器、训练参数等。
  4. 最后,需要调用sfttrainer的train方法,开始对模型进行指令微调,训练过程中可以查看训练日志、评估结果、生成样例等。

以下是一个简单的sfttrainer的例子,它使用了huggingface的数据集库中的imdb数据集,对facebook的opt-350m模型进行了指令微调,使其可以根据指令生成影评的摘要或情感分析的结果:

from datasets import load_dataset
from trl import SFTTrainer

dataset = load_dataset("imdb", split="train")

trainer = SFTTrainer(
    "facebook/opt-350m",
    train_dataset=dataset,
    dataset_text_field="text",
    max_seq_length=512,
)
trainer.train()

大模型基础|预训练|有监督微调SFT
实践篇3:大模型有监督微调SFT(Supervised Finetuning)
GPT系列模型(1-4)调研 & 对SFT/RLHF的思考
大模型之Bloom&LLAMA----SFT(模型微调)
Supervised Fine-tuning Trainer

2. RLHF训练

RLHF是Reinforcement Learning from Human Feedback的缩写,它是一种用于对预训练的生成式语言模型进行指令微调的技术,它可以让模型根据不同的指令生成不同的内容,例如翻译、写诗、编程等。RLHF的优点是可以直接地优化人类反馈作为奖励的语言模型,使其与人类的偏好和价值观对齐。

RLHF的训练过程可以分为三个步骤:

  1. 预训练一个语言模型:这一步使用经典的预训练目标,如自回归或自编码,训练一个大型的语言模型,例如GPT-3、Llama2等,这个模型可以从网上下载,也可以自己训练。这一步可以使用额外的文本或条件对语言模型进行微调,以适应特定的任务或领域。
  2. 训练一个奖励模型:这一步使用人工标注的数据,训练一个小型的语言模型,用于评估语言模型的生成结果的质量。这个模型的输入是prompt+answer的形式,输出是一个标量的奖励值,表示人类对这个回答的满意程度。这个模型可以从头开始训练,也可以基于预训练的语言模型进行微调。
  3. 用强化学习微调语言模型:这一步使用强化学习的方法,如PPO,对预训练的语言模型进行微调,使其最大化奖励模型的输出。这一步需要同时使用语言模型、奖励模型和一个基准模型,基准模型是语言模型的一个副本,用于约束语言模型的输出不要偏离初始的分布太多,以保证生成的文本的合理性和连贯性。

详解大模型RLHF过程(配代码解读)
ChatGPT 背后的“功臣”——RLHF 技术详解
大模型入门(六)—— RLHF微调大模型
OpenAI独家绝技RLHF也被开源超越啦?!DPO让小白轻松玩转RLHF![已开源]

3. 分布式并行训练技术

大模型分布式并行训练技术是一种用于加速大型深度学习模型训练的技术,它可以将模型和数据分布在多个计算设备上,同时进行训练,从而提高训练效率和扩展性。大模型分布式并行训练技术主要有两种类型:模型并行和数据并行。

(1)模型并行

模型并行是指将模型的参数或计算图划分为多个部分,分配到不同的设备上,每个设备只负责一部分模型的运算,然后通过通信协调各个部分的结果。模型并行可以处理超大规模的模型,但是也会增加通信的开销和复杂度。模型并行的方法有:

  • tensor parallelism是指将模型的张量(tensor)沿着某个维度切分为多个子张量,分配到不同的设备上,每个设备只负责一部分张量的运算,然后通过通信合并各个子张量的结果。tensor parallelism可以减少每个设备的内存占用,但是也会增加通信的频率和量。tensor parallelism被Megatron-LM等模型采用。
  • 序列并行是指将模型的序列(sequence)切分为多个子序列,分配到不同的设备上,每个设备只负责一部分序列的运算,然后通过通信传递各个子序列的结果。序列并行可以处理超长的序列,但是也会增加通信的延迟和依赖。序列并行被Reformer等模型采用。
  • pipeline parallelism是指将模型的层(layer)划分为多个阶段(stage),分配到不同的设备上,每个设备只负责一部分层的运算,然后通过通信传递各个阶段的结果。pipeline parallelism可以提高设备的利用率,但是也会增加通信的同步和冲突。pipeline parallelism的方法有:
    • GPipe是一种基于流水线的并行方法,它将模型的层划分为多个阶段,每个阶段包含若干个层,然后将数据划分为多个微批次(micro-batch),每个微批次包含若干个样本,然后按照顺序将微批次输入到各个阶段,每个阶段完成一个微批次的运算后,将结果传递给下一个阶段,同时接收上一个阶段的结果,形成一个流水线的效果。GPipe可以提高设备的利用率,但是也会增加通信的同步和冲突。GPipe被EfficientNet等模型采用。
    • 1F1B是一种基于流水线的并行方法,它与GPipe类似,也将模型的层划分为多个阶段,每个阶段包含若干个层,然后将数据划分为多个微批次,每个微批次包含若干个样本,然后按照顺序将微批次输入到各个阶段,每个阶段完成一个微批次的运算后,将结果传递给下一个阶段,同时接收上一个阶段的结果,形成一个流水线的效果。与GPipe不同的是,1F1B在每个阶段完成一个微批次的前向传播后,就立即进行反向传播,而不是等待所有的阶段都完成前向传播。1F1B可以减少通信的延迟,但是也会增加通信的频率和量。1F1B被PipeDream等模型采用。
    • interleaved 1F1B是一种基于流水线的并行方法,它与1F1B类似,也将模型的层划分为多个阶段,每个阶段包含若干个层,然后将数据划分为多个微批次,每个微批次包含若干个样本,然后按照顺序将微批次输入到各个阶段,每个阶段完成一个微批次的运算后,将结果传递给下一个阶段,同时接收上一个阶段的结果,形成一个流水线的效果。与1F1B不同的是,interleaved 1F1B在每个阶段完成一个微批次的反向传播后,就立即开始下一个微批次的前向传播,而不是等待所有的阶段都完成反向传播。interleaved 1F1B可以进一步减少通信的延迟,但是也会增加通信的复杂度。interleaved 1F1B被GShard等模型采用。

LLM(六):GPT 的张量并行化(tensor parallelism)方案
大模型训练:分布式训练之并行技术
图解大模型训练之:流水线并行(Pipeline Parallelism),以Gpipe为例
Techniques for training large neural networks

(2)数据并行

数据并行是一种用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值