微调实操一: 增量预训练(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

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

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

相关文章

浅压缩、深压缩、双引擎、计算机屏幕编码……何去何从?

专业视听领域尤其显示控制和坐席控制领域,最近几年最激动人心的技术,莫过于分布式了。 分布式从推出之日就备受关注:担心稳定性的,质疑同步性能的,怀疑画面质量的…… 诚然,我们在此前见多了带着马赛克的…

【C++】类和对象1:类的定义、访问限定符、作用域及对象大小

前言 本文主要是简单的介绍一下类是什么、如何使用 类的定义 class className { // 类体:由成员函数和成员变量组成 };// 一定要注意后面的分号class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面…

智慧文旅:驱动文化与旅游融合发展的新动力

随着科技的快速发展和人们生活水平的提高,文化和旅游的融合成为了时代发展的必然趋势。智慧文旅作为这一趋势的引领者,通过先进的信息技术手段,推动文化与旅游的深度融合,为产业的发展注入新的活力。本文将深入探讨智慧文旅如何成…

【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏9(附项目源码)

本节最终效果演示 文章目录 本节最终效果演示系列目录前言回收物品素材绘制UI代码控制垃圾桶回收功能效果 源码完结 系列目录 前言 欢迎来到【制作100个Unity游戏】系列!本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第23篇中,我们将…

低成本高效益,电子画册才是品牌的重要选择

​随着互联网的普及和数字化技术的进步,电子画册已成为许多品牌的重要选择。与传统印刷画册相比,电子画册具有低成本、高效益的优点,成为品牌宣传的新趋势。 具体来说,电子画册可以通过在线平台或移动设备轻松查看,无需…

logback自定义生成DB日志(java环境)

目的: 未来在生成日志写入数据库中加一个特殊的字段,官方老版本提供的DBAppender无法实现,并且好巧不巧,在新版本这个实现也被删除了,所以重写一个实现。 1. 安装依赖 安装logback maven依赖 注意: lo…

数据结构——实验01-线性表的链式存储和操作

一、实验内容 二、算法思想与算法实现 1、解题思想 (1)逆序创建链表La就是使用头插法创建一个链表,所谓头插法就是在创建链表时始终将新元素插入到头结点之后,而正序创建链表Lb就是使用尾插法创建一个链表,所谓尾插法…

[高阶·产品经理]业务建模和需求高阶2月26-3月1日晚8点

等级 高阶 介绍 软件开发中,需求是解决“系统怎样好卖”的问题,设计是解决“降低开发成本”的问题。 本训练聚焦第一个方面,在点上强化业务建模和需求的技能。每期的教材都会根据当期学员所整理的学习《软件方法》的过程中以及工作中碰到的…

conda虚拟环境基础

【一文搞定最新版Anaconda】Win11 安装 Anaconda(2023.9)详解(不删除旧版情况下下载、安装、注册、登录、设置环境变量、迁移旧环境、配置修改换源等)连接Pycharm_win11安装anaconda-CSDN博客 conda命令大全(create/in…

产品经理必备知识——API接口(获取电商商品订单数据API)

前言 在古代,我们的传输信息的方式有很多,比如写信、飞鸽传书,以及在战争中使用的烽烟,才有了著名的烽火戏诸侯,但这些方式传输信息的效率终究还是无法满足高速发展的社会需要。如今万物互联的时代,我通过…

网络安全之漏洞扫描

漏洞是在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷,从而可以使攻击者能够在未授权的情况下访问或破坏系统。这些缺陷、错误或不合理之处可能被有意或无意地利用,从而对一个组织的资产或运行造成不利影响,如信息系统被攻击或控制…

关于node.js奇数版本不稳定 将11.x.x升级至16.x.x不成功的一系列问题(一)

据说vue2用16稳定一些 vue3用18好一点(但之前我vue3用的16.18.1也可以) 为维护之前的老项目 先搞定node版本切换 下载nvm node版本管理工具 https://github.com/coreybutler/nvm-windows/releases 用这个nvm-setup.zip安装包 安之前最好先将之前的nod…

基于WordPress开发微信小程序2:决定开发一个wordpress主题

上一篇:基于WordPress开发微信小程序1:搭建Wordpress-CSDN博客 很快发现一个问题,如果使用别人的主题模板,多多少少存在麻烦,所以一咬牙,决定自己开发一个主题模板,并且开源在gitee上&#xff…

计算机网络自顶向下Wireshark labs-HTTP

我直接翻译并在题目下面直接下我的答案了。 1.基本HTTP GET/response交互 我们开始探索HTTP,方法是下载一个非常简单的HTML文件 非常短,并且不包含嵌入的对象。执行以下操作: 启动您的浏览器。启动Wireshark数据包嗅探器,如Wir…

2024年美国大学生数学建模竞赛(E题)财产保险建模|MCDA/随机森林建模解析,小鹿学长带队指引全代码文章与思路

我是鹿鹿学长,就读于上海交通大学,截至目前已经帮500人完成了建模与思路的构建的处理了~ 本文运用利用时间序列和强化学习结合DQN算法,解决保险业可持续性问题;采用MCDA和随机森林,应对地产业保险挑战&…

电脑怎么录屏?打造专业级视频内容!

随着科技的进步,电脑已经深入到我们的日常生活和工作中。而在这个数字时代,录制屏幕内容变得日益重要。无论是制作教程、分享游戏技巧,还是记录重要的演示,录屏都是一个不可或缺的功能。可是电脑怎么录屏呢?本文将深入…

Cmake语法学习3:语法

1.双引号 1.1 命令参数 1)介绍 命令中多个参数之间使用空格进行分隔,而 cmake 会将双引号引起来的内容作为一个整体,当它当成一个参数,假如你的参数中有空格(空格是参数的一部分),那么就可以使…

国自然结题报告为什么不能下载?如何解决

一直以来,国自然的结题报告都不是只能在线查看,这给很多科研人员带来一些不方便,因为在线查看的话,受限于网络,必须有网的时候才能看,并且官方网站的响应比较慢,想快速翻页,基本不可…

【Java程序设计】【C00240】基于Springboot的班级综合测评管理系统(有论文)

基于Springboot的班级综合测评管理系统(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的班级综合测评管理系统 本系统分为学生功能模块、管理员功能模块以及教师功能模块。 管理员功能模块:管理员功能…

MySQL学习记录——일 MySQL 安装、配置

文章目录 1、卸载内置环境2、安装MySQL3、启动4、登录5、配置my.cnf 当前环境是1核2G云服务器,CentOS7.6。要在root用户下进行操作 1、卸载内置环境 云服务器中有可能会自带mysql还有mariadb这样的数据库服务,在安装我们mysql前,得先查找一下…