使用LoRA对大语言模型LLaMA做Fine-tune

news2024/11/6 3:00:24

使用LoRA对大语言模型LLaMA做Fine-tune

    • 前言
    • 下载
    • 配置环境
    • 模型的训练 Fine-tune
    • 模型的使用 Inference
    • 参考

前言

  • 目前有大量对LLM(大语言模型)做Fine-tune的方式,不过需要消耗的资源非常高,例如

    • Stanford Alpaca: 对LLaMA-7B做Fine-tune,需要4颗A100 (80GB) GPU
    • FastChat/Vicuna: 对LLaMA-7B做Fine-tune,需要4颗A100 (40GB) GPU
  • 这种资源需求令普通的学习者望而却步,使用LoRA则可以较好的解决这个问题

  • LoRA全称为Low-Rank Adaptation of Large Language Models,是一种模拟Full Fine-tune的特殊方法:不改变原模型的情况下,在旁边增加一个降维和升维操作来模拟intrinsic rank,从而达到和Full Fine-tune几乎一样的效果。(具体原理请自行查找。另外,提一下:LoRA原本是用于LLM的,不过目前在StableDiffusion上也得到了非常好的应用。)
    LoRA

  • LoRA 的最大优势是速度快、内存消耗少。Alpaca-LoRA使用一颗RTX 4090即可实现对LLaMA-7B的Fine-tune,目前也有很多网友使用单颗RTX 4070 Ti、RTX 4080完成过训练。

  • 下面就来说说整个训练过程。

  • 我使用的设备是3颗老旧的Tesla 4T(不要问我为什么用推理专用GPU做训练),信息如下

    (base) [root@xxx-yyy-gpu ~]# nvidia-smi 
    Mon May 29 16:29:50 2023       
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 460.91.03    Driver Version: 460.91.03    CUDA Version: 11.2     |
    |-------------------------------+----------------------+----------------------+
    | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
    |                               |                      |               MIG M. |
    |===============================+======================+======================|
    |   0  Tesla T4            Off  | 00000000:3B:00.0 Off |                    0 |
    | N/A   60C    P0    67W /  70W |   9344MiB / 15109MiB |     99%      Default |
    |                               |                      |                  N/A |
    +-------------------------------+----------------------+----------------------+
    |   1  Tesla T4            Off  | 00000000:AF:00.0 Off |                    0 |
    | N/A   64C    P0    68W /  70W |   9344MiB / 15109MiB |     91%      Default |
    |                               |                      |                  N/A |
    +-------------------------------+----------------------+----------------------+
    |   2  Tesla T4            Off  | 00000000:D8:00.0 Off |                    0 |
    | N/A   63C    P0    70W /  70W |   9344MiB / 15109MiB |    100%      Default |
    |                               |                      |                  N/A |
    +-------------------------------+----------------------+----------------------+
                                                                                   
    +-----------------------------------------------------------------------------+
    | Processes:                                                                  |
    |  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
    |        ID   ID                                                   Usage      |
    |=============================================================================|
    |    0   N/A  N/A    516641      C   ...a3/envs/alpaca/bin/python     9341MiB |
    |    1   N/A  N/A    516642      C   ...a3/envs/alpaca/bin/python     9341MiB |
    |    2   N/A  N/A    516643      C   ...a3/envs/alpaca/bin/python     9341MiB |
    +-----------------------------------------------------------------------------+
    (base) [root@xxx-yyy-gpu ~]# 
    

下载

  • LLaMA模型文件(decapoda-research/llama-7b-hf,非MetaAI官方)
    • 下载地址:https://huggingface.co/decapoda-research/llama-7b-hf/tree/main
    • 点击下载按钮即可(每个文件),全部保存到同一个目录。
    • 如果你的环境是联网的,可以不下载,后续会在运行训练阶段自动下载
  • Alpaca-LoRA项目
    • 地址:https://github.com/tloen/alpaca-lora
    • 下载该项目代码,我们需要使用到该项目写好的finetune.py代码
    • 稍后还需安装该项目下requirements.txt中的依赖
  • 训练用的数据集
    • 地址:https://github.com/LC1332/Chinese-alpaca-lora/tree/main/data
    • 下载trans_chinese_alpaca_data.json文件,这是该项目翻译为中文的对话数据
    • 你也可以按照该格式构建出自己的数据集,做出自己的专业领域模型(例如中文医学对话)
  • Anaconda、Python、PyTorch
    • Anaconda 是Python虚拟环境管理工具,我用的 Miniconda,请自行安装
    • Python 用的3.9版本,先不下载,等下用conda创建
    • PyTorch 用的1.13.1版本,先不下载,等下安装

