初学者如何对大模型进行微调?

粗略地说,大模型训练有四个主要阶段:预训练、有监督微调、奖励建模、强化学习。

预训练消耗的时间占据了整个训练pipeline的99%,其他三个阶段是微调阶段,更多地遵循少量 GPU 和数小时或数天的路线。预训练对于算力和数据的要求非常高,对于普通开发者来说基本上不用考虑了。

对于开发者来说,如果你有几块GPU显卡,那么就可以尝试微调了。不过在微调之前,我们要弄明白为什么要微调,大模型为什么不能直接用?

一、为什么要微调?

大语言模型的预训练的目标很简单:文字接龙,通过前面的词语预测下一个字也就是预测token序列的下一个token。

预训练基于大规模无监督数据集训练,得到的大语言模型可以保存很多知识,但是可能无法充分利用这些知识来回答问题。

我的理解是预训练就是一个班上学习很好的学霸,不过只会死记硬背,脑袋里记忆了很多知识,但是不会灵活应用这些知识。一般预训练的数据格式如下所示:
在这里插入图片描述

如果将“中国的首都是”输入大模型,大模型做文字接龙,可以很轻松的补全“北京”作为回答。但是如果问题的形式是“中国的首都是哪个城市?”这种疑问句形式的时候,虽然只进行了预训练的大模型大概率也能回答这个简单问题,比如采用Few-shot prompt等方法。

但这种形式的问题如果内容更复杂一些,大模型可能无法很好的作答(尽管预训练语料中可能包含了问题的答案)。这时我们就需要指令微调来挖掘大语言模型的潜力。让大模型不仅仅满足于文字接龙,而是要真正具备逻辑推理、文案总结等能力。

一般来说我们可以在modelscope中搜索最新的大模型,以Llama系列为例子。其中

图片

  • Meta-Llama-3-8B不包含Instruct关键词,说明它只有预训练,未经过指令微调。
  • Meta-Llama-3-8B-Instruct包含Instruct关键词,经过预训练、指令微调。

二、初学者如何微调?

对于初学者来说,我们不需要指令微调来挖掘大语言模型的潜力,虽然这个时候的指令微调相比预训练资源消耗小很多,但是对于初学者来说还是很困难的,在微调过程中会碰到灾难性遗忘、复读机等问题。

我建议初学者做微调是在指令微调模型的基础加入特定领域的数据,比如法律文档、医疗诊断等领域,模型需要调整其参数以更好地理解和执行这些特定任务的要求,微调允许大语言模型在特定任务的数据集上进一步学习,从而提高其在该领域的准确性和表现。

比如我在Qwen1.5-7B-Chat的基础上(Qwen1.5-7B-Chat是一个预训练、指令微调后的大模型),准备训练数据集45366条,测试数据集5032条,再微调大模型来实现商品评论情感分析,准确率高达91.70****%,具体实现方法如下:

微调大模型来实现商品评论情感分析

学习微调最好的办法就是自己亲身实践一遍。在去年的时候微调大模型还是一件比较困难的事情。微调工具链不太成熟,碰到了问题只能一个接一个去提issue,费时费力效果还一般。

不过随着大厂在大模型领域真金白银的投入,适合大模型微调的工具链组件快速发展,从初学者入门的角度出发。我推荐使用LLaMA-Factory统一微调框架,它能够支持数百种大模型的微调,并且集成了大量训练加速算法,比很多大模型repo主页训练方法还要快。下面我们来看一看如何使用它。

1.依赖下载

在这里插入图片描述

如果依赖有问题,可以。

2.大模型下载

这里以Baichuan2-13B-Chat为例。

在这里插入图片描述

默认模型会下载到~/.cache/modelscope/hub中,如果需要修改下载目录,可以手动指定环境变量:MODELSCOPE_CACHE,modelscope会将模型和数据集下载到该环境变量指定的目录中

比如更改默认位置:

export MODELSCOPE_CACHE=/home/test/models

3.数据集构建

(1)使用开源数据集

llama_factory中的 data文件夹提供了大量整理好的开源数据集

(2)构建自己的数据集 比如我我按照alpaca 格式准备数据集,包括 instruction, input, output,history 4条内容,其中instruction、 input 为输入,output 为输出标注,数据文件存储格式一般为json。

在这里插入图片描述

