微调实操一: 增量预训练(Pretraining)

2024-02-03 02:20

本文主要是介绍微调实操一: 增量预训练(Pretraining),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、前言

《微调入门篇:大模型微调的理论学习》我们对大模型微调理论有了基本了解,这篇结合我们现实中常见的场景,进行大模型微调实操部分的了解和学习,之前我有写过类似的文章《实践篇:大模型微调增量预训练实践(二)》利用的MedicalGPT的源码在colab进行操作, 由于MedicalGPT代码比较难以理解,而且模型只能从hugging face上下载,对于一些国内服务器无法访问,我重构了代码,让训练代码更有可读性,并参考LLAMAFactory的项目,增加了modelscope上下载模型,轻松在国内服务器运行.

2、微调领域参考

从0到1太难了,正所谓站在巨人的肩膀创新,我们可以学习其他人在各个领域的一些落地实践,从中得到自己的一些思考,以下是在《垂直领域大模型更亲民》中提到过垂直领域的落地:
在这里插入图片描述

特别是医学、金融等民生行业,已经开始落地,我相信这些行业和大模型的结合会让大模型走得更远和更稳.

3、微调大模型的基本思路

按方法来分:

(1)、Continue PreTraining(增量预训练): 一般垂直大模型是基于通用大模型进行二次的开发。为了给模型注入领域知识,就需要用领域内的语料进行继续预训练。

(2)、SFT( Supervised Finetuning,有监督微调): 通过SFT可以激发大模型理解领域内的各种问题并进行回答的能力(在有召回知识的基础上)

(3)、RLHF(奖励建模、强化学习训练): 通过RLHF可以让大模型的回答对齐人们的偏好,比如行文的风格。

(4)、DPO(直接偏好优化)

按阶段来分的话:

一般来说, 垂直领域的现状就是大家积累很多电子数据,从现实出发,第一步可以先做增量训练.所以会把模型分成3个阶段:

(1)、第一阶段:(Continue PreTraining)增量预训练,在海量领域文档数据上二次预训练GPT模型,以注入领域知识.

(2)、第二阶段: SFT(Supervised Fine-tuning)有监督微调,构造指令微调数据集,在预训练模型基础上做指令精调,以对齐指令意图

(3)、第三阶段 : RLHF和DPO二选一

RLHF(Reinforcement Learning from Human Feedback)基于人类反馈对语言模型进行强化学习,分为两步:RM(Reward Model)奖励模型建模,构造人类偏好排序数据集,训练奖励模型,用来建模人类偏好,主要是"HHH"原则RL(Reinforcement Learning)强化学习,用奖励模型来训练SFT模型,生成模型使用奖励或惩罚来更新其策略,以便生成更高质量、更符合人类偏好的文.

DPO(Direct Preference Optimization)直接偏好优化方法,DPO通过直接优化语言模型来实现对其行为的精确控制,而无需使用复杂的强化学习,也可以有效学习到人类偏好,DPO相较于RLHF更容易实现且易于训练,效果更好

4、Pretraining阶段数据集准备

这是非常在微调中非常关键的一步,领域的核心就是构建高质量的数据集,那么如何准备数据: 网上已有、企业私有、+chatgpt扩充. 这一步的数据集相对比较简单,上面说过, pretraining就是注入专业知识,其实就是一些垂直文章的内容,比如书籍、博客等. MedicalGPT的pretraining数据类似:
在这里插入图片描述

5、微调模型选择

微调模型选择的宗旨主要有3个:

自己有什么样的资源

模型的开源性

模型的开放性和所需的资源

在这里插入图片描述

本人使用kaggle、clolab等免费GPU平台,综合下来,选择bloomz-560m模型进行微调测试.

6、kaggle上微调bloomz-560m

为了快速实验, 依然用的还是MedicalGPT中的数据集,也方面后续对比效果, 验证重构代码的准确性


# pretraining 训练
%cd /kaggle/working/autoorder
!git pull
!pip install -r algorithm/llm/requirements.txt
!pip install Logbook
import os
os.environ['RUN_PACKAGE'] = 'algorithm.llm.train.pretraining'
os.environ['RUN_CLASS'] = 'PreTraining'
print(os.getenv("RUN_PACKAGE"))
!python main.py \--model_type bloom \--model_name_or_path bigscience/bloomz-560m \--train_file_dir /kaggle/working/MedicalGPT/data/pretrain \--validation_file_dir /kaggle/working/MedicalGPT/data/pretrain \--per_device_train_batch_size 4 \--per_device_eval_batch_size 4 \--do_train \--do_eval \--use_peft True \--seed 42 \--max_train_samples 10000 \--max_eval_samples 10 \--num_train_epochs 0.5 \--learning_rate 2e-4 \--warmup_ratio 0.05 \--weight_decay 0.01 \--logging_strategy steps \--logging_steps 10 \--eval_steps 50 \--evaluation_strategy steps \--save_steps 500 \--save_strategy steps \--save_total_limit 13 \--gradient_accumulation_steps 1 \--preprocessing_num_workers 10 \--block_size 512 \--group_by_length True \--output_dir outputs-pt-bloom-v1 \--overwrite_output_dir \--ddp_timeout 30000 \--logging_first_step True \--target_modules all \--lora_rank 8 \--lora_alpha 16 \--lora_dropout 0.05 \--torch_dtype bfloat16 \--device_map auto \--report_to tensorboard \--ddp_find_unused_parameters False \--gradient_checkpointing True \--cache_dir ./cache

