北京网站建设公司是否提供盘锦地区的网站定制服务?

摘要:北京网站建设交易,盘锦做网站,wordpress插件+七牛,中信建设有限责任公司 电话文章目录 一、金融大模型背景二、大模型的研究问题三、大模型技术路线四、LLaMA家族模型五、Lora模型微调的原理六、大模型Lora微调实战Referen
北京网站建设交易,盘锦做网站,wordpress插件+七牛,中信建设有限责任公司 电话文章目录 一、金融大模型背景二、大模型的研究问题三、大模型技术路线四、LLaMA家族模型五、Lora模型微调的原理六、大模型Lora微调实战Reference 一、金融大模型背景 金融行业需要垂直领域LLM#xff0c;因为存在金融安全和数据大多数存储在本地#xff0c;在风控、精度、实… 文章目录 一、金融大模型背景二、大模型的研究问题三、大模型技术路线四、LLaMA家族模型五、Lora模型微调的原理六、大模型Lora微调实战Reference 一、金融大模型背景 金融行业需要垂直领域LLM因为存在金融安全和数据大多数存储在本地在风控、精度、实时性有要求1500亿参数的BloombergGPT BloombergGPT金融大模型也是用transformer架构用decoder路线 构建目前规模最大的金融数据集FINPILE对通用文本金融知识的混合训练。用了512块40GB的A100 GPU训练中备份了4个模型每个模型分了128块GPU。 2度小满5月的【源轩大模型】 使用hybrid-tuning方式首个千亿参数金融大模型在通用能力评测中,轩辕有10.2%的任务表现超越ChatGPT 3.5, 61.22%的任务表现与之持平,涉及数学计算、场景写作、逻辑推理、文本摘要等13个主要维度。 金融大模型GPT落地场景 新闻情感分类 —— 金融机构判断对某事件看法辅助量化策略、投资决策财务类知识问答 —— 辅助金融机构进行信用评估筛选概念股辅助分析师对专业领域的学习财务报表分析和会计稽查 —— 生成财务分析报告和招股书辅助会计和审计 二、大模型的研究问题 LLM的理论基础 如Few/Zero-Shot Learning、In-Context Learning、Chain-of-Thought能力zero-shot是模型训练中没有接触过这个类别的样本但仍能对没见过的类别进行分类few-shot是每个类别中只有少量样本希望模型学习一定类别的大量数据后对于新类别的少量样本数据能快速学习。few-show是meta-learning的一种。 网络架构transformer架构括分词、归一化方法、归一化位置、位置编码、注意力与偏置等常见模块。是否有比transformer更好的架构如有学者受到数学相关方向的启发提出非欧空间Manifold网络框架。大模型的高效计算模型并行、tensor卸载、优化器卸载等微软的deepspeed等工具推理效率模型剪枝、知识蒸馏、参数量化等大模型的高效适配下游任务 prompt learning提示学习如指令微调参数高效微调只调整大模型里的少量参数 大模型的可控生成通过指令微调、提示工程、思维链、RLHF等控制模型生成伦理问题RLHF、RLAIF等对齐方法提高生成质量模型评估专业考题进行评测、更强的模型给小模型打分、人工评测等 三、大模型技术路线 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卸载 四、LLaMA家族模型 五、Lora模型微调的原理 prompt的本质是参数有效性学习parameter-efficient learning, PEL因为PLM全量参数更新训练耗时而在参数有效性学习中大模型只需指定或额外加入少量的可训练参数冻结其他参数提高训练效率和保证质量 Lora低秩自适应low-rank adaption额外引入了可训练的低秩分解矩阵同时固定预训练权重。通过反向传播学习分解的矩阵将适应任务的新权重矩阵分解为低维较小矩阵而不会丢失太多信息。 可以将新的lora权重矩阵与原始预训练权重合并在推理中不会产生额外的开销如上图所示左边是预训练模型的权重输入输出维度都是d在训练时被冻结参数右边对A使用随机的高斯初始化B在训练初始为0。一个预训练的权重矩阵使用低秩分解来表示初始时△WBA h W 0 x Δ W x W 0 x B A x hW_0 x\Delta W xW_0 xB A x hW0​xΔWxW0​xBAxLoRA原理即在大型语言模型上对指定参数增加额外的低秩矩阵并在模型训练过程中仅训练而外增加的参数。当“秩值”远小于原始参数维度时新增的低秩矩阵参数量很小达到仅训练很小的参数就能获取相应结果。冻结预训练模型权重并将可训练的秩分解矩阵注入到Transformer层的每个权重中大大减少了下游任务的可训练参数数量。实际上是增加了右侧的“旁支”也就是先用一个Linear层A将数据从 d维降到r再用第二个Linear层B将数据从r变回d维。最后再将左右两部分的结果相加融合得到输出的hidden_state。 评价LLM生成文本的指标困惑度、BLEU 和 ROUGE等 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 等项目中运行推理的用户 六、大模型Lora微调实战 下面以mt0-large模型进行lora为例选用金融领域情感分析任务financial_sentiment_analysis给定一个句子要求识别出该句子是negative、positive还是neutral三个中的哪一个下面借助peft库Parameter-Efficient Fine-Tuning进行微调支持如下tuning Adapter Tuning固定原预训练模型的参数 只对新增的adapter进行微调Prefix Tuning在输入token前构造一段任务相关的virtual tokens作为prefix训练时只更新Prefix不分的参数而Transformer的其他不分参数固定和构造prompt类似只是prompt是人为构造的即无法在模型训练时更新参数而Prefix可以学习隐式的promptPrompt TuningPrefix Tuning的简化版只在输入层加入prompt tokens并不需要加入MLPP-tuning将prompt转为可学习的embedding层v2则加入了prompts tokens作为输入LoRALow-Rank Adaption为了解决adapter增加模型深度而增加模型推理时间、上面几种tuning中prompt较难训练减少模型的可用序列长度 该方法可以在推理时直接用训练好的AB两个矩阵和原预训练模型的参数相加相加结果替换原预训练模型参数。相当于用LoRA模拟full-tunetune过程 # !/usr/bin/python # -*- coding: utf-8 -*-Author : guomiansheng Software : Pycharm Contact : 864934027qq.com File : main.pyfrom transformers import AutoModelForSeq2SeqLM from peft import get_peft_config, get_peft_model, get_peft_model_state_dict, LoraConfig, TaskType import torch from datasets import load_dataset import os os.environ[TOKENIZERS_PARALLELISM] false from transformers import AutoTokenizer from torch.utils.data import DataLoader from transformers import default_data_collator, get_linear_schedule_with_warmup from tqdm import tqdm from datasets import load_datasetdef train_model():# device cudadevice mpsmodel_name_or_path bigscience/mt0-largetokenizer_name_or_path bigscience/mt0-largecheckpoint_name financial_sentiment_analysis_lora_v1.pttext_column sentencelabel_column text_labelmax_length 128lr 1e-3num_epochs 3batch_size 8# 搭建modelpeft_config LoraConfig(task_typeTaskType.SEQ_2_SEQ_LM, inference_modeFalse, r8, lora_alpha32,lora_dropout0.1)model AutoModelForSeq2SeqLM.from_pretrained(model_name_or_path)model get_peft_model(model, peft_config)model.print_trainable_parameters()# 加载数据dataset load_dataset(financial_phrasebank, sentences_allagree)dataset dataset[train].train_test_split(test_size0.1)dataset[validation] dataset[test]del dataset[test]classes dataset[train].features[label].namesdataset dataset.map(lambda x: {text_label: [classes[label] for label in x[label]]},batchedTrue,num_proc1,)# 训练数据预处理tokenizer AutoTokenizer.from_pretrained(model_name_or_path)def preprocess_function(examples):inputs examples[text_column]targets examples[label_column]model_inputs tokenizer(inputs, max_lengthmax_length, paddingmax_length, truncationTrue,return_tensorspt)labels tokenizer(targets, max_length3, paddingmax_length, truncationTrue, return_tensorspt)labels labels[input_ids]labels[labels tokenizer.pad_token_id] -100model_inputs[labels] labelsreturn model_inputsprocessed_datasets dataset.map(preprocess_function,batchedTrue,num_proc1,remove_columnsdataset[train].column_names,load_from_cache_fileFalse,descRunning tokenizer on dataset,)train_dataset processed_datasets[train]eval_dataset processed_datasets[validation]train_dataloader DataLoader(train_dataset, shuffleTrue, collate_fndefault_data_collator, batch_sizebatch_size, pin_memoryTrue)eval_dataloader DataLoader(eval_dataset, collate_fndefault_data_collator, batch_sizebatch_size, pin_memoryTrue)# 设定优化器和正则项optimizer torch.optim.AdamW(model.parameters(), lrlr)lr_scheduler get_linear_schedule_with_warmup(optimizeroptimizer,num_warmup_steps0,num_training_steps(len(train_dataloader) * num_epochs),)# 训练和评估model model.to(device)for epoch in range(num_epochs):model.train()total_loss 0for step, batch in enumerate(tqdm(train_dataloader)):batch {k: v.to(device) for k, v in batch.items()}outputs model(**batch)loss outputs.losstotal_loss loss.detach().float()loss.backward()optimizer.step()lr_scheduler.step()optimizer.zero_grad()model.eval()eval_loss 0eval_preds []for step, batch in enumerate(tqdm(eval_dataloader)):batch {k: v.to(device) for k, v in batch.items()}with torch.no_grad():outputs model(**batch)loss outputs.losseval_loss loss.detach().float()eval_preds.extend(tokenizer.batch_decode(torch.argmax(outputs.logits, -1).detach().cpu().numpy(),skip_special_tokensTrue))eval_epoch_loss eval_loss / len(eval_dataloader)eval_ppl torch.exp(eval_epoch_loss)train_epoch_loss total_loss / len(train_dataloader)train_ppl torch.exp(train_epoch_loss)print(f{epoch}: {train_ppl} {train_epoch_loss} {eval_ppl} {eval_epoch_loss})# 保存模型peft_model_id f{model_name_or_path}_{peft_config.peft_type}_{peft_config.task_type}model.save_pretrained(peft_model_id)def inference_model():# device cudadevice mpsmodel_name_or_path bigscience/mt0-largetokenizer_name_or_path bigscience/mt0-largecheckpoint_name financial_sentiment_analysis_lora_v1.pttext_column sentencelabel_column text_labelmax_length 128lr 1e-3num_epochs 3batch_size 8# 搭建modelpeft_config LoraConfig(task_typeTaskType.SEQ_2_SEQ_LM, inference_modeFalse, r8, lora_alpha32,lora_dropout0.1)model AutoModelForSeq2SeqLM.from_pretrained(model_name_or_path)model get_peft_model(model, peft_config)model.print_trainable_parameters()# 加载数据dataset load_dataset(financial_phrasebank, sentences_allagree)dataset dataset[train].train_test_split(test_size0.1)dataset[validation] dataset[test]del dataset[test]classes dataset[train].features[label].namesdataset dataset.map(lambda x: {text_label: [classes[label] for label in x[label]]},batchedTrue,num_proc1,)# 训练数据预处理tokenizer AutoTokenizer.from_pretrained(model_name_or_path)def preprocess_function(examples):inputs examples[text_column]targets examples[label_column]model_inputs tokenizer(inputs, max_lengthmax_length, paddingmax_length, truncationTrue,return_tensorspt)labels tokenizer(targets, max_length3, paddingmax_length, truncationTrue, return_tensorspt)labels labels[input_ids]labels[labels tokenizer.pad_token_id] -100model_inputs[labels] labelsreturn model_inputsprocessed_datasets dataset.map(preprocess_function,batchedTrue,num_proc1,remove_columnsdataset[train].column_names,load_from_cache_fileFalse,descRunning tokenizer on dataset,)train_dataset processed_datasets[train]eval_dataset processed_datasets[validation]train_dataloader DataLoader(train_dataset, shuffleTrue, collate_fndefault_data_collator, batch_sizebatch_size, pin_memoryTrue)eval_dataloader DataLoader(eval_dataset, collate_fndefault_data_collator, batch_sizebatch_size, pin_memoryTrue)# 设定优化器和正则项optimizer torch.optim.AdamW(model.parameters(), lrlr)lr_scheduler get_linear_schedule_with_warmup(optimizeroptimizer,num_warmup_steps0,num_training_steps(len(train_dataloader) * num_epochs),)# 训练和评估model model.to(device)# 模型推理预测from peft import PeftModel, PeftConfigpeft_model_id f{model_name_or_path}_{peft_config.peft_type}_{peft_config.task_type}config PeftConfig.from_pretrained(peft_model_id)model AutoModelForSeq2SeqLM.from_pretrained(config.base_model_name_or_path)model PeftModel.from_pretrained(model, peft_model_id)model.eval()i 0inputs tokenizer(dataset[validation][text_column][i], return_tensorspt)print(dataset[validation][text_column][i])print(inputs)with torch.no_grad():outputs model.generate(input_idsinputs[input_ids], max_new_tokens10)print(outputs)print(tokenizer.batch_decode(outputs.detach().cpu().numpy(), skip_special_tokensTrue))print(test)if __name__ __main__:# train_model()inference_model()可以看到上面的LoraConfig参数如下 peft_config LoraConfig(task_typeTaskType.SEQ_2_SEQ_LM,inference_modeFalse,r8,lora_alpha32,lora_dropout0.1)task_typeinference_moderlora的秩lora_A用高斯分布初始化lora_B用0初始化lora_alphalora微调的缩放系数lora_dropoutlora微调的dropout系数learning_rateadamw优化器的初始学习速率 也可以看LoraConfig源码 class LoraConfig(PeftConfig):r: int field(default8, metadata{help: Lora attention dimension})target_modules: Optional[Union[List[str], str]] field(defaultNone,metadata{help: List of module names or regex expression of the module names to replace with Lora.For example, [q, v] or .*decoder.*(SelfAttention|EncDecAttention).*(q|v)$ },)lora_alpha: int field(defaultNone, metadata{help: Lora alpha})lora_dropout: float field(defaultNone, metadata{help: Lora dropout})fan_in_fan_out: bool field(defaultFalse,metadata{help: Set this to True if the layer to replace stores weight like (fan_in, fan_out)},)bias: str field(defaultnone, metadata{help: Bias type for Lora. Can be none, all or lora_only})modules_to_save: Optional[List[str]] field(defaultNone,metadata{help: List of modules apart from LoRA layers to be set as trainable and saved in the final checkpoint. For example, in Sequence Classification or Token Classification tasks, the final layer classifier/score are randomly initialized and as such need to be trainable and saved.},)init_lora_weights: bool field(defaultTrue,metadata{help: Whether to initialize the weights of the Lora layers.},)def __post_init__(self):self.peft_type PeftType.LORAr (int): Lora attention dimension.target_modules (Union[List[str],str]): The names of the modules to apply Lora to.lora_alpha (float): The alpha parameter for Lora scaling.lora_dropout (float): The dropout probability for Lora layers.fan_in_fan_out (bool): Set this to True if the layer to replace stores weight like (fan_in, fan_out). For example, gpt-2 uses Conv1D which stores weights like (fan_in, fan_out) and hence this should be set to True.: bias (str): Bias type for Lora. Can be ‘none’, ‘all’ or ‘lora_only’modules_to_save (List[str]):List of modules apart from LoRA layers to be set as trainable and saved in the final checkpoint. Reference [1] A Survey of Large Language Models. Wayne Xin Zhao [2] 大模型论文综述介绍 [3] LLaMA类模型没那么难LoRA将模型微调缩减到几小时 [4] RLHF中的PPO算法原理及其实现 [5] 基于DeepSpeed训练ChatGPT [6] Prompt-Tuning——深度解读一种新的微调范式 [7] 大模型参数高效微调技术原理综述七-最佳实践、总结 [8] chatGLM2-6B模型的全参数微调改进多轮对话交互质量等https://github.com/SpongebBob/Finetune-ChatGLM2-6B [9] 大模型微调样本构造的trick [10] 大模型参数高效微调技术原理综述一-背景、参数高效微调简介附全量参数微调与参数高效微调对比-表格 [11] 大模型训练之微调篇.无数据不智能 [12] 理解金融报告使用大模型.无数据不智能 [13] Scaling Down to Scale Up: A Guide to Parameter-Efficient Fine-Tuning [14] 低资源微调大模型LoRA模型思想与BLOOM-LORA代码实现分析 [15] 模型和指令微调方法.山顶夕景 [16] 详谈大模型训练和推理优化技术 [17] LLMLoRa微调加速技术原理及基于PEFT的动手实践一些思考和mt0-largelora完整案例 [18] 再看大模型Lora微调加速是否有效Full-Parameter全参数微调与LoRA低秩微调的性能对比开源实验介绍 [19] 微调范式对比Freeze、P-Tuning、Lora、full-Finetune开源实现 [20] 基于GLM-6B对话模型的实体属性抽取项目实现解析对Zero-shot与In-Context Learning的若干思考 [21] 微调实战DeepSpeedTransformers实现简单快捷上手百亿参数模型微调 [22] LLaMA小参数大数据的开放、高效基础语言模型阅读笔记 [23] 代码角度看LLaMA语言模型 [24] ChatGPT应用端的Prompt解析从概念、基本构成、常见任务、构造策略到开源工具与数据集 [25] LLM实战大语言模型BLOOM推理工具测试实践与效果分析实录 [26] 谈langchain大模型外挂知识库问答系统核心部件如何更好地解析、分割复杂非结构化文本 [27] 看支持32K上下文的ChatGLM2-6B模型优化点简读及现有开源模型主流训练优化点概述 [28] 极低资源条件下如何微调大模型LoRA模型思想与BLOOM-LORA代码实现分析 [29] The Power of Scale for Parameter-Efficient Prompt Tuning [30] https://github.com/mymusise/ChatGLM-Tuning 一种平价的 Chatgpt 实现方案基于清华的ChatGLM-6B LoRA 进行finetune [31] https://github.com/jxhe/unify-parameter-efficient-tuning [31] 简单分析LoRA方法