配置环境

  • 安装Python、PyTorch
    • 利用Miniconda创建Python虚拟环境,命令$ conda create -n alpaca python=3.9
    • 进入该环境,命令$ conda activate alpaca
    • 安装PyTorch,命令如下(二选一)
      • Conda方式:$ conda install pytorch==1.13.1 torchvision==0.14.1 torchaudio==0.13.1 pytorch-cuda=11.6 -c pytorch -c nvidia
      • Pip方式:$ pip3 install torch==1.13.1+cu116 torchvision==0.14.1+cu116 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu116
  • 安装项目的Python依赖
    • 在刚才新创建的Python虚拟环境alpaca中,如果直接安装alpaca-lora项目下的requirements.txt,可能会漏掉一些依赖包。你可以试试,操作如下
      • 进入到alpaca-lora项目目录下,命令$ pip install -r requirements.txt
    • 建议直接这样安装,命令$ pip install accelerate appdirs loralib black datasets fire peft transformers sentencepiece gradio scipy bitsandbytes
    • 注意看requirements.txt文件中的描述,transformers需要>=4.28.0
    • transformers库用于加载、训练、保存模型,peft库则是用于帮助你使用LoRA的
  • 准备好资源
    • 请将下载好的“LLaMA模型文件”放置一个文件夹内(没下载就不管,等下会自动下),如/root/.cache/huggingface/hub/models--decapoda-research--llama-7b-hf
    • 请将下载好的“Alpaca-LoRA项目”放置一个文件夹内,如/home/gpt/alpaca-lora
    • 请将下载好的“训练用的数据集”放置一个文件夹内,如/home/gpt/data/trans_chinese_alpaca_data.json