这篇关于微调实操一: 增量预训练(Pretraining)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/672719

相关文章

AI Toolkit + H100 GPU,一小时内微调最新热门文生图模型 FLUX

上个月,FLUX 席卷了互联网,这并非没有原因。他们声称优于 DALLE 3、Ideogram 和 Stable Diffusion 3 等模型,而这一点已被证明是有依据的。随着越来越多的流行图像生成工具(如 Stable Diffusion Web UI Forge 和 ComyUI)开始支持这些模型,FLUX 在 Stable Diffusion 领域的扩展将会持续下去。 自 FLU

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页:https://tangyuan96.github.io/minigpt_3d_project_page/ 代码:https://github.com/TangYuan96/MiniGPT-3D 论文:https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA,被ACM MM2024接收,只拥有47.8M的可训练参数,在一张RTX

Spark MLlib模型训练—聚类算法 PIC(Power Iteration Clustering)

Spark MLlib模型训练—聚类算法 PIC(Power Iteration Clustering) Power Iteration Clustering (PIC) 是一种基于图的聚类算法,用于在大规模数据集上进行高效的社区检测。PIC 算法的核心思想是通过迭代图的幂运算来发现数据中的潜在簇。该算法适用于处理大规模图数据,特别是在社交网络分析、推荐系统和生物信息学等领域具有广泛应用。Spa

SigLIP——采用sigmoid损失的图文预训练方式

SigLIP——采用sigmoid损失的图文预训练方式 FesianXu 20240825 at Wechat Search Team 前言 CLIP中的infoNCE损失是一种对比性损失,在SigLIP这个工作中,作者提出采用非对比性的sigmoid损失,能够更高效地进行图文预训练,本文进行介绍。如有谬误请见谅并联系指出,本文遵守CC 4.0 BY-SA版权协议,转载请联系作者并注

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录 在深度学习项目中,目标检测是一项重要的任务。本文将详细介绍如何使用Detectron2进行目标检测模型的复现训练,涵盖训练数据准备、训练命令、训练日志分析、训练指标以及训练输出目录的各个文件及其作用。特别地,我们将演示在训练过程中出现中断后,如何使用 resume 功能继续训练,并将我们复现的模型与Model Zoo中的

可选择的反思指令微调

论文:https://arxiv.org/pdf/2402.10110代码:GitHub - tianyi-lab/Reflection_Tuning: [ACL'24] Selective Reflection-Tuning: Student-Selected Data Recycling for LLM Instruction-Tuning机构:马里兰大学, Adobe Research领

多云架构下大模型训练的存储稳定性探索

一、多云架构与大模型训练的融合 (一)多云架构的优势与挑战 多云架构为大模型训练带来了诸多优势。首先,资源灵活性显著提高,不同的云平台可以提供不同类型的计算资源和存储服务,满足大模型训练在不同阶段的需求。例如,某些云平台可能在 GPU 计算资源上具有优势,而另一些则在存储成本或性能上表现出色,企业可以根据实际情况进行选择和组合。其次,扩展性得以增强,当大模型的规模不断扩大时,单一云平

STM32 HAL CAN通讯 实操

1、简介 相比于串口通讯,对于刚接触CAN通讯的小白来说,CAN通讯相对复杂,看各种视频、帖子理论,总是一知半解。本次通过傻瓜式操作,先实现CAN通讯的交互,以提高小白的信心,也便于自己复习观看。本次以STM32CubeMX进行初始化配置,通过Keil 5软件进行软件设计,通过CAN盒实现进行数据的交互。该流程实际以STM32F0、F1、F3、F4、F7实测好用(理论上都适用),这三种型号单片机

SAP学习笔记 - 开发02 - BTP实操流程(账号注册,BTP控制台,BTP集成开发环境搭建)

上一章讲了 BAPI的概念,以及如何调用SAP里面的既存BAPI。 SAP学习笔记 - 开发01 - BAPI是什么?通过界面和ABAP代码来调用BAPI-CSDN博客 本章继续讲开发相关的内容,主要就是BTP的实际操作流程,比如账号注册,登录,BTP集成开发环境的搭建这方面。 目录 1,账号注册 2,BTP登录URL 3,如何在BTP上进行开发? 以下是详细内容。 1,账

神经网络训练不起来怎么办(零)| General Guidance

摘要:模型性能不理想时,如何判断 Model Bias, Optimization, Overfitting 等问题,并以此着手优化模型。在这个分析过程中,我们可以对Function Set,模型弹性有直观的理解。关键词:模型性能,Model Bias, Optimization, Overfitting。 零,领域背景 如果我们的模型表现较差,那么我们往往需要根据 Training l