Llama 3 模型微调的步骤

环境准备

操作系统:Ubuntu 22.04.5 LTS
Anaconda3:Miniconda3-latest-Linux-x86_64
GPU: NVIDIA GeForce RTX 4090 24G

Step 1. 准备conda环境

创建一个新的conda环境:

conda create --name llama_factory python=3.11

激活刚刚创建的conda环境:

conda activate llama_factory

Step 2. 下载LLaMA-Factory的项目文件

下载LLama_Factory源码:

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

Step 3. 升级pip版本

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

python -m pip install --upgrade pip

Step 4. 使用pip安装LLaMA-Factory项目代码运行的项目依赖

pip install -r requirements.txt --index-url https://mirrors.huaweicloud.com/repository/pypi/simple

Step 5. Llama3模型下载

在~/ai-test/创建如下目录:

mkdir model

存放模型文件

cd model

可以从下面地址中下载模型文件,这里我们从ModelScope来下载

huggingface Llama3模型主页:

https://huggingface.co/meta-llama/

Github主页:

https://github.com/meta-llama/llama3/tree/main

ModelScope Llama3-8b模型主页:

https://www.modelscope.cn/models/LLM-Research/Meta-Llama-3-8B-Instruct/summary

git clone https://www.modelscope.cn/LLM-Research/Meta-Llama-3-8B-Instruct.git

Step 6. 运行原始模型

切换到LLama_Factory目录下

cd ~/ai-test/LLaMA-Factory
CUDA_VISIBLE_DEVICES=0  python src/web_demo.py \
    --model_name_or_path /home/oneview/ai-test/model/Meta-Llama-3-8B-Instruct \
    --template llama3 \
    --infer_backend vllm \
    --vllm_enforce_eager

访问http://127.0.0.1:8000输入“你好,请介绍下你自己”,可以发现模型还不具备中文处理能力,后面我们将用中文数据集对模型进行微调。
在这里插入图片描述
通过上述步骤就已经完成了LLaMA-Factory模型的完整私有化部署过程。

接下来是微调的步骤

在这里插入图片描述

Step 1. 查看微调中文数据集数据字典

我们找到./LLaMA-Factory目录下的data文件夹:
在这里插入图片描述
查看dataset_info.json:

在这里插入图片描述

找到当前数据集名称:alpaca_zh。数据集情况如下:
在这里插入图片描述

Step 2. 创建微调脚本

切换到./LLaMA-Factory目录,创建一个名为single_lora_llama3.sh的脚本(脚本的名字可以自由命名)。

#!/bin/bash
export CUDA_DEVICE_MAX_CONNECTIONS=1
export NCCL_P2P_DISABLE="1"
export NCCL_IB_DISABLE="1"


# 如果是预训练,添加参数       --stage pt \
# 如果是指令监督微调,添加参数  --stage sft \
# 如果是奖励模型训练,添加参数  --stage rm \
# 添加 --quantization_bit 4 就是4bit量化的QLoRA微调,不添加此参数就是LoRA微调 \



CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \   ## 单卡运行
  --stage sft \                                     ## --stage pt (预训练模式)  --stage sft(指令监督模式)
  --do_train True \                                 ## 执行训练模型
  --model_name_or_path /home/oneview/ai-test/model/Meta-Llama-3-8B-Instruct \     ## 模型的存储路径
  --dataset alpaca_zh \                                ## 训练数据的存储路径,存放在 LLaMA-Factory/data路径下
  --template llama3 \                                 ## 选择Qwen模版
  --lora_target q_proj,v_proj \                     ## 默认模块应作为
  --output_dir /home/oneview/ai-test/Llama3/output \        ## 微调后的模型保存路径
  --overwrite_cache \                               ## 是否忽略并覆盖已存在的缓存数据
  --per_device_train_batch_size 2 \                 ## 用于训练的批处理大小。可根据 GPU 显存大小自行设置。
  --gradient_accumulation_steps 64 \                 ##  梯度累加次数
  --lr_scheduler_type cosine \                      ## 指定学习率调度器的类型
  --logging_steps 5 \                               ## 指定了每隔多少训练步骤记录一次日志。这包括损失、学习率以及其他重要的训练指标,有助于监控训练过程。
  --save_steps 100 \                                ## 每隔多少训练步骤保存一次模型。这是模型保存和检查点创建的频率,允许你在训练过程中定期保存模型的状态
  --learning_rate 5e-5 \                            ## 学习率
  --num_train_epochs 1.0 \                          ## 指定了训练过程将遍历整个数据集的次数。一个epoch表示模型已经看过一次所有的训练数据。
  --finetuning_type lora \                          ## 参数指定了微调的类型,lora代表使用LoRA(Low-Rank Adaptation)技术进行微调。
  --fp16 \                                          ## 开启半精度浮点数训练
  --lora_rank 4 \                                   ## 在使用LoRA微调时设置LoRA适应层的秩。

注:实际脚本文件最好不要出现中文备注,否则容易出现编辑格式导致的问题。

