【LLM大模型】模型和指令微调方法

note

  • Hugging Face 的 PEFT是一个库(LoRA 是其支持的技术之一,除此之外还有Prefix Tuning、P-Tuning、Prompt Tuning),可以让你使用各种基于 Transformer 结构的语言模型进行高效微调。
  • AIpaca羊驼:让 OpenAI 的 text-davinci-003 模型以 self-instruct 方式生成 52K 指令遵循(instruction-following)样本,以此作为 Alpaca 的训练数据,最后训练的羊驼只有7B参数量。可以使用LoRA微调优化。
  • LLM技术思路:
    • 语言模型:llama、bloom、glm等
    • 指令微调数据:alpaca_data、bella_data、guanaco_data等。目前指令微调数据上,很依赖alpaca以及chatgpt的self-instruct数据。数据处理参考下图:
    • 微调加速: lora(如Alpaca-Lora)等,还可以使用peft库、量化工具包bitsandbytes、deepspeed(先读torch.distributed和ColossalAI在搞)、llama.cpp量化模型。在LoRA方法提出之前,也有很多方法尝试解决大模型微调困境的方法。其中有两个主要的方向:
      • 添加adapter层。adapter就是固定原有的参数,并添加一些额外参数用于微调;
      • 由于某种形式的输入层激活。
  • 训练优化方法:量化、3D并行、cpu卸载
    在这里插入图片描述

文章目录

  • note
  • 零、AIGC生成式模型
    • 1. 核心要素
    • 2. LLM evolutionary tree
    • 3. 什么样的模型更适合zero-shot
  • 二、LLM大模型
    • 1. ChatGLM
      • (1)GLM-130B
      • (2)ChatGLM-6B
    • 2. LLaMA
    • 3. RoBERTa
    • 4. Bloom
    • 5. PaLM
  • 三、大模型高效指令微调
    • 1. 指令微调的注意事项
    • 2. prompt tuning
    • 3. prefix tuning
    • 5. LoRA模型微调
    • 6. p-tuning
    • 7. Adapter tuning
  • 四、微调模型实践
    • 1. 基于微调的医学问诊模型HuaTuo
    • 2. stanford alpaca指令微调
    • 3. Chinese-LLaMA-Alpaca中文模型
    • 4. Alpaca-Lora:基于LLaMA(7B)微调
  • 五、工程注意事项
  • Reference

零、AIGC生成式模型

1. 核心要素

在这里插入图片描述
AIGC模型:
NLP:GPT、chatGLM、其他常见LLM模型参考下图
CV:stable diffusion等

2. LLM evolutionary tree

在这里插入图片描述
引爆LLM的chatGPT的三大核心技术:

  • LLM:(Large Language Models)指经过大规模预训练且体量较大的语言模型,一般是 transformer-based 模型。
  • IFT:(Instruction Fine-Tuning)指令微调,指令是指用户传入的目的明确的输入文本,指令微调用以让模型学会遵循用户的指令。
  • CoT:(Chain-of-Thought)指令形式的一种特殊情况,包含 step-by-step 的推理过程。

3. 什么样的模型更适合zero-shot

几个bigScience里的概念

  1. 架构:自回归、非自回归、编码器-解码器
  2. 目标:全语言模型、前缀语言模型、掩码语言模型
  3. 适配器:不添加适配器、将自回归模型用于掩码目标训练的适配器、将掩码为目标的模型转化为纯语言模型目标
  4. 是否经过多任务微调
  5. 评估数据集:EAI-Eval、T0-Eval

图片

二、LLM大模型

  • 当前主流的大预言模型都是decoder-only结构
  • OPT、BLOOM、LLaMA 三个模型是主要面向开源促进研究和应用的,中文开源可用的是 GLM,后续很多工作都是在这些开源的基础模型上进行微调优化的
  • transformer中encoder和decoder有异同(如下图):
    • encoder:将输入序列转为一系列特征向量,encoder由多个层组成,每个子层都包括【多头自注意力层 multi-head self-attention layer】和【全连接前馈层feed-forward layer】,这些子层都用resnet残差连接和 layer normalization层归一化加速训练
      • encoder的多头注意力用于学习输入序列内不同位置之间的以来关系,以及不同维度的重要性;
      • 全连接前馈层用于学习每个位置的特征表示;
    • decoder:next token prediction方式,每个层包括【多头自注意力层】、【多头注意力层】、【全连接前馈层】,也使用resnet和ln加速训练;
      • decoder的多头自注意力:学习序列内不同位置之间的依赖关系
      • decoder的多头注意力:学习输入序列和输出序列之间的依赖关系,并生成一个加权的输入序列特征向量作为当前的特征表示
      • 全连接前馈层:将当前位置的特征表示转为输出序列的一个单词或标记
    • decoder比encoder多一个多头注意力层,用于学习输入序列和输出序列之间的依赖关系

在这里插入图片描述

1. ChatGLM

(1)GLM-130B

