9、LLaMA-Factory项目微调介绍

news2024/11/15 9:24:15

1、LLaMA Factory 介绍

  LLaMA Factory是一个在GitHub上开源的项目,该项目给自身的定位是:提供一个易于使用的大语言模型(LLM)微调框架,支持LLaMA、Baichuan、Qwen、ChatGLM等架构的大模型。更细致的看,该项目提供了从预训练、指令微调到RLHF阶段的开源微调解决方案。截止目前(2024年3月1日)支持约120+种不同的模型和内置了60+的数据集,同时封装出了非常高效和易用的开发者使用方法。而其中最让人喜欢的是其开发的LLaMA Board,这是一个零代码、可视化的一站式网页微调界面,它允许我们通过Web UI轻松设置各种微调过程中的超参数,且整个训练过程的实时进度都会在Web UI中进行同步更新。

  简单理解,通过该项目我们只需下载相应的模型,并根据项目要求准备符合标准的微调数据集,即可快速开始微调过程,而这样的操作可以有效地将特定领域的知识注入到通用模型中,增强模型对特定知识领域的理解和认知能力,以达到“通用模型到垂直模型的快速转变”。

  LLaMA Factory的GitHub地址如下:https://github.com/hiyouga/LLaMA-Factory/tree/main

  LLaMA-Factory目前支持微调的模型及对应的参数量:

模型名模型大小Template
Baichuan 27B/13Bbaichuan2
BLOOM/BLOOMZ560M/1.1B/1.7B/3B/7.1B/176B-
ChatGLM36Bchatglm3
Command R35B/104Bcohere
DeepSeek (Code/MoE)7B/16B/67B/236Bdeepseek
Falcon7B/11B/40B/180Bfalcon
Gemma/Gemma 2/CodeGemma2B/7B/9B/27Bgemma
GLM-49Bglm4
InternLM2/InternLM2.57B/20Bintern2
Llama7B/13B/33B/65B-
Llama 27B/13B/70Bllama2
Llama 3/Llama 3.18B/70Bllama3
LLaVA-1.57B/13Bvicuna
MiniCPM1B/2Bcpm
Mistral/Mixtral7B/8x7B/8x22Bmistral
OLMo1B/7B-
PaliGemma3Bgemma
Phi-1.5/Phi-21.3B/2.7B-
Phi-34B/7B/14Bphi
Qwen/Qwen1.5/Qwen2 (Code/Math/MoE)0.5B/1.5B/4B/7B/14B/32B/72B/110Bqwen
StarCoder 23B/7B/15B-
XVERSE7B/13B/65Bxverse
Yi/Yi-1.56B/9B/34Byi
Yi-VL6B/34Byi_vl
Yuan 22B/51B/102Byuan

  可以看到,当前主流的开源大模型,包括ChatGLM3、Qwen的第一代以及最新的2版本,还有Biachuan2等,已经完全支持不同规模的参数量。针对LLaMA架构的系列模型,该项目已经基本实现了全面的适配。而其支持的训练方法,也主要围绕(增量)预训练、指令监督微调、奖励模型训练、PPO 训练和 DPO 训练展开,具体情况如下:

方法全参数训练部分参数训练LoRAQLoRA
预训练(Pre-Training)
指令监督微调(Supervised Fine-Tuning)
奖励模型训练(Reward Modeling)
PPO 训练(PPO Training)
DPO 训练(DPO Training)

  最后且最关键的一点需特别指出:虽然LLaMA-Factory项目允许我们在120余种大模型中灵活选择并快速开启微调工作,但运行特定参数量的模型是否可行,仍然取决于本地硬件资源是否充足。因此,在选择模型进行实践前,大家必须仔细参照下表,结合自己的服务器配置来决定,以避免因硬件资源不足导致的内存溢出等问题。不同模型参数在不同训练方法下的显存占用情况如下:

训练方法精度7B13B30B65B
全参数16160GB320GB600GB1200GB
部分参数1620GB40GB120GB240GB
LoRA1616GB32GB80GB160GB
QLoRA810GB16GB40GB80GB
QLoRA46GB12GB24GB48GB