然后为了保险起见,我们需要对齐格式内容进行调整,以满足Ubuntu操作系统运行需要(此前是从Windows系统上复制过去的文件,一般都需要进行如此操作):

sed -i 's/\r$//' ./single_lora_llama3.sh

Step 3. 运行微调脚本,获取模型微调权重

当我们准备好微调脚本之后,接下来即可围绕当前模型进行微调了。这里我们直接在命令行中执行sh文件即可,注意运行前需要为该文件增加权限:

  
chmod +x ./single_lora_llama3.sh
./single_lora_llama3.sh

当微调结束之后,我们就可以在当前主目录下看到新的模型权重文件:

在这里插入图片描述

Step 4. 合并模型权重,获得微调模型

接下来我们需要将该模型权重文件和此前的原始模型权重文件进行合并,才能获得最终的微调模型。LlaMa-Factory中已经为我们提供了非常完整的模型合并方法,同样,我们只需要编写脚本文件来执行合并操作即可,即llama3_merge_model.sh。同样,该脚本文件也可以按照此前single_lora_llama3.sh脚本相类似的操作,就是将课件中提供的脚本直接上传到Jupyter主目录下,再复制到LlaMa-Factory主目录下进行运行。

首先简单查看llama3_merge_model.sh脚本文件内容:

#!/bin/bash

python src/export_model.py \               ## 用于执行合并功能的Python代码文件
  --model_name_or_path /home/oneview/ai-test/model/Meta-Llama-3-8B-Instruct \  ## 原始模型文件
  --adapter_name_or_path /home/oneview/ai-test/Llama3/output \                ## 微调模型权重文件
  --template llama3 \                        ## 模型模板名称
  --finetuning_type lora \                 ## 微调框架名称
  --export_dir  /home/oneview/ai-test/Llama3/output_lora \                          ## 合并后新模型文件位置
  --export_size 2 \
  --export_legacy_format false

注:实际脚本文件最好不要出现中文备注,否则容易出现编辑格式导致的问题。

然后运行脚本,进行模型合并:

./llama3_merge_model.sh

接下来即可查看刚刚获得的新的微调模型:

在这里插入图片描述

Step 5. 测试微调效果

切换到LLama_Factory目录下

cd ~/ai-test/LLaMA-Factory
CUDA_VISIBLE_DEVICES=0  python src/web_demo.py \
    --model_name_or_path /home/oneview/ai-test/Llama3/llama3_lora \
    --template llama3 \
    --infer_backend vllm \
    --vllm_enforce_eager

运行如下:端口可能有所不同

在这里插入图片描述

访问http://127.0.0.1:8000
在这里插入图片描述

可以看到,现在的回答已经是中文

原文博客地址:https://www.cnblogs.com/hlgnet/articles/18148788

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【人工智能】百度文心一言智能体:AI领域的新里程碑

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…

【CT】LeetCode手撕—72. 编辑距离

目录 题目1- 思路动规五部曲 2- 实现⭐72. 编辑距离——题解思路 3- ACM 实现 题目 原题连接:72. 编辑距离 1- 思路 模式识别:编辑举例 ——> 动态规划 动规五部曲 1.dp数组的含义 int[][] dp new int[word1.length()][word2.length()];以 i-1 …

ffmpeg使用mjpeg把yuvj420p编码为jpg图像

version #define LIBAVUTIL_VERSION_MAJOR 58 #define LIBAVUTIL_VERSION_MINOR 12 #define LIBAVUTIL_VERSION_MICRO 100 note 1. 通过*.jpg推测时,out_fmt为image2,打开*.jpg文件时,in_fmt为image2 但是out_fmt为image2时&#xff…

ROS2创建自定义接口

ROS2提供了四种通信方式: 话题-Topics 服务-Services 动作-Action 参数-Parameters 查看系统自定义接口命令 使用ros2 interface package sensor_msgs命令可以查看某一个接口包下所有的接口 除了参数之外,话题、服务和动作(Action)都支持自定义接口&am…

基于卷积神经网络的目标检测