ChatGLM 参考了 ChatGPT 的设计思路,在千亿基座模型 GLM-130B中注入了代码预训练,通过有监督微调(Supervised Fine-Tuning)等技术实现人类意图对齐。ChatGLM 当前版本模型的能力提升主要来源于独特的千亿基座模型 GLM-130B。它是不同于 BERT、GPT-3 以及 T5 的架构,是一个包含多目标函数的自回归预训练模型。2022年8月,向研究界和工业界开放了拥有1300亿参数的中英双语稠密模型 GLM-130B,该模型有一些独特的优势:

  • 双语: 同时支持中文和英文。
  • 高精度(英文): 在公开的英文自然语言榜单 LAMBADA、MMLU 和 Big-bench-lite 上优于 GPT-3 175B(API: davinci,基座模型)、OPT-175B 和 BLOOM-176B。
  • 高精度(中文): 在7个零样本 CLUE 数据集和5个零样本 FewCLUE 数据集上明显优于 ERNIE TITAN 3.0 260B 和 YUAN 1.0-245B。
  • 快速推理: 首个实现 INT4 量化的千亿模型,支持用一台 4 卡 3090 或 8 卡 2080Ti 服务器进行快速且基本无损推理。
  • 可复现性: 所有结果(超过 30 个任务)均可通过我们的开源代码和模型参数复现。
  • 跨平台: 支持在国产的海光 DCU、华为昇腾 910 和申威处理器及美国的英伟达芯片上进行训练与推理。

(2)ChatGLM-6B

ChatGLM-6B 是一个具有62亿参数的中英双语语言模型。通过使用与 ChatGLM(chatglm.cn)相同的技术,ChatGLM-6B 初具中文问答和对话功能,并支持在单张 2080Ti 上进行推理使用。具体来说,ChatGLM-6B 有如下特点:

  • 充分的中英双语预训练: ChatGLM-6B 在 1:1 比例的中英语料上训练了 1T 的 token 量,兼具双语能力。
  • 优化的模型架构和大小: 吸取 GLM-130B 训练经验,修正了二维 RoPE 位置编码实现,使用传统FFN结构。6B(62亿)的参数大小,也使得研究者和个人开发者自己微调和部署 ChatGLM-6B 成为可能。
  • 较低的部署门槛: FP16 半精度下,ChatGLM-6B 需要至少 13GB 的显存进行推理,结合模型量化技术,这一需求可以进一步降低到 10GB(INT8) 和 6GB(INT4), 使得 ChatGLM-6B 可以部署在消费级显卡上。
  • 更长的序列长度: 相比 GLM-10B(序列长度1024),ChatGLM-6B 序列长度达 2048,支持更长对话和应用。
  • 人类意图对齐训练: 使用了监督微调(Supervised Fine-Tuning)、反馈自助(Feedback Bootstrap)、人类反馈强化学习(Reinforcement Learning from Human Feedback) 等方式,使模型初具理解人类指令意图的能力。输出格式为 markdown,方便展示。

因此,ChatGLM-6B 具备了一定条件下较好的对话与问答能力。当然,ChatGLM-6B 也有相当多已知的局限和不足:

  • 模型容量较小: 6B 的小容量,决定了其相对较弱的模型记忆和语言能力。在面对许多事实性知识任务时,ChatGLM-6B 可能会生成不正确的信息;她也不擅长逻辑类问题(如数学、编程)的解答。
  • 可能会产生有害说明或有偏见的内容:ChatGLM-6B 只是一个初步与人类意图对齐的语言模型,可能会生成有害、有偏见的内容。
  • 较弱的多轮对话能力:ChatGLM-6B 的上下文理解能力还不够充分,在面对长答案生成,以及多轮对话的场景时,可能会出现上下文丢失和理解错误的情况。
  • 英文能力不足:训练时使用的指示大部分都是中文的,只有一小部分指示是英文的。因此在使用英文指示时,回复的质量可能不如中文指示的回复,甚至与中文指示下的回复矛盾。
  • 易被误导:ChatGLM-6B 的“自我认知”可能存在问题,很容易被误导并产生错误的言论。例如当前版本模型在被误导的情况下,会在自我认知上发生偏差。即使该模型经过了1万亿标识符(token)左右的双语预训练,并且进行了指令微调和人类反馈强化学习(RLHF),但是因为模型容量较小,所以在某些指示下可能会产生有误导性的内容。

2. LLaMA

结构区别:ChatGLM-6B是Prefix LM(PLM),LLaMA-7B是Causal LM(CLM)。
(参考google的论文《UL2: Unifying Language Learning Paradigms》)

LLaMA 是 Meta AI 发布的包含 7B、13B、33B 和 65B 四种参数规模的基础语言模型集合,LLaMA-13B 仅以 1/10 规模的参数在多数的 benchmarks 上性能优于 GPT-3(175B),LLaMA-65B 与业内最好的模型 Chinchilla-70B 和 PaLM-540B 比较也具有竞争力。

链接:https://github.com/facebookresearch/llama
论文地址:https://scontent-tpe1-1.xx.fbcdn.net/v/t39.8562-6/333078981_693988129081760_4712707815225756708_n.pdf

