免费微调自己的大模型(llama-factory微调llama3.1-8b)

news2025/1/12 1:40:09

目录

    • 1. 名词/工具解释
    • 2. 微调过程
    • 3. 总结

本文主要介绍通过llama-factory框架,使用Lora微调方法,微调meta开源的llama3.1-8b模型,平台使用的是趋动云GPU算力资源。
微调已经经过预训练的大模型目的是,通过调整模型参数和不断优化学习,使模型更专门于特定领域或任务。
为简化并方便展示训练效果,本文会基于开源的llama3.1-8b,通过微调,将其训练成自己是叫"Greatbot"的机器人,并且是由Allen创建的。

1. 名词/工具解释

因为大模型是最近几年火起来,很多人对一些基础名词/不是很了解,所以做个简单解释,并顺带回答一些初学者常见疑问:

  • llama3.1-8b: meta开源的大模型: https://github.com/meta-llama/llama-models/tree/main。8b代表的是模型参数量和模型大小,即llama3.1模型拥有大约800亿(8 billion)个参数。
    参数越大(如: 70B, 405B…),代表模型越大也越复杂,对其进行微调所需的硬件成本(比较吃显卡), 参数调整成本,测试成本等也越大。所以对于一般个体用户,首选8b。
  • llama-factory: 国内开发者在github开源的一个支持图形化界面的微调框架(也有命令行), 界面直观,操作方便,支持多种主流模型: LLaMA, Qwen, ChatGLM等
  • Lora: 一种常见高效的微调方法。这块展开说比较复杂,简单说由于两个小矩阵相乘后可模拟一个大矩阵。因此我们只需调整这两个小矩阵(低秩矩阵),实现较小成本,更快的微调出自己的大模型。
  • 趋动云: 国内一个提供GPU算力资源的云平台: https://account.virtaicloud.com/gemini_web/auth/login,可进行大模型训练微调,好处是免费注册获得10算力点,进行免费微调。

2. 微调过程

  1. 注册趋动云账号,获得10免费算力点。访问https://open.virtaicloud.com/web/project/detail/474105320991096832。点击右上角"运行一下",克隆已有项目到自己工作空间。
    其中包含Llama-3.1-8B-Instruct模型和一些示例数据,方面我们进行微调。
    在这里插入图片描述
  2. 跳出的算力规格一定按照默认的来(显存24g, 内存24g),笔者为了省免费送的算力点,试过更小规格硬件,结果是无法微调,显存爆掉,训练失败。
    在这里插入图片描述
  3. 右上角点击"进入开发环境"
    在这里插入图片描述
    左上角"JuptyerLab"一般用来查看文件目录结构,打开文件看内容。网页终端用来执行命令。
    在这里插入图片描述
  4. 网页终端输入cd ./LLaMA-Factory && pip install -e ".[torch,metrics]",安装LLaMA-Factory框架。
    在这里插入图片描述
  5. 网页终端输入llamafactory-cli webui,LLaMA-Factory web界面启动,自动监听在0.0.0.0:7860在这里插入图片描述
  6. 右边"端口"tab页,点"+添加端口",把机器7860端口映射出来。添加完后,右侧会显示能访问的公网地址和端口。之后就通过这个地址访问LLaMA-Factory web界面。在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
  7. JuptyerLab中,复制data目录下自带的identity.json为identity2.json,修改其中要训练的样本内容
    在这里插入图片描述
  8. 访问第6步中的web界面,设置训练参数如下。因为可调的训练参数非常多,这边只介绍对这次训练比较有用的几个。实际微调中,需要根据不同模型,不同样本量,硬件性能等来调整训练参数。点击Start按钮训练,训练大概要5-10分钟:
  • 学习率(learning rate): 控制模型学习速度。学习率太高,模型学习过快,可能会导致学习过程不稳定;学习率太低,模型学习缓慢,训练时间长,效率低。一般刚开始训练时,学习率会设置较大。此处调高为2e-4
    1e-1(0.1):相对较大的学习率,用于初期快速探索。
    1e-2(0.01):中等大小的学习率,常用于许多标准模型的初始学习率。
    1e-3(0.001):较小的学习率,适用于接近优化目标时的细致调整。
    1e-4(0.0001):更小的学习率,用于当模型接近收敛时的微调。
    5e-5(0.00005):非常小的学习率,常见于预训练模型的微调阶段,例如在自然语言处理中微调BERT模型。
  • Epochs: 训练周期数,整个训练数据集被模型完整遍历的次数, 一般设置在2-10之间,轮数过多可能导致过拟合,特别是在小数据集上。此处调高为10.0
  • Max samples: 最大样本数, 一般微调对应的样本数据量至少成千上万,否则会影响微调效果。这里因为是做测试用,此处调低为1000
    在这里插入图片描述9. 切换到Chat tab页,check point选择刚刚模型输出路径。点击"Load model",加载刚刚训练好的模型,这里会花稍微长点时间,将近10分钟。加载完成后,可在input框中和刚刚训练完的模型聊天,测试刚刚的训练是否符合自己的预期。
    这边可以看到,大模型成功介绍了自己是Greatbot,但是在who are you问题中,没有说自己是created by Allen. 说明模型参数仍然有进一步优化空间。
    在这里插入图片描述在这里插入图片描述
  1. 在训练页面Train tab页,如果训练数据够多,会显示损失曲线,它指每个训练批次损失值随训练轮次的变化。这个图像可以用来解读训练过程中模型的收敛情况和学习进展,是非常重要的训练情况观察图表。
    一般初始阶段的损失值较高,随着训练的进行,损失值会逐渐下降。如果损失值低且趋向稳定,说明模型已经收敛,训练效果不错。
    如果损失初始值或损失最终值(如大于1)过大,如果这个曲线趋近于直线,如果损失值突然大幅上升或下降,这些现象都说明训练过程存在严重问题,需要调整训练参数或数据。
    在这里插入图片描述