卷积神经网络基础知识 1.什么是filter 通常一个6x6的灰度图像,构造一个3*3的矩阵,在卷积神经网络中称之为filter,对6x6的图像进行卷积运算。 2.什么是padding 假设输出图像大小为nn与过滤器大小为ff,输出图像大小则为(n−f1)∗(…

720漫游快速入门

720云全景漫游制作工具自2014年8月上线后,为数十万创作者提供全景图片&全景视频&高清矩阵上传、编辑、分享一站式软件服务,获得众多创作者的青睐与认可,同时也承载了创作者越来越多的期望,为了给大家提供更灵活多样的功能…

PTA—C语言期末复习(选择题)

1. 按照标识符的要求,(A)不能组成标识符。 A.连接符 B.下划线 C.大小写字母 D.数字字符 在大多数编程语言中,标识符通常由字母(包括大写和小写)、数字和下划线组成,但不能以数字开头&#xff0c…

MySQL事物

事务的概念 ●事务是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体 一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行。 ●事务是一个不可分割的工作逻辑单元&#…

第1章_搭建开发环境

文章目录 第1章 搭建开发环境1.1开发套件硬件接口资源介绍1.2资料下载1.3安装Keil MDK1.3.1**软件下载**1.3.2**软件安装**1.3.3 PACK 安装 1.4 安装 STM32CubeMX1.5 安装 STM32CubeProgrammer1.6 安装 ST-Link 驱动1.7 安装 CH340 驱动 第1章 搭建开发环境 1.1开发套件硬件接…

可用的微信小程序抓包方式(Charles + bp)

扫码领资料 获网安教程 前言 接到对公司小程序进行渗透的任务,尝试了网上几种对小程序抓包的方式(BurpProxifier、Burp安卓模拟器等)都无法完成抓包,可能已经失效,结合不同的文章尝试了bpCharles,成功抓包…

vue2使用wangEditor5搭建模拟文档的编辑器快速集成

如图 1、下载依赖 2、elm引入&#xff08;可省略&#xff09; main.js 或者 按需引入 3、cv <template><div style"background: #f1f3f4"><div style"width: 100%; height: 42px"><!-- 工具栏 --><Toolbarid"tool-conta…

经典排序算法详解

目录 创作不易&#xff0c;如对您有帮助&#xff0c;还望一键三连&#xff0c;谢谢&#xff01; 前言 学习目标&#xff1a; 直接插入排序 基本思想&#xff1a; 代码 希尔排序&#xff1a; gap取值 代码 特性总结 选择排序 基本思想 代码 堆排序 思想 代码 冒…

选择适合你的8款原型设计工具

随着互联网的飞速发展&#xff0c;设计行业逐渐成为近年来的热门职业。设计师们需要的掌握的技能也越来越多&#xff0c;例如海报设计、名片设计、产品设计、网页设计等。产品原型设计就是产品设计中非常重要的一个阶段&#xff0c;主要目的是帮助用户更容易了解产品设计的思路…

驱动LSM6DS3TR-C实现高效运动检测与数据采集(6)----FIFO数据读取与配置

驱动LSM6DS3TR-C实现高效运动检测与数据采集.6--FIFO数据读取与配置 概述视频教学样品申请源码下载主要内容生成STM32CUBEMX串口配置IIC配置CS和SA0设置ICASHE修改堆栈串口重定向参考驱动程序FIFO参考程序初始化管脚获取ID复位操作设置量程BDU设置设置速率FIFO读取程序设置FIFO…

基于java语言+springboot技术架构开发的 互联网智能3D导诊系统源码支持微信小程序、APP 医院AI智能导诊系统源码

基于java语言springboot技术架构开发的 互联网智能3D导诊系统源码支持微信小程序、APP 医院AI智能导诊系统源码 一、智慧导诊系统开发原理 导诊系统从原理上大致可分为基于规则模板和基于数据模型两类。 1、基于规则推理的方法通过人工建立症状、疾病和科室之间的对应规则实现…

[XYCTF新生赛]-PWN:EZ1.0?(mips,mips的shellcode利用)

查看保护 查看ida 这里用的是retdec&#xff0c;没安装的可以看这个[CTF]-PWN:mips反汇编工具&#xff0c;ida插件retdec的安装-CSDN博客 这里直接看反汇编貌似看不出什么&#xff0c;所以直接从汇编找 完整exp&#xff1a; from pwn import* context(log_leveldebug,archmip…

高性价比:wb 1:10万的HRP直标标签抗体

货号名称规格官网价BDAA0197Recombinant Flag-Tag Monoclonal Antibody(3O2)HRP Conjugated100μl900BDAA0199Recombinant His-TagMonoclonal Antibody(14W7)HRP Conjugated100μl900BDAA0198Recombinant HA-TagMonoclonal Antibody(12H2)HRP Conjugated100μl900BDAA0199Recom…

分销裂变实战:PLG模式如何助力企业突破增长瓶颈

在竞争激烈的商业环境中&#xff0c;企业如何快速、有效地实现增长&#xff0c;一直是业界关注的焦点。近年来&#xff0c;分销裂变作为一种新兴的商业模式&#xff0c;凭借其独特的优势&#xff0c;逐渐受到企业的青睐。而产品驱动增长&#xff08;PLG&#xff09;模式更是为分…

特斯拉马斯克盛赞MEME币

刚刚&#xff0c;埃隆马斯克再次登上西方头条新闻&#xff0c;但这一次&#xff0c;不是关于火箭或电动汽车。这位炒币科技大亨在Twitter上宣布了“MEME币的明显胜利”&#xff0c;这一事件在加密社区引起了深刻的共鸣。币界网小编立马捕捉到了这一声明&#xff0c;象征着互联网…

GuLi商城-前端启动命令npm run dev

由于这里配置了dev&#xff0c;所以启动命令是npm run dev