关于微调理论我们会在后面专门写文章解释

2、LLaMA-Factory私有化部署

  作为GitHub上的开源项目,LLaMA-Factory的本地私有化部署过程与我们之前介绍的大模型部署大体相同,主要包括创建Python虚拟环境、下载项目文件及安装所需的依赖包。这一过程相对直观。但在开始部署之前,我们需要先了解LLaMA-Factory私有化部署对本地软硬件环境的具体要求:

  • Python >= 3.8版本,建议Python3.10版本以上
  • PyTorch >= 1.13.1版本,建议 Pytorch 版本为 2.2.1
  • transformers >= 4.37.2,建议 transformers 版本为 4.38.1
  • CUDA >= 11.6,建议CUDA版本为12.2

2.1 创建虚拟环境

创建LLaMA-Factory的Python虚拟环境

 conda create  --name llama_factory python==3.11

在这里插入图片描述
  如上所示,新创建了一个名为LLaMA-Factory的Python虚拟环境,其Python版本为3.11。创建完成后,通过如下命令进入该虚拟环境,执行后续的操作:

conda activate llama_factory

在这里插入图片描述

2.2 安装Pytorch

  建议先自己根据CUDA版本要求安装Pytorch,如果按照llama_factory官网安装默认是支持CPU的版本,地址:https://pytorch.org/get-started/previous-versions/**

  这里根据自己电脑显卡驱动的CUDA版本要求,在Pytorch官网中找到适合自己的Pytorch安装命令。

    conda install pytorch==2.2.0 torchvision==0.17.0 torchaudio==2.2.0 pytorch-cuda=12.1 -c pytorch -c nvidia

  待安装完成后,如果想要检查是否成功安装了GPU版本的PyTorch,可以通过几个简单的步骤在Python环境中进行验证:

    import torch
    print(torch.cuda.is_available())

在这里插入图片描述
  如果输出是 True,则表示GPU版本的PyTorch已经安装成功并且可以使用CUDA,如果输出是False,则表明没有安装GPU版本的PyTorch,或者CUDA环境没有正确配置,此时根据教程,重新检查自己的执行过程。

2.3 下载LLaMA-Factory项目文件

  进入LLaMA-Factory的官方Github,地址:https://github.com/hiyouga/LLaMA-Factory , 在 GitHub 上将项目文件下载到有两种方式:克隆 (Clone) 和 下载 ZIP 压缩包。推荐使用克隆 (Clone)的方式。我们首先在GitHub上找到其仓库的URL。

  执行克隆命令,将LLaMA-Factory Github上的项目文件下载至本地的当前路径下,如下:

    git clone https://github.com/hiyouga/LLaMA-Factory.git

如果网络不通或者其他原因无法下载,就下载zip文件解压到本地目录,或者上传到服务器。

  建议在执行项目的依赖安装之前升级 pip 的版本,如果使用的是旧版本的 pip,可能无法安装一些最新的包,或者可能无法正确解析依赖关系。升级 pip 很简单,只需要运行命令如下命令:

python -m pip install --upgrade pip

2.4 安装LLaMA-Factory项目代码运行的项目依赖

  在LLaMA-Factory中提供的 requirements.txt文件包含了项目运行所必需的所有 Python 包及其精确版本号。使用pip一次性安装所有必需的依赖,执行命令如下:

cd LLaMA-Factory
pip install -e ".[torch,metrics]"

在这里插入图片描述
  如果不具备科学上网环境,还想通过在线的方式下载大模型,可以将模型下载源指向国内的ModelScope社区。这需要先中断当前的LLaMA-Board的后台服务,具体操作如下:

    # Linux操作系统, 如果是 Windows 使用 `set USE_MODELSCOPE_HUB=1`
    export USE_MODELSCOPE_HUB=1 
    CUDA_VISIBLE_DEVICES=0 llamafactory-cli webui

  通过上述步骤就已经完成了LLaMA-Factory模型的完整私有化部署过程。接下来,我们将详细介绍如何借助LLaMA-Factory项目执行ChaGLM3、Qwen和Baichuan2系列模型的微调和使用。

