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

news2024/11/18 18:43:43

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

编译Duilib库

编译Duilib,遇到几个错误; 最终生成的lib如下; 报一个错误,无法打开源文件"StdAfx.h", 查了一下资料,反正我的在下图 C/C - 常规 - 附加包含目录,填入下图内容就可以了,这…

还在用findViewById,不来了解下其它方式?

众所周知,都2225年了,如果你还在用Java敲安卓代码,findViewById已经是一种非常繁琐的操作,如果要去获取的id数量多,则对开发更加不友好。如果一个页面id过多,经常会有如下场景: TextView title…

100 C++内存高级话题 new 细节探秘,重载类内 operator new ,delete

一 new 内存分配细节探秘 我们以分配10个char为例,说明,观察内存发现,当delete 的时候,实际上很多内存都改变了。 实际上 new 内存不是一个简单的事情。为了记录和管理分配出去的内存,额外分配了不少内存,…

clickhouse行转列的转换

1、原表select * from test 2、一个人的每个科目作为一行记录 改为一个人的所有科目作为一行记录 方式1 select name, sum(case when subject‘语文’ then score else 0 end) as chinese, sum(case when subject‘数学’ then score else 0 end) as math from test group by …

Redis学习——高级篇⑨

Redis学习——高级篇⑨ Redis7高级之Redlock算法和Redisson的使用(十) 10.1 Redlock 红锁算法1.解决手写分布式锁的单点故障问题2.设计理念3. 解决方案 10.2 Redisson进行代码改造10.3 多机案例(解决单点故障)10.4 R…

线性代数:矩阵的秩

目录 一、矩阵的子式 二、矩阵的秩 三、重要性质定理推论 一、矩阵的子式 二、矩阵的秩 三、重要性质定理推论

Linux多线程服务端编程:使用muduo C++网络库 学习笔记 第十一章 反思C++面向对象与虚函数(下)

11.7.2 值语义与生命期 值语义的一个巨大好处是生命期管理很简单,就跟int一样——你不需要操心int的生命期。值语义的对象要么是stack object,要么直接作为其他object的成员,因此我们不用担心它的生命期(一个函数使用自己stack上…

TryHackMe-File Inclusion练习

本文相关的TryHackMe实验房间链接:TryHackMe | Why Subscribe 路径遍历(目录遍历) LocationDescription/etc/issue包含要在登录提示之前打印的消息或系统标识。/etc/profile控制系统范围的默认变量,例如导出(Export)变量、文件创…

纯国产,3款黑科技软件,被误认为外国佬开发

闲话不多说,直接为大家推荐三款实用工具。 1、知犀思维导图 这款国产的思维导图工具,堪称业界的良心之选。它不仅能捕捉你每一个稍纵即逝的灵感,而且界面简洁、操作轻松。无论是团队协作、灵感记录、规划制定,还是日常笔记&…

jenkins添加linux节点

jenkins添加linux节点并创建任务_创建linux jenkins结点-CSDN博客文章浏览阅读1.1k次。jenkins添加linux节点并创建任务_创建linux jenkins结点https://blog.csdn.net/qq_32828053/article/details/128905581

加速知识检索:伯克利DeepMind联合研究,RaLMSpec让语言模型服务飞速提升2-7倍!

近年来,随着大型语言模型(LLM)的出现,在多样化的 NLP 任务上取得了令人瞩目的成果。然而,知识密集型任务仍是 NLP 领域中的一项挑战,因为这些任务不仅要求模型要理解和生成自然语言,还要能够访问…

【论文笔记】Multi-Chain Reasoning:对多思维链进行元推理

目录 写在前面1. 摘要2. 相关知识3. MCR方法3.1 生成推理链3.2 基于推理链的推理 4. 实验4.1 实验设置4.2 实验结果 5. 提及文献 写在前面 文章标题:Answering Questions by Meta-Reasoning over Multiple Chains of Thought论文链接:【1】代码链接&…

江科大stm32学习笔记11——旋转编码器计次

一、接线 旋转编码器,旋钮会不断接触断开触点产生电波。 由于两个电波之间相差90,即为正交波,一个电波处于高电平时另一个处于低电平,所以可以用来判断旋转方向。 二、代码 复制粘贴4-1的工程文件,重命名为“5-2 旋转…

Could not resolve host: github.com问题解决

git clone的时候发现机器无法解析github.com,其实应该改用ssh协议去clone,但是我用的是公用的机器,密钥对一直没配置好,所以也就堵死了。那么如果想让机器能解析github.com,(机器本身没有ping命令&#xff…

深度学习入门笔记(五)前馈网络与反向传播

接着上一节,本节讲解模型自我学习的数学计算过程究竟是怎么样的。 5.1 前馈网络 一个最简单的前馈神经网络如图所示,对于每一个隐藏层,输入对应前一层每一个节点权重乘以节点输出值,输出则是经过激活函数(例如sigmoid函数)计算后的值。 在这样的网络中,输入的数据 x 经…

数据结构—基础知识(16):哈夫曼编码

数据结构—基础知识(16):哈夫曼编码 哈夫曼编码的主要思想 在进行数据压缩时,为了使压缩后的数据文件尽可能短,可采用不定长编码。其基本思想是:为出现次数较多的字符编以较短的编码。为确保对数据文件进…

一、创建Vue3项目

1. 下载 node.js 下载地址:https://nodejs.org/zh-cn 优先选择 16 版本; node -v || node -version 可以检查本地 node.js 版本 2. 设置淘宝镜像源 npm config set registry https://registry.npmmirror.com/ 设置淘宝镜像源 npm config get registry 查看当前镜像…

【GitHub项目推荐--一款100% 开源的物联网开发平台,匹配智慧城市、智能家居和能源管理】【转载】

OpenRemote 一款100% 开源 - 集成您的设备、创建规则以及分析和可视化您的数据的物联网设备管理平台 github地址: https://github.com/openremote/openremote 国内源代码: http://www.gitpp.com/pythonking/openremote OpenRemote 的介绍 OpenRemo…

格式化内存卡后,如何找回丢失的监控视频?

随着摄像头的应用越来越广泛,很多监控摄像头采用了内存卡作为存储介质,方便用户存储和查看摄像头拍摄的视频文件。然而,由于各种原因,监控摄像头的内存卡有时会被意外格式化导致重要数据的丢失,给用户带来诸多困扰。 那…

因子图、边缘化与消元算法的抽丝剥茧 —— Notes for “Factor Graphs for Robot Perception“

Title: 因子图、边缘化与消元算法的抽丝剥茧 —— Notes for “Factor Graphs for Robot Perception” 文章目录 I. 前言II. 因子图的基本概念1. 因子图的定义2. SLAM 中的因子图A. 因子图的图示B. 因子图的因式C. 因子图的二分图形式 III. 边缘化与消元运算的基本原理1. 边缘化…