from transformers import LlamaForCausalLM
# use 8-bit quantization; otherwise, use fp16
USE_8BIT = True model = LlamaForCausalLM.from_pretrained("pretrained/path",load_in_8bit=USE_8BIT,torch_dtype=torch.float16,device_map="auto",)
if not USE_8BIT:model.half()  # use fp16
model.eval()

与原始的 transformer Decoder 相比, LLaMA主要有以下改进:

  • 预归一化(Pre-normalization)[GPT3]:为了提高训练的稳定性, LLaMA对每个transformer子层的输入进行归一化, 而不是对输出进行 归一化。同时使用RMSNorm归一化函数。
  • SwiGLU激活函数 [ P a L M ] [\mathrm{PaLM}] [PaLM]:LLaMA用SwiGLU激活函数取代RELU非线性, 以提高性能。SwiGLU激活函数的实现如下:
    SwiGLU ⁡ ( x , W , V , b , c , β ) = Swish ⁡ β ( x W + b ) ⊗ ( x V + c ) \operatorname{SwiGLU}(x, W, V, b, c, \beta)=\operatorname{Swish}_\beta(x W+b) \otimes(x V+c) SwiGLU(x,W,V,b,c,β)=Swishβ(xW+b)(xV+c)
    其中 Swish ⁡ = x ⋅ σ ( β x ) , G L U ( x ) = σ ( W x + b ) ⊗ ( V x + c ) \operatorname{Swish}=x \cdot \sigma(\beta x), G L U(x)=\sigma(W x+b) \otimes(V x+c) Swish=xσ(βx),GLU(x)=σ(Wx+b)(Vx+c)
  • 旋转嵌入(Rotary pos)[GPTNeo]

3. RoBERTa

源码:https://github.com/pytorch/fairseq
论文:https://arxiv.org/pdf/1907.11692.pdf

  • 更大的模型参数量(论文提供的训练时间来看,模型使用 1024 块 V100 GPU 训练了 1 天的时间)
  • 更大bacth size。RoBERTa 在训练过程中使用了更大的bacth size。尝试过从 256 到 8000 不等的bacth size。
  • 更多的训练数据(包括:CC-NEWS 等在内的 160GB 纯文本。而最初的BERT使用16GB BookCorpus数据集和英语维基百科进行训练)

4. Bloom

  • BLOOM 是 BigScience(一个围绕研究和创建超大型语言模型的开放协作研讨会)中数百名研究人员合作设计和构建的 176B 参数开源大语言模型,同时,还开源了BLOOM-560M、BLOOM-1.1B、BLOOM-1.7B、BLOOM-3B、BLOOM-7.1B 其他五个参数规模相对较小的模型。
  • BLOOM 是一种 decoder-only 的 Transformer 语言模型,它是在 ROOTS 语料库上训练的,该数据集包含 46 种自然语言和 13 种编程语言(总共 59 种)的数百个数据来源。
  • 链接:https://huggingface.co/bigscience

在这里插入图片描述

5. PaLM

PaLM 是使用谷歌提出的 Pathways[10] 系统(一种新的 ML 系统,可以跨多个 TPU Pod 进行高效训练)在 6144 块TPU v4 芯片上训练完成的。作者在 Pod 级别上跨两个 Cloud TPU v4 Pods 使用数据并行对训练进行扩展,与以前的大多数 LLM 相比,是一个显著的规模增长。
在这里插入图片描述
在这里插入图片描述

三、大模型高效指令微调

1. 指令微调的注意事项