2.5 chat

先选择一个简单的模型进行测试,我们选择Qwen2-0.5B-Chat
在这里插入图片描述
可以在界面进行简单的对话
在这里插入图片描述

2.6 微调

选择数据集,注意我们启动命令时一定要在LLaMA-Factory目录下,不然数据会加载失败。选择预置的数据,支持预览查看,需要特定的数据格式,如果是自定义数据也需要按照这种格式来进行配置。
在这里插入图片描述

界面展示
在这里插入图片描述
训练过程
在这里插入图片描述

显存占用
在这里插入图片描述
显存全部占满

  经过LoRA微调生成的Adapter权重和其相对应的配置文件,其存放在服务器下

/root/LLaMA-Factory-main/saves/Qwen2-0.5B-Chat/lora/train_2024-08-28-15-12-01

在这里插入图片描述

2.7 使用微调模型

  对于LoRA微调,训练结束后如果想使用其微调后的模型,在LLaMA Board上也可以非常方便的加载,具体使用的过程如下:
在这里插入图片描述
在这里插入图片描述
  通过上述步骤,我们可以完整地实现微调流程,且整个过程均可通过页面端完成,整体用户体验非常良好。大家也可以根据上述的流程,尝试对ChatGLM3-6B和Biachuan2系列模型进行LoRA或QLoRA微调,或者其他支持的系列模型。

2.8 合并导出

当然,除了分步加载微调后得到的Adapter 和 原始模型,在LLaMA Board上还可以一键进行模型权重的合并,具体操作如下:

在这里插入图片描述
导出后可以在主目录中查看
在这里插入图片描述

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

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

相关文章

UG NX二次开发(C++)-获取曲面的相切曲面

文章目录 1、前言2、创建一个三维模型3、获取相切曲面的方法3、测试结果1、前言 最近一段时间,QQ群中的群友总问我一个问题,那就是如何获取曲面的相切曲面,我今天就把这个方法写出来,以帮助读者。 在UG二次开发中,查询了帮助文档,没有找到获取相切曲面的函数。所以采用N…

「C++系列」继承

文章目录 一、继承1. 基本概念2. 继承类型①公有继承(Public Inheritance)②私有继承(Private Inheritance)③保护继承(Protected Inheritance) 3. 继承的语法4. 构造函数和析构函数①构造函数案例②析构函…

单链表的问题(2)

1.对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。 给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。 这个我们可以运用双指针来解决这个…

爆改YOLOv8|利用全新的聚焦式线性注意力模块Focused Linear Attention 改进yolov8(v1)

1,本文介绍 全新的聚焦线性注意力模块(Focused Linear Attention)是一种旨在提高计算效率和准确性的注意力机制。传统的自注意力机制在处理长序列数据时通常计算复杂度较高,限制了其在大规模数据上的应用。聚焦线性注意力模块则通…

EmguCV学习笔记 C# 7.1 角点检测

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

Excel中让第一行始终显示

要在Excel中让第一行始终显示,你可以使用冻结窗格功能。具体步骤如下: 打开需要设置第一行一直显示的工作表。将光标定位在工作表内任意一个单元格内。选择“视图”菜单,单击工具栏中的“冻结窗格”命令。在弹出的下拉菜单中选择“冻结首行”…

字母的大小写转换(tolower、toupper、transform)