3. 总结

实际工作中的大模型微调,影响微调结果有多个因素,而且训练数据至少上万。此处为了展示训练效果,仅用了少量数据:

  • 基座大模型质量
  • 训练数据质量,训练数据数量…
  • 微调方法:full, freeze, lora
  • 微调参数:learning rate,Epochs,Max samples,量化等级等
  • 测试方法,覆盖度等

微调不是件容易的事,需要大量硬件成本,时间成本,精力投入,反复调整训练参数和数据,并没有所有模型通用的标准固定训练参数或数据。部分参数,只能说根据过往经验和参数本身意义,有一个相对合理的范围。

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

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

相关文章

MySQL 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区别?

MySQL中的InnoDB存储引擎支持四种事务隔离级别,这些级别定义了事务在并发环境中的行为和相互之间的可见性。以下是这四种隔离级别的名称以及它们之间的区别: 读未提交(Read Uncommitted) 特点:这是最低的隔离级别&…

【YOLOv10改进[注意力]】引入并行分块注意力PPA(2024.3.16) + 适于微小目标

本文将进行在YOLOv10中引入并行分块注意力PPA魔改v10 的实践,文中含全部代码、详细修改方式。助您轻松理解改进的方法。 一 HCF 论文题目:Hierarchica

共建智能软件开发联合实验室,怿星科技助力东风柳汽加速智能化技术创新

11月14日,以“奋进70载,智创新纪元”为主题的2024东风柳汽第二届科技周在柳州盛大开幕,吸引了来自全国的汽车行业嘉宾、技术专家齐聚一堂,共襄盛举,一同探寻如何凭借 “新技术、新实力” 这一关键契机,为新…

在ubuntu下,使用Python画图,无法显示中文怎么解决

1.首先需要下载中文字体,推荐simsun,即宋体,地址如下 https://www.freefonts.io/download/simsun/ 2.下载完要把字体文件放进字体目录,具体方法如下; a.创建字体目录:sudo mkdir -p /usr/share/fonts/truet…

鸿蒙实战:使用显式Want启动Ability

文章目录 1. 实战概述2. 实现步骤2.1 创建鸿蒙应用项目2.2 修改Index.ets代码2.3 创建SecondAbility2.4 创建Second.ets 3. 测试效果4. 实战总结5. 拓展练习 - 启动文件管理器5.1 创建鸿蒙应用项目5.2 修改Index.ets代码5.3 测试应用运行效果 1. 实战概述 本实战详细阐述了在 …

《Python浪漫的烟花表白特效》

一、背景介绍 烟花象征着浪漫与激情,将它与表白结合在一起,会创造出别具一格的惊喜效果。使用Python的turtle模块,我们可以轻松绘制出动态的烟花特效,再配合文字表白,打造一段专属的浪漫体验。 接下来,让…

springboot中设计基于Redisson的分布式锁注解

如何使用AOP设计一个分布式锁注解&#xff1f; 1、在pom.xml中配置依赖 <dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>5.3.26</version></dependency><dependenc…

绕过CDN寻找真实IP

在新型涉网案件中&#xff0c;我们在搜集到目标主站之后常常需要获取对方网站的真实IP去进一步的信息搜集&#xff0c;但是现在网站大多都部署了CDN&#xff0c;将资源部署分发到边缘服务器&#xff0c;实现均衡负载&#xff0c;降低网络堵塞&#xff0c;让用户能够更快地访问自…

【Redis】redis缓存击穿,缓存雪崩,缓存穿透

