Llama 3 模型微调的步骤

news2024/11/23 6:48:53

环境准备

操作系统: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

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

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

相关文章

线性代数--行列式1

本篇来自对线性代数第一篇的行列式的一个总结。 主要是行列式中有些关键点和注意事项,便于之后的考研复习使用。 首先,对于普通的二阶和三阶行列式,我们可以直接对其进行拆开,展开。 而对于n阶行列式 其行列式的值等于它的任意…

系统运维面试题总结(网络基础类)

系统运维面试题总结(网络基础类) 网络基础类第七层:应用层第六层:表示层第五层:会话层第四层:传输层第三层:网络层第二层:数据链路层第一层:物理层 类似面试题1、TCP/IP四…

Django 配置静态文件

1,DebugTrue 调试模式 Test/Test/settings.py DEBUG True...STATICFILES_DIRS [os.path.join(BASE_DIR, static),] STATIC_URL /static/ 1.1 创建静态文件 Test/static/6/images/Sni1.png 1.2 添加视图函数 Test/app6/views.py from django.shortcuts impor…

使用Java实现通用树形结构转换工具类:深入解析TreeUtil和TreeNode接口

文章目录 一、TreeNode接口设计二、TreeUtil工具类设计三、示例:实现TreeNode接口的节点类四、示例:使用TreeUtil构建树形结构五、总结 🎉欢迎来到Java学习路线专栏~探索Java中的静态变量与实例变量 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1…

落石滑坡监测报警系统:创新保障高速公路安全

​ ​​在现代交通建设中,高速公路的安全性和稳定性至关重要。特别是易发生落石区域,如何有效预防和应对落石滑坡带来的事故成为了一项关键性挑战。为此,落石滑坡监测报警系统应运而生,它通过先进的技术手段,为高速…

汇聚荣拼多多运营好吗?

在当前电商行业竞争激烈的背景下,拼多多凭借其独特的商业模式和市场定位迅速崛起,成为众多商家和品牌争相入驻的平台。对于“汇聚荣拼多多运营好吗?”这一问题,答案是肯定的。拼多多不仅提供了一个广阔的市场空间,还通过其创新的…

C++输出彩色方块

1.使用方法 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0xab); ———————————————————————————————————————— 0 黑色 1 蓝色 2 绿色 3 湖蓝色 4 红色 5 紫色 6 黄色 7 白色 8 灰色 9 …

linux下安装kkFileView4

kkFileView为文件文档在线预览解决方案,该项目使用流行的spring boot搭建,易上手和部署,基本支持主流办公文档的在线预览,如doc,docx,xls,xlsx,ppt,pptx,pdf,txt,zip,rar,图片,视频,音频等等 安装kkFileView前需要安装LibreOffic…

HarmonyOS开发:应用完整性校验

简介 为了确保应用的完整性和来源可靠,OpenHarmony需要对应用进行签名和验签。 应用开发阶段: 开发者完成开发并生成安装包后,需要开发者对安装包进行签名,以证明安装包发布到设备的过程中没有被篡改。OpenHarmony的应用完整性校…

推理之巅 超云为先|2024中国智算中心全栈技术大会,超云引领AI算力新趋势

在AI技术日新月异的浪潮中,算力作为推动数字经济发展的关键力量,正迎来全新的发展机遇。 6月25日至27日,以“AI赋能,重构未来”为主题的2024中国智算中心全栈技术大会、第5届中国数据中心绿色能源大会暨第10届中国(上…

在本地和Linux之间传输文件

1.打开本地的cmd窗口 2. 然后按这个链接的说法在cmd中远程连接Linux(技术|如何在 Linux 中使用 sFTP 上传或下载文件与文件夹) 3. 看这个链接里面的sftp命令进行本地和Linux之间的文件互传 (https://www.cnblogs.com/niuben/p/13324099.htm…

【机器学习】阿里Qwen-VL:基于FastAPI私有化部署你的第一个AI多模态大模型

目录 一、引言 二、Qwen-VL 介绍 2.1 Qwen-VL 特点 2.2 Qwen-VL 原理 2.3 Qwen-VL 模型结构 三、FastAPI封装Qwen-VL大模型服务接口 3.1 FastAPI 极简入门 3.1.1 FastAPI 3.1.2 uvicorn 3.1.3 pydantic 3.2 QwenVL-API服务端 3.2.1 代码示例 3.2.2 代码详解 3.…

机器人控制系列教程之关节空间运动控制器搭建(1)

机器人位置控制类型 机器人位置控制分为两种类型: 关节空间运动控制—在这种情况下,机器人的位置输入被指定为一组关节角度或位置的向量,这被称为机器人的关节配置,记作q。控制器跟踪一个参考配置,记作 q r e f q_{re…

WordPress Quiz Maker插件 SQL注入漏洞复现(CVE-2024-6028)

0x01 产品简介 WordPress Quiz Maker插件是一款功能强大的测验生成工具,旨在帮助用户轻松、快速地构建复杂的测验和考试。插件支持多种问题类型,包括单选框(MCQ)、复选框(MCQ)、下拉列表(MCQ)、文本、短文本、数字、日期等。还支持横幅(HTML)显示信息性消息、填空题…

权限维持-域环境单机版---映像劫持(多)

目录 映像位置: 测试:执行 notepad 成 cmd 配合GlobalFlag隐藏-->执行正常关闭后触发 映像位置: 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe 测试:执行 notepad 成 cmd…

数据结构--堆(图文)

在开始学习堆之前,我们要先简单了解二叉树 二叉树 一棵二叉树是结点的一个有限集合,该集合: 为空由一个根结点加上两棵子树(左子树和右子树) 特殊的二叉树: 满二叉树:一个二叉树,如果每一…

python 第6册 辅助excel 002 批量创建非空白的 Excel 文件

---用教授的方式学习 此案例主要通过使用 while 循环以及 openpyxl. load_workbook()方法和 Workbook 的 save()方法,从而实现在当前目录中根据已经存在的Excel 文件批量创建多个非空白的Excel 文件。当运行此案例的Python 代码(A002.py 文件&#xff0…

Ubuntu20.04安装vimplus插件

参考文章: Ubuntu Linux下vimplus的安装及使用安装vimplus之后乱码问题解决 1、安装步骤: $ git clone https://github.com/chxuan/vimplus.git ~/.vimplus$ cd ~/.vimplus$ ./install.sh2、./install.sh 过程 出现选择是否备份 /home/yin-roc/.vim…

制造企业用AI可以做什么?

ChatGPT横空出世,有关AI的浪潮席卷全球,比起人工智能如何改变世界,可能你更感兴趣我能用AI可以做的事情是什么? 制造企业用AI可以做的事情是什么?人工智能在制造企业中可以做很多事情,以下是一些主要的应用&#xff1…