字母的大小写转换(tolower、toupper、transform) 1. tolower()、toupper()函数 (这个在之前的一篇文章 “字符串中需要掌握的函数总结(1)”中有较为详细的介绍。&#…

时利和:如何提升工装夹具的加工质量?

在机械加工领域,工装夹具起着至关重要的作用。它不仅能够提高生产效率,还能保证加工精度,确保产品质量的稳定性。那么,如何提升工装夹具的加工质量呢?以下是时利和整理分享的几个关键因素。 一、精准的设计 工装夹具的设计是决定…

使用物联网卡访问萤石云的常见问题

使用物联网卡接入萤石开放平台时经常遇到各种问题,这边总结了常见的一些 用的是哪家运营商的卡? 电信 移动 联通(申请的时候可以自主选择) 卡有什么限制? 定向流量卡,只能访问萤石云平台,只能…

完美解决Jenkins重启后自动杀掉衍生进程(子进程)问题

完美解决Jenkins重启后自动杀掉衍生进程(子进程)问题 本文中使用的Jenkins版本为Version 2.452.3 先罗列一下前置问题:Jenkins任务构建完成自动杀掉衍生进程 用过Jenkins的都知道,Jenkins任务构建完成后,是会自动杀掉衍生进程,这…

安卓AppBarLayout与ViewPager2里的fragment里的webview滑动冲突

今天开发遇见一个头痛的问题,就是AppBarLayout和webview会存在一个冲突问题。如图下 问题出现在webview推到顶端的时候,AppBarLayout并不会跟着响应伸缩,解决办法是 在 webview 包 一个 父的 NestedScrollView 就能解决了。 运行效果入下 更改…

单向链表和双向链表的一些基本算法

单向链表头插尾插 单向链表的销毁与反转 反转原理:将头节点与后面的节点分开,然后从第一个节点开始对每个节点使用头插法 冒泡排 选排 链表环: 判断是否有环:弗洛伊德快慢指针(快指针一般是慢指针的2倍,差为…

Selenium(HTML基础)

一、HTML基础 (在学习自动化时,保证能看懂) 1.1.HTML介绍 英文是HyperText Markup Language,译为:超文本标记语言是Internet上用于设计网页的主要语言,2008年发布了HTML5.0,是目前互联网的标准,并作为互联…

数据结构之 “单链表“

(1)在顺表表中,如果是头插/删的时间复杂度是O(1);尾插/删的时间复杂度是O(N) (2)增容一般是呈2倍的增长,势必会有一定的空间浪费。比如:申请了50个空间,只用了两个&#…

【Matlab】SSA-BP麻雀搜索算法优化BP神经网络回归预测 可预测未来(附代码)

资源下载: 资源合集: 目录 一,概述 传统的BP神经网络存在一些问题,比如容易陷入局部最优解、训练速度慢等。为了解决这些问题,我们引入了麻雀算法作为优化方法,将其与BP神经网络相结合,提出了…

精准高效,省时省力——2024年翻译工具新趋势

如果你收到一份外文文档,但是你看不懂急需翻译成中文,将文档内容复制粘贴到翻译的的窗口获得中文内容是不是很麻烦。我了解到了deepl翻译文档之后还认识了不少的翻译神器,这次分享给你一起试试吧。 第一款福晰在线翻译 链接直达>>htt…

3D工艺大师:精准助力医疗设备远程维修

医疗设备是现代医疗体系中不可或缺的重要工具,它们帮助医生更准确地诊断病情,更有效地进行治疗。但随着技术的进步,这些设备变得越来越复杂,维修起来也面临诸多挑战。 首先,医疗设备结构复杂,零件众多&…

【Material-UI】Rating组件中的Rating precision属性

文章目录 一、Rating组件概述1. 组件简介2. precision属性的作用 二、Rating precision的基本用法三、Rating precision属性详解1. 精度选择的意义2. 如何在项目中选择合适的精度 四、Rating precision属性的实际应用场景1. 电商平台中的应用2. 电影评分应用3. 专业评测网站 五…

[Tomcat源码解析]——热部署和热加载原理

热部署 在Tomcat中可以通过Host标签设置热部署,当 autoDeploy为true时,在运行中的Tomcat中丢入一个war包,那么Tomcat不需要重启就可以自动加载该war包。 <Host name="localhost" appBase="webapps"unpackWARs="true" autoDeploy="…

Ubuntu18.04 下安装CUDA

安装步骤 1.查看是否安装了cuda # 法1 cat /usr/local/cuda/version.txt # 法2 nvcc --version 2.若没有安装&#xff0c;则查看是否有N卡驱动&#xff0c;若无N卡驱动&#xff0c;则到软件与更新 -> 附加驱动中安装驱动 3.查看N卡驱动支持的cuda版本 nvidia-smi 如下…