一、什么是缓存&#xff1f; 缓存就是与数据交互中的缓冲区&#xff0c;它一般存储在内存中且读写效率高&#xff0c;提高响应时间提高并发性能&#xff0c;如果访问数据的话可以先访问缓存&#xff0c;避免数据查询直接操作数据库&#xff0c;造成后端压力过大。 但是可能会面…

linux复习5:C prog

编辑 缩排 为了使C源代码更加整洁易读&#xff0c;可以使用一些工具来自动格式化代码&#xff0c;例如cb&#xff08;C程序美化器&#xff09;、bcpp&#xff08;C美化器&#xff09;和indent等。 编译 编译并链接C文件 gcc hello.c -o hello 将 hello.c 编译并链接成可执行文…

uni-app快速入门(十)--常用内置组件(下)

本文介绍uni-app的textarea多行文本框组件、web-view组件、image图片组件、switch开关组件、audio音频组件、video视频组件。 一、textarea多行文本框组件 textarea组件在HTML 中相信大家非常熟悉&#xff0c;组件的官方介绍见&#xff1a; textarea | uni-app官网uni-app,un…

世界坐标系、相机坐标系、图像物理坐标系、像素平面坐标系

坐标系及其转换在计算机视觉领域占据核心地位。理解如何从一个坐标系转换到另一个坐标系&#xff0c;不仅是理论上的需要&#xff0c;也是实际应用中不可或缺的技能。 一、世界坐标系的定义 世界坐标系是一个全局的坐标系统&#xff0c;用于定义场景中物体的位置。在这个坐标…

机器学习笔记——聚类算法(Kmeans、GMM-使用EM优化)

本笔记介绍机器学习中常见的聚类算法&#xff08;Kmeans、GMM-使用EM优化&#xff09;。 文章目录 聚类K-Means工作原理特点 K-Medoids工作原理特点 Mini-Batch K-Means工作原理特点 K-Means&#xff08;重要&#xff09;工作原理特点 总结K的选值1. 肘部法则&#xff08;Elbow…

浅议Flink中的通讯工具: Akka

在Flink中&#xff0c;各个组件之间需要频繁交换数据和控制信息。Flink选择了基于Actor模型的Akka框架作为通信基础。 Akka是什么 Actor模型 Actor模型是用于单个进程中并发的场景。 在Actor模型中&#xff1a; ActorSystem负责管理actor生命周期 将每个实体视为独立的 Ac…

如何在react中使用react-monaco-editor渲染出一个编辑器

一、效果展示 二、基于vite配置 1.首先安装react-monaco-editor和monaco-editor包 npm add react-monaco-editor npm i monaco-editor 2.其次创建一个单独的文件&#xff08;此处是tsx、直接用app或者jsx也行&#xff09; import { useState, useEffect } from react impo…

孙玲:从流水线工人到谷歌程序员

这是《开发者说》的第24期&#xff0c;本期我们邀请的开发者是孙玲&#xff0c;她出生于湖南娄底一个贫穷的农村家庭&#xff0c;2009年高考落榜&#xff0c;她去了深圳一家电子厂&#xff0c;在流水线上给电池喷码&#xff0c;每天12个小时轮班&#xff0c;月薪2300&#xff0…

kali搭建pikachu靶场

前言&#xff1a; 总所周知搭个网站需要有apachemysqlphp&#xff0c;Apache是一个开源的Web服务器软件&#xff0c; MySQL是一种关系型数据库管理系统&#xff08;数据库&#xff09;&#xff0c;PHP是一种在服务器上执行的脚本语言 文章内容来自&#xff1a;【黑帽编程与攻…

android 使用MediaPlayer实现音乐播放--获取音乐数据

前面已经添加了权限&#xff0c;有权限后可以去数据库读取音乐文件&#xff0c;一般可以获取全部音乐、专辑、歌手、流派等。 1. 获取全部音乐数据 class MusicHelper {companion object {SuppressLint("Range")fun getMusic(context: Context): MutableList<Mu…

VMware Workstation 17.6.1

概述 目前 VMware Workstation Pro 发布了最新版 v17.6.1&#xff1a; 本月11号官宣&#xff1a;针对所有人免费提供&#xff0c;包括商业、教育和个人用户。 使用说明 软件安装 获取安装包后&#xff0c;双击默认安装即可&#xff1a; 一路单击下一步按钮&#xff1a; 等待…

Methode Electronics EDI 需求分析

Methode Electronics 是一家总部位于美国的全球性技术公司&#xff0c;专注于设计和制造用于多个行业的电子和电气组件&#xff0c;产品涵盖汽车、工业、电信、医疗设备以及消费电子等多个领域&#xff0c;提供创新的解决方案。 填写Methode_EDI_Parameters_Template Methode_…