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/bashpython 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

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

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

相关文章

[每周一更]-(第103期):GIT初始化子模块

文章目录 初始化和更新所有子模块分步骤操作1. 克隆包含子模块的仓库2. 初始化子模块3. 更新子模块 查看子模块状态提交子模块的更改处理子模块路径错误的问题 该问题的缘由是因为:在写某些代码的时候,仓库中有些文件夹,只提交了文件夹名称到…

使用 Ubuntu x86_64 平台交叉编译适用于 Linux aarch64(arm64) 平台的 QT5(包含OpenGL/WebEngine支持) 库

使用 Ubuntu AMD64 平台交叉编译适用于 Linux ARM64 平台的 QT5(包含 OpenGL/WebEngine 支持) 库 目录 使用 Ubuntu AMD64 平台交叉编译适用于 Linux ARM64 平台的 QT5(包含 OpenGL/WebEngine 支持) 库写在前面前期准备编译全流程1. 环境搭建2. 复制源码包并解压,创…

在Mac上恢复丢失或未保存的Word文档的5种有效方法

“救命!我想在Mac上恢复丢失的Word文档。就在 1 小时前,我错误地删除了它们,并清空了垃圾桶。这些Word文档对我来说非常重要。我不知道如何恢复它们,谁能帮我?提前致谢! 没有什么比忘记保存 Word 文档或在…

3d模型里地毯的材质怎么赋予?---模大狮模型网

在进行3D建模时,赋予地毯逼真的材质是营造现实感和增强场景氛围的重要步骤。模大狮将介绍在常见的3D建模软件中,如何有效地为地毯赋予各种材质,以及一些实用的技巧和注意事项。 一、选择合适的地毯材质 在3D建模中,地毯的材质选择…

双向长短期记忆神经网络BiLSTM

先说一下LSTM LSTM 是一种特殊的 RNN,它通过引入门控机制来解决传统 RNN 的长期依赖问题。 LSTM 的结构包含以下几个关键组件: 输入门(input gate):决定当前时间步的输入信息对细胞状态的影响程度。遗忘门&#xff…

C盘满了怎么办?用这方法彻底拯救你的C盘

C盘满了怎么办?用这方法彻底拯救你的C盘。我们的C盘是整个电脑运行的核心部分,里面装载了很重要的系统框架和数据,由于使用的时间越来越长,C盘也会积累很多的垃圾,这样就经常容易出现爆满的情况。 对于C盘爆满&#x…

扫扫地,搞搞卫生 ≠ 车间5S管理

在制造业的日常运营中,车间管理是一项至关重要的工作,它直接关系到生产效率、产品质量以及员工的工作环境。然而,许多人常常将简单的“扫扫地,搞搞卫生”等同于车间5S管理,这种误解不仅可能导致管理效果不佳&#xff0…

Halcon 如何让图像自适应窗口

一 如何让图像自适应窗口 read_image(Image,1)get_image_size(Image,Width, Height)dev_close_window()dev_open_window(0,0,Width/2,Height/2,black,WindowHandle)dev_set_part(0,0,Height-800,Width-800)dev_display(Image)二 如何实现彩色图像转化为灰色图像 read_image(I…

浅谈逻辑控制器之Switch控制器

浅谈逻辑控制器之Switch控制器 Switch Controller是Apache JMeter中一个强大的逻辑控制器,它允许用户基于特定的变量值或参数来控制哪些子采样器被执行。与简单地按照配置顺序执行的控制器不同,Switch Controller根据提供的“switch value”来决定执行哪…

深度相机识别物体——实现数据集准备与数据集分割

一、数据集准备——Labelimg进行标定 1.安装labelimg——pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple 2.建立相应的数据集存放文件夹 3.打开labelimg,直接在命令行输入labelimg即可,并初始化 4.开始标注,设置标注好…

【人工智能学习之图像操作(三)】

【人工智能学习之图像操作(三)】 图像滤波滤波概念卷积平滑算子均值滤波高斯滤波中值滤波双边滤波锐化算子USM锐化梯度算子 傅里叶变换直方图直方图直方图均衡化自适应均衡化2D 直方图直方图反向投影 图像滤波 滤波概念 滤波过程就是把不需要的信号频率…

Navicat安装与连接教程

navicat 的安装 官网:https://www.navicat.com.cn/ 进入官网之后点击左上角的产品,然后往下滑动就可以看见许多类型,我们使用的是MongoDB数据库,所以就下载Navicat 17 for MongoDB 进入到这里之后,选择自己的系统版本…

J2EE框架之mybatis学习——连接数据库实现查询操作

J2EE框架之mybatis学习——连接数据库实现查询操作 作业要求: 作者:杨建东 关于具体内容我正准备更新至我的CSDN【被瞧不起的神】也可移步我的公众号【猿小馆】 结合老师的课件和黑马程序员的课程学习。 因为我上课老师已经讲过了基本的概念和理解&a…

[leetcode]avoid-flood-in-the-city 避免洪水泛滥

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:vector<int> avoidFlood(vector<int>& rains) {vector<int> ans(rains.size(), 1);set<int> st;unordered_map<int, int> mp;for (int i 0; i < rains.size(); i) {i…

LabVIEW网络开发资源

在LabVIEW开发中&#xff0c;利用网络资源进行学习和查找资料是提高技能和解决问题的重要途径。以下几个国内外优质资源可以帮助开发者获得丰富的技术支持和交流机会&#xff1a; 1. NI Community (NI社区) 简介: National Instruments官方运营的社区&#xff0c;提供丰富的资…

sql想查询一个数据放在第一个位置

sql想查询一个数据放在第一个位置 背景:比如在查询后台账号的时候想将管理员账号始终放在第一个,其他账号按照创建时间倒序排序, 可以这样写sql: SELECTid,create_time FROMuser ORDER BY CASEWHEN id 1 THEN1 ELSE 2 END ASC, create_time DESC 运行截图: 可以看到id…

专业报考628

目录 掌上高考相关专业两步走 研招网、软科最后 刚才看了&#xff0c;挺有用的育 就是一点&#xff0c; 查找相关专业 掌上高考 如果不知道喜欢什么专业&#xff0c;直接查大学&#xff0c;就查那个大学有什么不是物化强行绑定的 看**招生计划**一栏 如果有明确目标&#xf…

日志可视化监控体系ElasticStack 8.X版本全链路实战

目录 一、SpringBoot3.X整合logback配置1.1 log4j、logback、self4j 之间关系 1.2 SpringBoot3.X整合logback配置 二、日志可视化分析ElasticStack 2.1为什么要有Elastic Stack 2.2 什么是Elastic Stack 三、ElasticSearch8.X源码部署 ​四、Kibana源码部署 五、LogSta…

ffmpeg使用png编码器把rgb24编码为png图像

version #define LIBAVUTIL_VERSION_MAJOR 58 #define LIBAVUTIL_VERSION_MINOR 12 #define LIBAVUTIL_VERSION_MICRO 100 note 不使用AVOutputFormat code void CFfmpegOps::EncodeRGB24ToPNG(const char *infile, const char *width_str, const char *height_str, c…

BigInteger 和 BigDecimal(java)

文章目录 BigInteger(大整数&#xff09;常用构造方法常用方法 BigDecimal(大浮点数&#xff09;常用构造方法常用方法 DecimalFormat(数字格式化) BigInteger(大整数&#xff09; java.math.BigInteger。 父类&#xff1a;Number 常用构造方法 构造方法&#xff1a;BigIntege…