例子如下:

在这里插入图片描述

(3)引入自己的数据集

构建自己的数据集后,需更新 data/dataset_info.json 文件,并将数据集放置data文件夹

比如我构建了一个数据集test.json,需更新data/dataset_info.json 文件,并将test.json放置于data文件夹

在这里插入图片描述

4.微调

建议初学者采用web可视化页面微调,启动命令如下:

CUDA_VISIBLE_DEVICES=0 llamafactory-cli webui

其中:CUDA_VISIBLE_DEVICES 指定使用哪块显卡

启动后,微调就更简单了。llamafactory集成了多种微调算法,比如

  • Lora
  • QLora
  • LoRA+
  • Mixture-of-Depths
  • GaLore

等等微调算法,在这里我不想深究它们的具体原理。我建议初学者首先使用Lora微调的方式,只需配置3个参数即可开始微调

图片

5.推理

由于采用的是Lora微调,我们需要将原有大模型的权重与自己训练出来的权重合并。

llamafactory也内置了推理模块,只需调1个参数,即可推理,如下图所示:

图片

下面这张图,是我基于llamafactory做的商品评论情感预测,其中1代表好评,0代表差评。可以看到大模型输出1,代表它认为这条评论是好评。

图片

三、最后

现在大模型微调的门槛越来越低,市场上有大量开源微调框架。只要你会部署、有机器就能出个结果,赶紧动手玩起来吧!

如何学习AI大模型?

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

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

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

相关文章

MySQL—基础学习

对于数据库MySQL的基础学习与Datagrip的使用 1.MySQL概述 (1)相关概念 数据库 :存储数据的仓库 (DB) 数据库管理系统:操控和管理数据库的大型软件(DBMS) SQL:操作关系…

客户案例 | 智原科技利用Ansys多物理场分析增强3D-IC设计服务

Ansys经过认证的半导体解决方案将帮助智原科技缩短2.5D/3D-IC的设计周期,并确保设计符合信号完整性和性能目标 主要亮点 智原科技将使用Ansys RaptorX™片上电磁(EM)建模解决方案来增强2.5D/3D集成电路(IC)的先进封装设…

集成框架 -- 自定义二方包 starter

自定义starter 二方包 My-thread-pool-startermy-thread-pool-starter 整体架构 测试 MyTestAppApplication测试工程 my-test-app 结构测试项目的 pom.xml 二方包 My-thread-pool-starter POM 文件 <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi&…

Spring框架的JDBC模板技术

目录 一、JDBC模板类的使用 1.引入依赖 2.测试类 3.运行&#xff0c;查看数据库 二、使用Spring框架来管理模板类 1.配置文件 2.测试类 3.运行&#xff0c;查看数据库 三、Spring框架管理开源的连接池 1.配置开源的连接池 2.将数据库连接的信息配置到属性文件中 3.核…

头歌答案-分布式文件系统HDFS

目录 第1关&#xff1a;HDFS的基本操作 第2关&#xff1a;HDFS-JAVA接口之读取文件 第3关&#xff1a;HDFS-JAVA接口之上传文件 第4关&#xff1a;HDFS-JAVA接口之删除文件 第1关&#xff1a;HDFS的基本操作 # 1. 启动Hadoop start-all.sh # 启动Hadoop集群 # 或使用以…

mysql设置允许外部ip访问,局域网IP访问

&#xff08;支持MYSQL8版本&#xff09; 1. 登录进入mysql&#xff1b;mysql -uroot -p输入密码进入 2. 输入以下语句&#xff0c;进入mysql库&#xff0c;查看user表中root用户的访问 use mysql; select host,user from user; 3. 更新user表中root用户域属性&#xff0c…

深度学习基础(2024-11-02更新到图像尺寸变换 与 裁剪)

1. 名词解释 FFN FFN &#xff1a; Feedforward Neural Network&#xff0c;前馈神经网络馈神经网络是一种基本的神经网络架构&#xff0c;也称为多层感知器&#xff08;Multilayer Perceptron&#xff0c;MLP&#xff09;FFN 一般主要是包括多个全连接层(FC)的网络&#xff…

Python | Leetcode Python题解之第526题优美的排列