模型的训练 Fine-tune

  • 进入到Alpaca-LoRA项目目录下

  • 若是单个显卡,训练命令样例如下

    python finetune.py \
        --base_model 'decapoda-research/llama-7b-hf' \
        --data_path '/home/gpt/data/trans_chinese_alpaca_data.json' \
        --output_dir './my_model_save'
    
    • -base_model 是预训练模型LLaMA在huggingface的标识或本地存储路径
    • --data_path 是训练用的数据的路径
    • --output_dir 是训练完成后模型的保存路径
  • 若是多个显卡,训练命令样例如下

    WORLD_SIZE=3 CUDA_VISIBLE_DEVICES=0,1,2
    
    torchrun \
    --nproc_per_node=3 \
    --master_port=1234 \
    finetune.py \
    --base_model 'decapoda-research/llama-7b-hf' \
    --data_path '/home/gpt/data/trans_chinese_alpaca_data.json' \
    --output_dir './my_model_save' \
    --micro_batch_size 2 \
    --num_epochs 2
    
    • WORLD_SIZE 是全局进程数(一般一个显卡对应一个进程)
    • CUDA_VISIBLE_DEVICES 是具体的几张显卡的ID
    • --nproc_per_node 是每个物理节点上面进程的数量
    • --micro_batch_size 是微批次的数,越大占用内存越高,请根据你的情况调整
    • --num_epochs 是训练轮数,2个epoch基本上可以达到较好的效果
  • 环境有网络的话,正常情况下会自动下载LLaMA模型文件,接着就开始训练了

  • 如果没网,但之前单独下载了LLaMA模型文件,需要

    • 设置transformers、datasets库的离线模式,在SHELL中添加变量,命令$ HF_DATASETS_OFFLINE=1 TRANSFORMERS_OFFLINE=1
    • 指定LLaMA模型文件路径,例如将--base_model 'decapoda-research/llama-7b-hf'改为--base_model '/root/.cache/huggingface/hub/models--decapoda-research--llama-7b-hf'
  • 我因为一些特殊情况,训练时必须离线,所以我的最终命令如下

    WORLD_SIZE=3 CUDA_VISIBLE_DEVICES=0,1,2 HF_DATASETS_OFFLINE=1 TRANSFORMERS_OFFLINE=1 
    
    torchrun \
    --nproc_per_node=3 \
    --master_port=1234 \
    finetune.py \
    --base_model '/root/.cache/huggingface/hub/models--decapoda-research--llama-7b-hf' \
    --data_path '/home/gpt/data/trans_chinese_alpaca_data.json' \
    --output_dir './my_model_save' \
    --micro_batch_size 2 \
    --num_epochs 2
    
  • 训练过程的输出如下(--num_epochs 1时的样例)
    train_01
    train_02
    train_03

  • 设备监控信息样例如下(用的 nvitop
    gpu

模型的使用 Inference

  • 命令如下
python generate.py \
--base_model "decapoda-research/llama-7b-hf" \
--lora_weights './my_model_save' \
--load_8bit
  • 后续补充详细的

参考

  • Alpaca-LoRA: https://github.com/tloen/alpaca-lora
  • Stanford Alpaca: https://github.com/tatsu-lab/stanford_alpaca
  • Chinese-alpaca-lora: https://github.com/LC1332/Chinese-alpaca-lora
  • FastChat: https://github.com/lm-sys/FastChat

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

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

相关文章

springboot + vue3实现视频播放Demo(video.js Vue3-video-play)

文章目录 学习链接前言ffmpeg安装ffmpeg配置环境变量分割视频文件 后台配置WebConfig 前端代码video.js示例安装依赖视频播放组件效果 Vue3-video-play示例安装依赖main.js中使用视频播放组件效果 学习链接 ffmpeg官网 长时长视频java存储及vue播放解决方法 【 攻城略地 】vue…

物联网GPRS模块流量计算

物联网GPRS模块流量计算 MQTT(消息队列遥测传输) 是ISO 标准下一个基于TCP/IP的消息发布/订阅传输协议。 一、TCP消耗流量计算 以太网数据包结构: 以太网首部 IP首部 TCP首部 APPL首部 用户数据 以太网尾部 以太网首部为14个字节 IP首部为20个字节 TCP首部…

阿里云对象oss

1\RAM 首页 https://ram.console.aliyun.com/overview 点击用户进去 点击里面的一个用户,然后新建 id 和secret 上面灰色按钮,因为我已经绑定了两个。 "yourAccessKeyId", "yourAccessKeySecret" 这两个参数就对应上了 // 阿里云账…

【详解Collection接口、迭代器和Colletions工具类】

🌠作者:TheMythWS. 🎆专栏:《集合与数据结构》 🎇座右铭:不走心的努力都是在敷衍自己,让自己所做的选择,熠熠发光。 目录 👀Collection接口的常用方法 💨…

java循环结构

文章目录 一、Java 循环结构 - for, while 及 do...while1、while 循环2、do…while 循环3、for循环4、break 关键字5、continue 关键字 总结 一、Java 循环结构 - for, while 及 do…while 顺序结构的程序语句只能被执行一次。 如果您想要同样的操作执行多次,就需…

企业bpm业务流程管理系统网站如何在外网访问?

企业在已有ERP系统的基础上去实施BPM业务流程管理系统,是非常有必要的。什么是BPM业务流程管理系统呢? BPM是英文BPM-Business Process Management的缩写,指的是通过对企业内部及外部业务流程的整个生命周期进行建模、自动化、管理监控和优化…

2023年6月18日DAMA-CDGA/CDGP认证北京/上海/深圳报名

DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义,帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力,促进开展工作实践应用及实际问题解决,形成企业所需的新数字经济下的核心职业…

[NOIP2004 普及组] FBI 树 递归解法

[NOIP2004 普及组] FBI 树 题目描述: 我们可以把由 0 和 1 组成的字符串分为三类:全 0 串称为 B 串,全 1 串称为 I 串,既含 0 又含 1 的串则称为 F 串。 FBI 树是一种二叉树,它的结点类型也包括 F 结点,B 结点和 I …

SpringMVC 学习笔记

SpringMVC 学习笔记 1、回顾MVC1.1、什么是MVC1.2、Model1时代1.3、Model2时代1.4、回顾Servlet 2、什么是SpringMVC2.1、概述2.2、中心控制器2.3、SpringMVC执行原理 【重要】 3、HelloSpring3.1、配置版3.2、注解版3.3、小结 4、Controller 及 RestFul4.1、Controller 控制器…

2.算法与数据结构

算法与数据结构 文章目录 算法与数据结构一、算法相关1、十大排序算法总结冒泡排序插入排序选择排序快速排序基数排序桶排序希尔排序归并排序堆排序 2、经典算法介绍递归算法回溯算法贪心算法深度优先遍历广度优先遍历动态规划算法 3、常见算法1、迪杰斯特拉(Dijkstra)算法介绍…

C++中的函数组合:用std::function实现编程艺术

C中的函数组合:用std::function实现编程艺术 1. 引言1.1 C中的函数式编程 (Functional Programming in C)1.2 函数组合的概念和价值 (Concept and Value of Function Composition)1.3 std::function概述 (Overview of std::function) 2. 如何在C中实现函数组合 (Imp…

【网络协议详解】——万维网WWW系统协议(学习笔记)

目录 🕒 1. 概述🕒 2. 文本传输协议HTTP🕒 3. HTTP的报文格式🕒 4. Cookie🕒 5. 万维网缓冲与代理服务器 🕒 1. 概述 万维网www(World Wide Web)并非某种特殊的计算机网络。它是一个…

两个iframe同时滚动实现界面内容对比功能

背景:因为要实现一个版本对比功能,所以要保证两个界面能同时滚动。(本文只讲同时滚动,对比功能文本只讲思路,具体代码实现如有需要 可以联系我),因为过程中有部分收获特此记录。 本文参考&…

Jetson硬件 升级jetpack系统 版本流程

前言: 准备一个linux系统电脑,一个跳线帽,以及一条usb线 以及英伟达开发者账号,点击https://developer.nvidia.com/zh-cn/embedded/jetpack进行注册 注意:烧录的目标硬件是以前装过低版本的jetpack,以下步…

工业自动化新引擎:工业机器人引领制造业转型升级

自2010年开始,我国15-64岁人口比例下滑,截至2022年我国总人数出现负增长,同比下滑0.1%,因人口老龄化加剧和出生率的持续走低,致使进入生产体系的劳动力越来越少。 随着我国经济进入新常态,制造业面临着产能…

通过训练NLP制作一个自己的简易输入法

最近开始研究NLP,然后根据手写CV UP主的视频,写了一个N Gram的NLP模型,算是该领域里的hello world吧。然后我又添加了几行代码实现了一个非常简易的输入法。 项目说明: 数据集可以自创,导入txt文件即可; …

K8s in Action 阅读笔记——【6】Volumes: attaching disk storage to containers

K8s in Action 阅读笔记——【6】Volumes: attaching disk storage to containers 在前三章中,我们介绍了Pods以及它们与ReplicationControllers、ReplicaSets、DaemonSets、Jobs和Services等Kubernetes资源的交互。现在,我们将回到Pod内部,…

【java 基础一】 纯语法基础记录

一、基础 1.1 变量 Java 变量是程序中存储数据的容器。 在 Java 中,变量需要先声明再使用,并且必须先声明再赋值。 声明变量:声明变量时需要指定变量的类型、名称和初始值。例如,声明一个整型变量可以如下所示: in…

水处理施工方案合集

编制说明及工程简介 (一) 编制说明 本施工组织设计是依据建设单位提供的招标文件、施工图、同类工程施工资料和国家有关施工规范及验收标准进行编制的。本施工组织设计针对本工程施工中的关键点、难点及其处理措施,主要施工方法,施工组织部署&#xff…

如何理解 CRM 客户关系管理系统?

如何理解 CRM 客户关系管理系统? CRM的作用不止是工具,根据用户和对象的不同,CRM创造的价值也是不同的。 打个比方: 有的企业是用CRM来管理客户信息;有的企业是用CRM来获取流量的;有的企业是用CRM来做销售管理的;还…