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. 更新子模块 查看子模块状态提交子模块的更改处理子模块路径错误的问题 该问题的缘由是因为:在写某些代码的时候,仓库中有些文件夹,只提交了文件夹名称到…

Spring Boot中的依赖注入详解

Spring Boot中的依赖注入详解 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!在今天的文章中,我们将深入探讨Spring Boot中的依赖注入(D…

EasyExcel 导出批注信息以及背景色

1. 批注信息 package com.xxx.demo;import lombok.Getter; import org.apache.poi.ss.usermodel.IndexedColors;/*** This class represents the comment information associated with a specific cell in an Excel sheet.* The columnIndex field specifies the column numbe…

react中自定义上传文件的hook

react中自定义上传文件的hook 在React中,你可以创建自定义Hook来处理文件上传的逻辑。自定义Hook允许你将组件逻辑提取到可重用的函数中,这样你就可以在不同的组件之间共享这些逻辑。 以下是一个简单的示例,展示了如何创建一个用于文件上传…

[GIS]WPS地理处理服务

在GeoServer中,WPS(Web Processing Service)是一个用于执行地理空间数据处理的规范。WPS服务允许用户提交地理处理请求,这些请求由服务器上的地理处理过程(GeoProcessing Process)执行,并返回结…

时常在面试中被问到的多线程问题:下篇

文章目录 线程和线程池有什么区别?线程池 (ThreadPool)区别 如何创建线程池?1. 固定大小线程池 (Fixed Thread Pool)2. 可缓存线程池 (Cached Thread Pool)3. 单线程线程池 (Single Thread Pool)4. 定时线程池 (Scheduled Thread Pool) 推荐使用哪种方式…

【贪心】个人练习-Leetcode-2271. Maximum White Tiles Covered by a Carpet

题目链接:https://leetcode.cn/problems/maximum-white-tiles-covered-by-a-carpet/description/ 题目大意:给定一个左右区间序列tiles[][],每个元素代表这个区间被瓷砖覆盖(左右都是闭合的)。给定一块毯子&#xff0…

使用 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. 复制源码包并解压,创…

PrestaShop的目录结构详解

admin-dev:这个目录通常包含开发和测试PrestaShop后台时所需的脚本和配置文件。例如,它可能包含用于测试API的脚本或用于在开发过程中快速访问某些后台功能的快捷方式。 app:这个目录是PrestaShop的核心,包含了许多关键的组件。例…

解决HTTP 400 Bad Request错误的方法

解决HTTP 400 Bad Request错误的方法 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在进行网络通信时,HTTP 400 Bad Request错误是相对常见的问题…

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

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

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

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

Spring Boot与WebFlux的实战案例

Spring Boot与WebFlux的实战案例 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天,我们将探讨如何利用Spring Boot和WebFlux构建响应式应用的实战…

MySQL之可扩展性(七)

可扩展性 通过集群扩展 理想的扩展方案时单一逻辑数据库能够存储尽可能多的数据,处理尽可能多的查询,并如期望的那样增长。许多人的第一想法就是建立一个"集群"或者"网格"来无缝处理这些事情,这样应用就无须去做太多工…

LangServe APIHandler:定制化LangChain REST API

LangServe,这一创新性的工具,专为简化LangChain对象及链的部署而生,将它们转化为REST API,从而赋能开发人员构建更为敏捷高效的应用。与FastAPI的深度融合以及Pydantic的精准数据验证,使得LangServe成为构建微服务的理…

K8S中的某个容器突然出现内存和CPU占用过高的情况解决办法

当K8S中的某个容器突然出现内存和CPU占用过高的情况时&#xff0c;可以采取以下步骤进行处理&#xff1a; 观察和分析&#xff1a; 使用kubectl top pods命令查看集群中各个Pod的CPU和内存占用情况&#xff0c;找出占用资源高的Pod。使用kubectl describe pod <pod-name>…

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

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

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

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

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

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