题目&#xff1a; 题解&#xff1a; class Solution:def countArrangement(self, n: int) -> int:f [0] * (1 << n)f[0] 1for mask in range(1, 1 << n):num bin(mask).count("1")for i in range(n):if mask & (1 << i) and (num % (i …

Windows无法访问\\192.168.1.156,错误代码0x800704cf

1.首先要保证网络与共享中心的高级共享设置要打开 2.其他要保证两个机器在一个局域网 最简单的验证方法就是要相互可以ping通 3.如果满足以上条件还是会访问失败 4.可能的原因之一&#xff1a;防火墙设置 你要确保&#xff1a; 网络发现文件传送程序文件和打印机共享 在对应…

蓝桥杯 区间移位--二分、枚举

题目 代码 #include <stdio.h> #include <string.h> #include <vector> #include <algorithm> #include <iostream> using namespace std; struct node{ int a,b; }; vector<node> q; bool cmp(node x,node y){ return x.b <…

华为ENSP--ISIS路由协议

项目背景 为了确保资源共享、办公自动化和节省人力成本&#xff0c;公司E申请两条专线将深圳总部和广州、北京两家分公司网络连接起来。公司原来运行OSFP路由协议&#xff0c;现打算迁移到IS-IS路由协议&#xff0c;张同学正在该公司实习&#xff0c;为了提高实际工作的准确性和…

Java-I/O框架10:File类、文件操作

视频链接&#xff1a;16.26 文件操作_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Tz4y1X7H7?spm_id_from333.788.videopod.episodes&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5&p26 1.File类概述 概念&#xff1a;代表物理盘符中的一个文件或者文件夹&am…

设计模式之模块方法

定义 模板与方法应该是最常使用的设计模式&#xff0c;在GOF&#xff08;设计模式&#xff09;中的定义&#xff1a;定义一个操作中的算法的骨架 &#xff0c;而将一些步骤延迟到子类中。 Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 …

【面试经典150】day 10

目录 1.验证回文串 2.判断子序列 3.两数之和 II - 输入有序数组 4.盛最多水的容器 5.三数之和 1.验证回文串 class Solution {public boolean isPalindrome(String s) {int i0,js.length()-1;while(i<j){//跳过非数字/字母while(i<j&&!Character.isLetterOrDig…

《双指针篇》---有效三角形的个数(中等)

题目传送门 方法一&#xff1a;排序双指针 1.排序 2.设置一个for循环。用来当做第三边。我们从后往前遍历。直到 i2 时跳出循环。 3.初始化 left 指针0&#xff0c;初始化right 指针等于 i-1。这样我们判断两边之和。 4.在left < right 的情况了&#xff0c;如果两边之和大…

Vue 权限管理

vue 中&#xff0c;比较常见的需要进行权限管控的权限控制实现思路有四条&#xff1a;、 菜单的控制 在登录请求中&#xff0c;会得到权限数据&#xff0c;当然&#xff0c;这个需要后端返回数据的支持&#xff0c;前端根据权限数据&#xff0c;展示对应的菜单&#xff0c;单…

结合自身的实际情况,试描绘一天的活动

结合自身的实际情况&#xff0c;试描绘一天的活动 现在变成了两眼一睁就是看看hcy和sxh发围脖了没

【力扣打卡系列】反转链表

坚持按题型打卡&刷&梳理力扣算法题系列&#xff0c;语言为go&#xff0c;Day12 反转链表 题目描述 解题思路 最开始的头节点为空&#xff0c;可以赋值为nil从前往后依次逆转下一个节点的指向即可 代码参考 /*** Definition for singly-linked list.* type ListNode s…

Spring Boot——配置文件

1. 配置文件的格式 Spring Boot 的配置文件有以下三种&#xff1a; application.propertiesapplication.ymlapplication.yaml yml 是 yaml 的简写&#xff0c;使用方法是一样的 当应用程序启动时&#xff0c;Spring Boot 会自动从 classpath 路径找到并加载 application.prop…

申请CNAS软件测试资质,如何选择测试工具最具性价比?

CNAS官方认可文件中对软件测试实验室需要配备的软件测试设备有如下要求&#xff1a; 1、软件测试设备可包括测试工具软件以及计算机系统、网络系统、适配器、测试输入和结果输出等硬件设备。当利用计算机或自动设备对软件测试数据进行采集、处理、记录、报告、存储或检索时&am…