在这里插入图片描述

  • 高效指令微调:ChatGLM-6B官方支持的p-tuning-v2,以及最常见的LoRA方式都可以微调,节省显存又高效。
  • 参数微调后的常见问题:原有能力可能受损,或循环输出重复文本。可以认为指令微调是为了获得执行指令的能力,而不是从头学习。
  • 微调后,可以合并模型为单一模型:根据LoRA的论文,训练得到低秩的权重delta矩阵,所以支持合并
  • finetune阶段的batch size通常远小于pretrain阶段,微调的数据量也远小于预训练的数据量。(参考MPT-7B模型的实验)
  • 基于LLM大模型构建应用:llama-index(原gpt-index)做文档式的对话系统。或者使用MOSS的思路,把大语言模型做成各种插件
  • 基于Alpaca的指令微调:
    • Lora是在原始预训练模型增加一个旁路,做一个降维再升维的操作(对应降维矩阵A和升维矩阵B,前者用高斯分布初始化,后者用初始化为0),模型的输入输出维度不变,输出时将BA和预训练模型的参数叠加
    • 在推理时,将左右两部分的结果加到一起,即h=Wx+BAx=(W+BA)x,所以,只要将训练完成的矩阵乘积BA跟原本的权重矩阵W加到一起作为新权重参数替换原始预训练语言模型的W即可,不会增加额外的计算资源。
    • 微调目标:原始Alpaca对中文支持不好,我们使用中文语料库(执行wget https://github.com/LC1332/Chinese-alpaca-lora/blob/main/data/trans_chinese_alpaca_data.json?raw=true下载数据,内容是三元组为instruction指令,input输入,output模型的输出),例子如下:
{"instruction": "\"解释以下分数为什么等于1/4\"。","input": "4月16日。","output": "\"分数4/16等于1/4,因为分子和分母都可以被4整除。将分子和分母都除以4得到1/4。\""
}

在这里插入图片描述

2. prompt tuning

该方法出自论文2021年的论文“GPT Understands, Too”
论文链接:https://arxiv.org/pdf/2103.10385.pdf
github链接:https://github.com/THUDM/P-tuning

HuggingFace 开源的一个高效微调大模型的 PEFT 库(Parameter-Efficient Fine-Tuning),目前包含LoRA,Prefix Tuning,Prompt Tuning,P-Tuning 四种算法。首先来看prompt tuning。
在这里插入图片描述
固定预训练参数,为每一个任务额外添加一个或多个embedding,之后拼接query正常输入LLM,并只训练这些embedding。左图为单任务全参数微调,右图为prompt tuning。

prompt tuning将fine tune任务转为mlm任务。自动学习模板:离散的主要包括 Prompt Mining, Prompt Paraphrasing, Gradient-based Search, Prompt Generation 和 Prompt Scoring;连续的则主要包括Prefix Tuning, Tuning Initialized with Discrete Prompts 和 Hard-Soft Prompt Hybrid Tuning。

正常微调举例:[cls]今天天上都出太阳了,阳光明媚。[SEP]
prompt输入举例:[cls]今天天气是[MASK]。[SEP] 今天天上都出太阳了,阳光明媚。[SEP]

from peft import PromptTuningConfig, get_peft_model
model_name_or_path = "./unsup-simcse-roberta-base"
peft_type = PeftType.PROMPT_TUNING
lr = 1e-3
peft_config = PromptTuningConfig(task_type="SEQ_CLS", num_virtual_tokens=10)
model = AutoModelForCausalLM.from_pretrained(model_name_or_path, return_dict=True)
model = get_peft_model(model, peft_config)
model.print_trainable_parameters()

3. prefix tuning

在这里插入图片描述
prefix tuning还是固定预训练参数,但除为每一个任务额外添加一个或多个embedding之外,利用多层感知编码prefix,注意多层感知机就是prefix的编码器,不再像prompt tuning继续输入LLM。

embedding = torch.nn.Embedding(num_virtual_tokens, token_dim)
transform = torch.nn.Sequential(torch.nn.Linear(token_dim, encoder_hidden_size),torch.nn.Tanh(),torch.nn.Linear(encoder_hidden_size, num_layers * 2 * token_dim),
)

5. LoRA模型微调

在这里插入图片描述
LoRA冻结了预训练模型的参数,并在每一层decoder中加入dropout+Linear+Conv1d额外的参数。LoRA速度更快,并且使用更少内存。

model_name_or_path = "./unsup-simcse-roberta-base"
peft_type = peft_type = PeftType.LORA
lr = 3e-4
peft_config = LoraConfig(task_type="SEQ_CLS", inference_mode=False, r=8, lora_alpha=16, lora_dropout=0.1)
model = AutoModelForCausalLM.from_pretrained(model_name_or_path, return_dict=True)
model = get_peft_model(model, peft_config)
model.print_trainable_parameters()

6. p-tuning

p-tuning依然是固定LLM参数,利用多层感知机和LSTM对prompt进行编码,编码之后与其他向量进行拼接之后正常输入LLM。

chatglm使用p tuning v2微调代码:https://github.com/THUDM/ChatGLM-6B/tree/main/ptuning

参考:大模型微调之P-tuning方法解析

self.lstm_head = torch.nn.LSTM(input_size=self.input_size,hidden_size=self.hidden_size,num_layers=num_layers,dropout=lstm_dropout,bidirectional=True,batch_first=True,)self.mlp_head = torch.nn.Sequential(torch.nn.Linear(self.hidden_size * 2, self.hidden_size * 2),torch.nn.ReLU(),torch.nn.Linear(self.hidden_size * 2, self.output_size),
)
self.mlp_head(self.lstm_head(input_embeds)[0])

7. Adapter tuning

该方法出自2019年的论文“Parameter-Efficient Transfer Learning for NLP ”

论文链接:https://arxiv.org/pdf/1902.00751.pdf
github链接:GitHub - google-research/adapter-bert

在这里插入图片描述

  • adpater层会引入推理延迟,如上图,在原始的transformer block中添加2个adapter(上图右边),adpater学习下游任务知识;先降维,再升维

四、微调模型实践

1. 基于微调的医学问诊模型HuaTuo

LLM模型(如LLaMa,ChatGLM)因为缺乏一定的医学专业知识语料而表现不佳。该项目通过医学知识图谱和GPT3.5API构建了中文医学指令数据集,并对LLaMa模型进行了指令微调得到了一个针对医学领域的智能问诊模型HuaTuo,相比于未经过医学数据指令微调的原LLaMa而言,HuaTuo模型在智能问诊层面表现出色,可生成一些更为可靠的医学知识回答。

华佗 HuaTuo: Tuning LLaMA Model with Chinese Medical Knowledge
PDF: https://arxiv.org/pdf/2304.06975v1.pdf
Code: https://github.com/scir-hi/huatuo-llama-med-chinese

2. stanford alpaca指令微调

【stanford_alpaca】一个可复制的指令对齐模型。Stanford Alpaca羊驼 是在 LLaMA 整个模型上微调,即对预训练模型中的所有参数都进行微调(full fine-tuning)。博客(https://crfm.stanford.edu/2023/03/13/alpaca.html)中介绍到,在学术预算下训练高质量的指导跟踪模型有两个重要挑战:强大的预训练语言模型和高质量的指导跟踪数据

  • 第一个挑战通过最近发布的Meta的新LLaMA模型来解决。
  • 对于第二个挑战,self-instruct论文建议使用现有的强语言模型来自动生成指令数据。羊驼是一种语言模型,使用从LLaMA 7B模型的监督学习,从OpenAI的文本davinci-003生成的52K指令进行后续训练。
  • 地址:https://github.com/tatsu-lab/stanford_alpaca。alpaca_data.json数据包含微调羊驼模型的52k指令追踪数据,json里是字典类别,字典内容如下所示:
instruction:str,描述模型应该执行的任务。52K的每个指令都是独一无二的。  inputstr,任务的可选上下文或输入。例如,当指令是“总结以下文章”时,输入是文章。大约40%的例子有输入。  output:str,由text-davinci-003生成的指令的答案。

在这里插入图片描述

  • 成本:配备如上图的指令跟踪数据集,然后使用Hugging Face的训练框架微调了LLaMA模型,利用了完全分片数据并行和混合精度训练等技术。在初始运行中,在8个80GB A100上微调7B LLaMA模型花了3个小时,这在大多数云计算提供商中花费不到100美元。

羊驼仅用于学术研究,禁止任何商业用途。这一决定有三个因素:首先,羊驼是基于LLaMA的,它拥有非商业许可证,因此我们必然会继承这一决定。其次,指令数据基于OpenAI的text-davinci-003,其使用条款禁止开发与OpenAI竞争的模型。

3. Chinese-LLaMA-Alpaca中文模型

论文链接:https://arxiv.org/pdf/2304.08177.pdf
github链接:https://github.com/ymcui/Chinese-LLaMA-Alpaca

chinese LLaMA alpaca模型
论文:《EFFICIENT ANDEFFECTIVETEXTENCODING FORCHINESELLAMAANDALPACA》

Alpaca基于LLaMA的构造数据进行微调:

  • 增加词表,增加编码效率:为了增强分词器对中文文本的支持,首先使用SentencePiece在中文语料库上训练一个中文分词器,词汇量为20,000。然后将中文分词器与原始LLaMA分词器合并,组合它们的词汇表。最终,得到一个合并后的分词器,称为中文LLaMA分词器,词汇量为49,953。
  • 使用低秩自使用LoRA,减少训练参数。LLaMA参数量在7B-65B。使用GPT4作为评分工具。Georgi Gerganov. llama.cpp.https://github.com/ggerganov/llama.cpp, 2023
  • LLaMA包括预归一化、多transformer块和一个语言模型head层、如预归一化、SwiGLU激活和Rotary Embeddings等的改进;LLaMA缺乏指令微调,非商业许可,Alpaca是基于该模型生成;指令数据是基于OpenAI的text-davinci-003,其使用条款禁止开发与OpenAI竞争的模型
  • 指令精调阶段的任务形式基本与Stanford Alpaca相同。训练方案同样采用了LoRA进行高效精调,并进一步增加了可训练参数数量。在prompt设计上,精调以及预测时采用的都是原版Stanford Alpaca不带input的模版。对于包含input字段的数据,采用f"{instruction}+\n+{input}"的形式进行拼接。
    • 指令精调使用了约200w数据,如中英翻译数据500k、pCLUE数据 300K、斯坦福Alpaca数据(中英)50K、Self-instruction数据等。
    • Self-instruction数据即自动生成指令,和standard alpac一样一次批量生成20组数据,

4. Alpaca-Lora:基于LLaMA(7B)微调

项目链接:https://github.com/tloen/alpaca-lora
权重地址:https://huggingface.co/decapoda-research/llama-7b-hf

  • 项目诞生原因:Stanford Alpaca羊驼 是在 LLaMA 整个模型上微调,即对预训练模型中的所有参数都进行微调(full fine-tuning)。但该方法对于硬件成本要求仍然偏高且训练低效。LLaMA没有经过指令微调,生成效果较差
  • 因此,Alpaca-Lora:利用 Lora 技术,在冻结原模型 LLaMA 参数的情况下,通过往模型中加入额外的网络层,并只训练这些新增的网络层参数。由于这些新增参数数量较少,这样不仅微调的成本显著下降(使用一块 RTX 4090 显卡,只用 5 个小时就训练了一个与 Alpaca 水平相当的模型,将这类模型对算力的需求降到了消费级),还能获得和全模型微调(full fine-tuning)类似的效果。
    • 将LLaMA原始转钟转为transformers库对应的模型文件格式(也可以直接从huggingface上下载转好的模型,参考)
    • 用LoRA(Low-rank Adaptation)微调模型、模型推理
    • 将 LoRA 权重合并回基础模型以导出为 HuggingFace 格式和 PyTorch state_dicts。以帮助想要在 llama.cpp 或 alpaca.cpp 等项目中运行推理的用户

五、工程注意事项

  • 可以使用peft库、量化工具包bitsandbytes、deepspeed、llama.cpp量化模型。在LoRA方法提出之前,也有很多方法尝试解决大模型微调困境的方法。其中有两个主要的方向:
    • 添加adapter层。adapter就是固定原有的参数,并添加一些额外参数用于微调;
    • 由于某种形式的输入层激活。
  • GPU推理需求:单卡条件下,显存大小至少满足加载完整模型(fp16),每10亿(Billion)参数需要2GB,因为fp16精度1个参数要占16bits,2bytes。ChatGLM-6B官方说,fp16下最低需要13GB显存。选新一点的显卡,如A100新特性支持bf16、tf32。
  • 显存不足时体验LLM:可以选择对模型进行量化(8bit或4bit)甚至更低。ChatGLM-6B官方说,在int8和int4模式下的推理最低显存要求会从13GB降到10GB和6GB。或者使用cpu进行推理,例如:llama.cpp。
    • huggingface的int8推理速度怎么样:LLM.int8()的BLOOM-176B比FP16版本慢了大约15%到23%。小模型下,int8推理会更慢。
  • RLHF基于人类反馈的强化学习:需要有监督数据集进行微调(如下图)

在这里插入图片描述
关于强化学习又可以继续挖深(典型RL算法如下图),强化学习:监督学习中标注数据独立同分布,rl则有连续性,输入是序列数据,学习到哪些动作的奖励最多,探索和利用EE。

在这里插入图片描述

Reference

[1] mT5: A Massively Multilingual Pre-trained Text-to-Text Transformer https://arxiv.org/pdf/2010.11934.pdf
[2] Language Models are Few-Shot Learners https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/2005.14165.pdf
[3] LaMDA: Language Models for Dialog Applications:https://arxiv.org/pdf/2201.08239.pdf
[4] Jurassic-1: Technical Details and Evaluation https://uploads-ssl.webflow.com/60fd4503684b466578c0d307/61138924626a6981ee09caf6_jurassic_tech_paper.pdf
[5] Using DeepSpeed and Megatron to Train Megatron-Turing NLG 530B, the World’s Largest and Most Powerful Generative Language Model https://arxiv.org/pdf/2201.11990.pdf
[6] Scaling Language Models: Methods, Analysis & Insights from Training Gopher https://storage.googleapis.com/deepmind-media/research/language-research/Training%20Gopher.pdf
[7] Training Compute-Optimal Large Language Models https://arxiv.org/pdf/2203.15556.pdf
[8] PaLM: Scaling Language Modeling with Pathways https://arxiv.org/pdf/2204.02311.pdf
[9] Pathways: Asynchronous Distributed Dataflow for ML https://arxiv.org/pdf/2203.12533.pdf
[10] Transcending Scaling Laws with 0.1% Extra Compute https://arxiv.org/pdf/2210.11399.pdf
[11] UL2: Unifying Language Learning Paradigms https://arxiv.org/pdf/2205.05131.pdf
[12] OPT: Open Pre-trained Transformer Language Models https://arxiv.org/pdf/2205.01068.pdf
[13] LLaMA: Open and Efficient Foundation Language Models https://arxiv.org/pdf/2302.13971v1.pdf
[14] BLOOM: A 176B-Parameter Open-Access Multilingual Language Model https://arxiv.org/pdf/2211.05100.pdf
[15] GLM-130B: An Open Bilingual Pre-Trained Model https://arxiv.org/pdf/2210.02414.pdf
[16] ERNIE 3.0 Titan: Exploring Larger-scale Knowledge Enhanced Pre-training for Language Understanding and Generation https://arxiv.org/pdf/2112.12731.pdf
[17] ERNIE 3.0: Large-scale Knowledge Enhanced Pre-training for Language Understanding and Generation https://arxiv.org/pdf/2107.02137.pdf
[18] Is Prompt All You Need? No. A Comprehensive and Broader View of Instruction Learning https://arxiv.org/pdf/2303.10475v2.pdf
[19] T0 Multitask Prompted Training Enables Zero-Shot Task Generalization https://arxiv.org/pdf/2110.08207.pdf
[20] Finetuned Language Models Are Zero-shot Learners https://openreview.net/pdf?id=gEZrGCozdqR
[21] Scaling Instruction-Finetuned Language Models https://arxiv.org/pdf/2210.11416.pdf
[22] Crosslingual Generalization through Multitask Finetuning https://arxiv.org/pdf/2211.01786.pdf
[23] GPT-3.5 https://platform.openai.com/docs/models/gpt-3-5
[24] Evaluating Large Language Models Trained on Code https://arxiv.org/pdf/2107.03374.pdf
[25] Training language models to follow instructions with human feedback https://arxiv.org/pdf/2203.02155.pdf
[26] OpenAI Blog: Introducting ChatGPT https://openai.com/blog/chatgpt
[27] mT5: A Massively Multilingual Pre-trained Text-to-Text Transformer
[28] OpenAI Blog: GPT-4 https://openai.com/research/gpt-4
[29] Alpaca: A Strong, Replicable Instruction-Following Model https://crfm.stanford.edu/2023/03/13/alpaca.html
[30] ChatGLM:千亿基座的对话模型开启内测 https://chatglm.cn/blog
[31] UC伯克利发布大语言模型排行榜
[32] https://zhuanlan.zhihu.com/p/624918286
[33] https://xv44586.github.io/2023/03/10/llm-inf/
[34] 大语言模型调研汇总
[45] Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer https://arxiv.org/pdf/1910.10683.pdf
[46] 论文解读 Chinese-LLaMA-Alpaca 中文版大语言模型
[47] 预训练技术及应用. 华菁云 澜舟科技 算法研究员
[48] 华佗 HuaTuo: Tuning LLaMA Model with Chinese Medical Knowledge
PDF: https://arxiv.org/pdf/2304.06975v1.pdf
Code: https://github.com/scir-hi/huatuo-llama-med-chinese
[49] 极低资源条件下如何微调大模型:LoRA模型思想与BLOOM-LORA代码实现分析
[50] 大模型主流微调范式、性能对比与开源项目汇总:也看Freeze、P-Tuning、Lora、full-Finetune开源实现
[51] 大模型训练之微调篇(理解篇+代码篇)
[52] 使用Alpaca-Lora基于LLaMA(7B)二十分钟完成微调,效果比肩斯坦福羊驼
[53] llama.cpp量化部署Chinese-LLaMA-Alpaca
[54] Prompt-Tuning——深度解读一种新的微调范式
[55] Prompt Learning全面梳理扫盲.阿里算法工程师
[56] 解密Prompt系列3. 冻结LM微调Prompt: Prefix-Tuning & Prompt-Tuning & P-Tuning
[57] P-tuning:自动构建模版,释放语言模型潜能.苏神2021
[58] 深入理解LLaMA, Alpaca, ColossalChat 系列模型
[59] ChatGPT成功做对了这4步丨爱丁堡大学符尧
[60] 一文搞懂模型量化
[61] https://github.com/huggingface/peft/blob/main/examples/int8_training/peft_bnb_whisper_large_v2_training.ipynb
[62] Alpaca: A Strong, Replicable Instruction-Following Model.Standford U
[63] 如何训练一个更好的语言模型
[64] ChatGPT的低成本“平替”当下实现路线:语言模型+指令微调数据+微调加速架构下的代表项目和开放数据
[65] 关于大模型实践的一些总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/5332.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开源ChatGPT要来了;软件2.0智能革命;GLM、Diffusion模型大加速

1. 2023年AI十大展望:GPT-4领衔大模型变革,谷歌拉响警报,训练数据告急 新年伊始,大模型的话题热度不减。ChatGPT展现的惊人能力将大模型研究和应用热度推向高潮,人们激烈讨论着这个高级“物种”的推出意味着什么。 本文…

被ChatGPT带热的最新技术岗:无需编码,年薪超200万

省时查报告-专业、及时、全面的行研报告库 省时查方案-专业、及时、全面的营销策划方案库 【免费下载】2023年1月份热门报告合集 ChatGPT调研报告 ChatGPT团队背景研究报告 ChatGPT的发展历程、原理、技术架构及未来方向 ChatGPT使用总结:150个ChatGPT提示此模板 Ch…

AI提效工具|借助chatgpt快速读论文,快速总结、归纳、索引相似文章

目前新论文层出不穷,“快速阅读论文”成为研究者们一个必备能力。本文简单记录了近期出现的两个借助chatgpt来帮助我们快速读论文的“神器”,帮助大家快速上手应用,迅速提升论文阅读速度。 此外,本人也会定期更新记录一些类似的“…

获取全球各大证券交易所的全部股票交易信息

幻想过这样的两种能力,一是回到过去,二是预见未来。时间逆转回到过去,这更多的是在文艺作品中能够出现的情节。而预见未来,我们正在努力,希望可以更准确地预见更长时间内更多的细节。例如在瞬息万变的股票交易市场中&a…

如何使用chatGPT辅助开发复杂D3图表

如何使用chatGPT辅助开发一个复杂的D3图表 首先简单介绍一下实现的表单。 在线地址:https://2guliang.top/temperature/timeChat 引言 什么是 D3 D3 (Data-Driven Documents) 是一个基于数据驱动的 JavaScript 库,用于创建可交互的数据可视化图表。…

如何在代码开发中便捷使用 ChatGPT 协助开发

在五一节前后,抽空测试了下网上推荐的开发环境和开发插件,在这里推荐给前后端代码开发的同胞们。 方法一:IDEA 安装 插件 bito 习惯使用 IDEA 开发代码的同胞,可以尝试直接在 IDEA 中安装插件 bito,注意操作过程中需要…

ChatGPT 嵌入开发

为了提高问答「准确率」,有两个优化方向 1、增加训练集数据 2、增加提问上下文语料,答案就在其中 OpenAI 是不允许用户来训练数据的,他的 model 是固定且通用的。所以增加训练集数据并不可行。 使用chatgpt 嵌入,让chatgpt根据语料内容回答。 实际应用,产品客服、产品…

ChatGPT Plugin 开发流程图

有关如何设置、开发和部署 ChatGPT 检索插件的详细信息请参照 https://github.com/openai/chatgpt-retrieval-plugin

如何用ChatGPT使开发效率提高50%以上?

简介 ChatGPT是一个大型语言模型,由OpenAI开发。它被训练用于进行对话式交互,能够理解和生成自然语言文本。ChatGPT可以用于多种任务和场景,包括但不限于:智能助手、创意生成、语言学习、编程辅助等。ChatGPT的优势在于它的广泛知…

ChatGPT 插件系统,正式上线!

公众号关注 “GitHubDaily” 设为 “星标”,每天带你逛 GitHub! 自 ChatGPT 诞生以来,技术圈内有不少开发者基于它的功能实现了不少优秀的产品,现如今在 GitHub 上新增的 ChatGPT 项目更是多不胜数。 为了能够更加灵活的扩展 Chat…

【最新整理】一起看看86 个 ChatGPT 插件

今天我们来看看这86个插件都是做什么的? Shimmer:跟踪膳食并获得更健康生活方式的见解 World News:总结新闻头条 Bohita:用您能描述的任何图像制作服装 Portfolio Pilot:您的 AI 投资指南:投资组合评估…

ChatGPT写的C++学习路线是怎样的

ChatGPT写的C学习路线是怎样的 图片版 文字版 请为我写一条C全栈学习路线,有以下要求: 1、搜索了以下所有要求的相关资料后再做回答,注意逻辑 2、20000字以上,如果没有说完,自己继续 3、求职路线适用于刚进入职场一年…

如何利用ChatGPT-4完成一篇爆款引流文章

ChatGPT4已经来了,今天小编就带大家学习学习,如何利用ChatGPT4完成一篇爆款引流的文章;本文将详细介绍如何使用先进的人工智能语言模型ChatGPT-4来撰写一篇爆款流量文章。我们将探讨选择合适的主题、关键词和结构,以及如何运用Cha…

ChatGPT专业应用:基于关键词撰写原创文章

正文共 485 字,阅读大约需要 2 分钟 内容运营/SEO投放必备技巧,您将在2分钟后获得以下超能力: 基于关键词撰写原创文章 Beezy评级 :B级 *经过简单的寻找, 大部分人能立刻掌握。主要节省时间。 推荐人 | Kim 编辑者 …

ChatGPT专业应用:自动撰写SEO文章

正文共 388 字,阅读大约需要 2 分钟 市场运营/SEO投放必备技巧,您将在2分钟后获得以下超能力: 快速生成SEO文章 Beezy评级 :B级 *经过简单的寻找, 大部分人能立刻掌握。主要节省时间。 推荐人 | 菜菜子 编辑者 | 奈奈…

ChatGPT批量生成文章软件:创意无限,助力高效创作

随着人工智能技术的不断发展,ChatGPT批量生成文章软件成为了一种强大的创作工具。这款软件以其无限创意和高效助力,极大地提升了文章创作的效率。在本文中,我们将从多个方面详细阐述ChatGPT软件的特点和优势。 一、智能创作能力 ChatGPT软件…

chatgpt赋能python:Python中如何对文本进行修改

Python中如何对文本进行修改 在Python编程中,涉及到文本操作的场合并不少见。我们可能需要读取文件、解析HTML网页、处理字符串等等。而在对文本进行操作的过程中,修改文本是非常常见的需求。本文将介绍Python中对文本进行修改的几种基本方法。 1. 字符…

ChatGPT 大规模封号,并停止注册!

责编 | 王子彧 出品 | CSDN云计算(ID:CSDNcloud) 4 月 2 日,大量用会反馈 ChatGPT 账号被封,其中亚洲地区成为重灾区。据相关统计,已有数百万用户的账号受到了影响。 一时间,各种关于 ChatGPT 的…

ChatGPT告诉你:想在领英开发国外客户,可以使用哪些工具?

提问:想在领英开发国外客户,可以使用哪些工具? ChatGPT:如果你想在领英上开发国外客户,可以使用以下几种工具: 1.领英助理:领英助理是一款基于人工智能技术的工具,可以帮助用户自动…

首个开源低成本复现 ChatGPT 完整流程!1.62GB显存即可体验,单机训练提速7.73倍...

来源:机器之心 编辑:机器之心编辑部 火爆全网的 ChatGPT,仿佛开启了第四次工业革命,让微软、谷歌等全球科技巨头打得昏天黑 火爆全网的 ChatGPT,仿佛开启了第四次工业革命,让微软、谷歌等全球科技巨头打得…