Llama-Factory框架下的Meta-Llama-3-8B-Instruct模型微调
目录
引言
Llama - Factory 训练框架简介:
Meta - Llama - 3 - 8B - Instruct 模型概述:
Lora 方法原理及优势:
原理
优势
环境准备:
部署环境测试:
数据准备:
模型准备:
模型配置与训练:
微调效果展示与分析
模型导出:
基于sglang进行服务搭建:
服务测试:
总结:
参考链接:
引言
在自然语言处理领域,大语言模型不断演进,Meta 的 Llama 系列模型备受瞩目。其中 Meta - Llama - 3 - 8B - Instruct 模型具有 80 亿参数,在基础的语言理解和生成方面展现出了一定的能力。然而,为了使其更好地适应特定领域或任务,微调成为了关键步骤。Llama - Factory 作为一个强大的开源低代码大模型训练框架,集成了众多先进的微调方法和优化技术,为我们微调 Meta - Llama - 3 - 8B - Instruct 模型提供了便利。同时,Lora(Low - Rank Adaptation)方法因其在不改变预训练模型原始权重参数的情况下,通过引入小的可训练矩阵来实现模型微调,有效缓解内存和计算资源限制的优势,成为了我们本次微调的首选方法。
Llama - Factory 训练框架简介:
Llama - Factory 是由北航开源的低代码大模型训练框架,它在大模型训练领域有着显著的优势和丰富的功能。参考文章LLAMAFACTORY: Unified Efficient Fine-Tuning of 100+ Language Models(https://arxiv.org/pdf/2403.13372)

支持多种开源模型:该框架支持包括 Yuan2.0、Llama、LLaVA、Mistral、Mixtral - MOE、Qwen、Yi、Gemma、Baichuan、ChatGLM、Phi 等多种开源大语言模型,具有广泛的适用性。
高效微调技术集成:集成了如 Lora、QLora 等高效微调技术,这些技术极大地优化了微调过程。以 Lora 为例,它通过在模型的某些层添加可训练的低秩矩阵,在几乎不增加计算复杂度的前提下,实现了对模型的有效微调。
可视化训练与推理平台:为开发者提供了可视化训练、推理平台,通过一键配置模型训练,能够实现零代码微调 LLM。这一特性使得非专业开发者也能轻松上手,进行模型的定制开发,大大降低了技术门槛。
多种训练模式:支持增量预训练、有监督微调、基于人类反馈的强化学习(RLHF)、直接偏好优化(DPO)等多种训练模式,满足不同场景下的需求。无论是想要对模型进行简单的领域适配,还是进行复杂的强化学习优化,Llama - Factory 都能提供相应的支持。
先进算法与实用技巧集成:集成了 GALORE、BADAM、DORA、LongLora、LlamaPro 等先进算法,以及 FlashAttention - 2、Unsloth、RoPEscaling 等实用技巧,提升训练效率和模型性能。这些算法和技巧从不同角度对训练过程进行优化,如提高计算效率、减少内存占用等。
实验监控与评估:提供 LlamaBoard、TensorBoard、WandB、MLflow 等多种实验监控工具,帮助开发者实时监控训练过程,评估模型性能。通过这些工具,开发者可以直观地看到模型在训练过程中的各项指标变化,如损失值、准确率等,从而及时调整训练策略。
Meta - Llama - 3 - 8B - Instruct 模型概述:
Meta - Llama - 3 - 8B - Instruct 是 Meta 开发的具有 80 亿参数的语言模型,它在经过预训练后,已经具备了对自然语言的基本理解和生成能力。该模型在多种自然语言处理任务上表现出了一定的潜力,如文本生成、问答系统、文本分类等。然而,由于其预训练数据和目标的通用性,在面对特定领域的专业任务时,往往需要进一步的微调来提升性能。例如,在医疗领域,它可能无法准确理解和回答专业的医学问题;在法律领域,对于法律条文的解读和应用也可能不够精准。因此,通过微调使其适应特定领域需求是充分发挥该模型潜力的重要途径。
Lora 方法原理及优势:
原理
Lora 方法的核心思想是在不改变预训练模型权重的基础上,为模型的每一层添加两个可训练的低秩矩阵。具体来说,对于模型中的每一个线性层,假设其输入为\(x\),原始的线性变换为\(y = Wx\),在应用 Lora 方法后,线性变换变为\(y = Wx + \Delta Wx\),其中\(\Delta W = BA\),\(A\)是一个从输入维度映射到低维空间的矩阵,\(B\)是一个从低维空间映射回输出维度的矩阵。通过这种方式,在训练过程中只需要更新\(A\)和\(B\)这两个低秩矩阵的参数,而不需要更新原始模型的权重\(W\),大大减少了需要训练的参数数量。
优势
减少内存占用:由于只需要存储和更新少量的低秩矩阵参数,相比于直接微调整个模型,Lora 方法显著减少了内存的占用。这对于在资源有限的设备上进行模型微调非常关键,使得开发者可以在普通的 GPU 甚至 CPU 上进行大模型的微调操作。
降低计算复杂度:在训练过程中,只对低秩矩阵进行计算和更新,计算量大幅降低。这不仅加快了训练速度,还降低了对计算资源的要求,使得微调过程更加高效。
快速部署:因为微调后的模型只增加了少量的低秩矩阵参数,模型的大小增加有限,这有利于模型的快速部署,特别是在对部署时间和资源有限制的场景中。
环境准备:
1.克隆 Llama - Factory 的 GitHub 仓库:在终端中使用以下命令将 Llama - Factory 的代码克隆到本地。
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
2.创建虚拟环境:建议使用 Python 的虚拟环境来管理项目依赖,以避免不同项目之间的依赖冲突。可以使用venv或conda来创建虚拟环境。使用conda创建虚拟环境的命令如下:
conda create -n llama-factory python = 3.12
3.激活虚拟环境:
conda activate llama-factory
4.安装必要的依赖库:进入 Llama - Factory 项目目录,安装项目所需的依赖库。通常可以通过项目根目录下的requirements.txt文件来安装。
cd LLaMA-Factory
pip install -e ".[torch,metrics]"
pip install -r requirements.txt
部署环境测试:
llamafactory-cli webui

数据准备:
训练主要用到2个开源数据集,分别是identity、alpaca_en_demo。
数据集保存在data目录下。
#identity.json数据格式,{"instruction": "hi","input": "","output": "Hello! I am {{name}}, an AI assistant developed by {{author}}. How can I assist you today?"},{"instruction": "hello","input": "","output": "Hello! I am {{name}}, an AI assistant developed by {{author}}. How can I assist you today?"},
#alpaca_en_demo数据格式
{"instruction": "Describe a process of making crepes.","input": "","output": "Making crepes is an easy and delicious process! Here are step-by-step instructions on how to make them:\n\n1. Assemble your ingredients. For basic crepes, you'll need: 1 cup all-purpose flour, 2 eggs, 1/2 cup milk, 1/2 cup water, 1/4 teaspoon salt, and 2 tablespoons melted butter.\n\n2. Mix the batter: In a large mixing bowl, whisk together the flour and the eggs. Gradually add the milk and water, stirring constantly to ensure that there are no lumps. Add salt and melted butter, and mix well.\n\n3. Let the batter rest: If you can, let the batter sit for an hour or so. This will help the flour to absorb the liquid and make the crepes more tender.\n\n4. Heat your pan: Preheat a non-stick pan over medium heat. Lightly butter the pan or use cooking spray to prevent the crepes from sticking.\n\n5. Pour the batter: Using a ladle or a measuring cup, pour a small amount of batter (about 1/4 cup) onto the center of the pan. Immediately tilt the pan in a circular motion to spread the batter evenly and thinly over the bottom of the pan.\n\n6. Cook the crepe: Cook the crepe for 1-2 minutes until the bottom is lightly golden. Carefully loosen the edges with a spatula and flip the crepe over to cook the other side for another minute.\n\n7. Remove and repeat: Gently slide the crepe onto a plate, and then repeat the process with the remaining batter. Remember to re-butter the pan between each crepe if necessary.\n\n8. Fill and serve: Fill your cooked crepes with your desired filling, such as fresh fruit, whipped cream, Nutella, or ham and cheese. Roll or fold, and serve immediately. Enjoy!"},{"instruction": "Transform the following sentence using a synonym: The car sped quickly.","input": "","output": "The car accelerated rapidly."},
模型准备:
基于魔塔社区下载模型文件,下载链接魔搭社区
模型配置与训练:
修改examples/train_lora/llama3_lora_sft.yaml配置文件中的模型路径,
启动训练,
llamafactory-cli train examples/train_lora/llama3_lora_sft.yaml


微调效果展示与分析
llamafactory-cli chat examples/inference/llama3_lora_sft.yaml

在微调前,Meta - Llama - 3 - 8B - Instruct 模型生成的文本可能在特定领域的专业性和准确性上有所欠缺。例如,当要求生成关于心脏病治疗方案的文本时,原始模型可能生成一些比较通用但缺乏专业细节的内容。而经过基于医疗领域数据集的微调后,模型能够生成更专业、详细的内容,如具体的药物名称、治疗流程等。
模型导出:
llamafactory-cli export examples/merge_lora/llama3_lora_sft.yaml

基于sglang进行服务搭建:
python3 -m sglang.launch_server --model output/llama3_lora_sft --trust-remote-code --tp 2 --host 0.0.0.0

服务测试:
测试采用openai接口,包括正常请求测试和流式请求测试
import openaiclient = openai.Client(base_url="http://10.1.12.10:30000/v1", api_key="None")#正常请求
response = client.chat.completions.create(model="./output/llama3_lora_sft/",messages=[{"role": "user", "content": "如何预防肺癌?"},],temperature=0,max_tokens=4096,
)
print(response.choices[0].message.content)#流式请求
stream = client.chat.completions.create(model="./output/llama3_lora_sft/",messages=[{"role": "user", "content": "如何预防肺癌?"}],stream=True,
)
for chunk in stream:if chunk.choices[0].delta.content is not None:print(chunk.choices[0].delta.content, end="")

总结:
通过在 Llama - Factory 训练框架下使用 Lora 方法对 Meta - Llama - 3 - 8B - Instruct 模型进行微调,我们能够充分发挥该模型的潜力,使其更好地适应特定领域或任务的需求。Llama - Factory 提供的丰富功能和便捷的操作流程,以及 Lora 方法在减少内存占用和计算复杂度方面的优势,为模型微调提供了高效、可行的解决方案。在实际应用中,开发者可以根据具体需求,灵活运用这一技术,开发出更具针对性和高性能的语言模型。未来,随着技术的不断发展,我们期待能够看到更多基于此类方法的创新应用和更强大的模型出现。
参考链接:
https://github.com/hiyouga/LLaMA-Factory
LLaMA3微调实战:解锁Meta-Llama-3-8B-Instruct的无限潜力-百度开发者中心
相关文章:
Llama-Factory框架下的Meta-Llama-3-8B-Instruct模型微调
目录 引言 Llama - Factory 训练框架简介: Meta - Llama - 3 - 8B - Instruct 模型概述: Lora 方法原理及优势: 原理 优势 环境准备: 部署环境测试: 数据准备: 模型准备: 模型配置与训练࿱…...
MySQL进阶-分析查询语句EXPLAIN
概述 能做什么? 表的读取顺序 数据读取操作的操作类型 哪些索引可以使用 哪些索引被实际使用 表之间的引用 每张表有多少行被优化器查询 官网介绍 https://dev.mysql.com/doc/refman/5.7/en/explain-output.html https://dev.mysql.com/doc/refman/8.0/…...
Python 高级编程与实战:构建数据可视化应用
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化、调试技巧、数据科学、机器学习、Web 开发、API 设计、网络编程、异步IO、并发编程、设计模式与软件架构、性能优化与调试技巧、分布式系统、微服务架构、自动化测试框架以及 RESTf…...
学习threejs,Animation、Core、CustomBlendingEquation、Renderer常量汇总
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️Animation常量汇总1.1.1 循…...
Java直通车系列14【Spring MVC】(深入学习 Controller 编写)
目录 基本概念 编写 Controller 的步骤和要点 1. 定义 Controller 类 2. 映射请求 3. 处理请求参数 4. 调用业务逻辑 5. 返回响应 场景示例 1. 简单的 Hello World 示例 2. 处理路径变量和请求参数 3. 处理表单提交 4. 处理 JSON 数据 5. 异常处理 基本概念 Cont…...
【蓝桥杯集训·每日一题2025】 AcWing 5539. 牛奶交换 python
AcWing 5539. 牛奶交换 Week 3 3月6日 题目描述 农夫约翰的 N N N 头奶牛排成一圈,使得对于 1 , 2 , … , N − 1 1,2,…,N−1 1,2,…,N−1 中的每个 i i i,奶牛 i i i 右边的奶牛是奶牛 i 1 i1 i1,而奶牛 N N N 右边的奶牛是奶牛 …...
Mybatis缓存机制(一级缓存和二级缓存)
前言 为什么要学习Mybatis 缓存机制? 学习Mybatis 缓存机制,可以有效解决 数据库的压力,提高数据库的性能。 例如:你要 对tb_user 表 ,查询 所有用户的信息,并且多次查询所有用户信息。我们知道第一次查询表信息流…...
设计模式--单例模式
一、单例模式代码实现 public class DatabaseConnection {// 1. 私有静态实例变量private static DatabaseConnection instance;// 2. 私有构造函数,防止外部直接创建实例private DatabaseConnection() {// 初始化数据库连接System.out.println("Database con…...
ubuntu22.04本地部署OpenWebUI
一、简介 Open WebUI 是一个可扩展、功能丰富且用户友好的自托管 AI 平台,旨在完全离线运行。它支持各种 LLM 运行器,如 Ollama 和 OpenAI 兼容的 API,并内置了 RAG 推理引擎,使其成为强大的 AI 部署解决方案。 二、安装 方法 …...
2025-3-7二叉树的线索化
一、中序线索化 代码其实就是和中序遍历相似,增加了两个标志位 ltag rtag。 完整的代码: 二、先序线索化: 三、后序线索化: 总结:其核心其实还是遍历算法的改造。 并且注意处理最后一个被访问的节点。...
以商业思维框架为帆,驭创业浪潮前行
创业者踏入商海,如同航海家奔赴未知海域,需有清晰的思维罗盘指引方向。图中“为什么—用什么—怎么做—何人做—投入产出”的商业框架,正是创业者破解商业谜题的密钥,从需求洞察到落地执行,为创业之路铺就逻辑基石。 …...
海思Hi3516DV300交叉编译opencv
OpenCV是一个开源的跨平台计算机视觉库,支持C、Python等多种语言,适用于图像处理、目标检测、机器学习等任务。其核心由C编写,高效轻量,提供实时视觉处理功能,广泛应用于工业自动化、医疗影像等领域。 1 环境准备 1…...
基于NIST后量子算法的混合加密系统
目录 基于NIST后量子算法的混合加密系统一、前言二、后量子密码学概述2.1 后量子密码学的背景2.2 NIST候选后量子算法 三、混合加密系统的设计原理3.1 混合加密的基本思想3.2 数学公式与证明3.3 混合加密系统的优势 四、工程实现与优化策略4.1 算法层面优化4.2 工程实现优化 五…...
uni-app 开发ios 使用testFlight 进行分发测试
一、生成ipa 首先你要生成一个ipa包,怎么生成这个包,可以在uniapp打包安卓和iOS包 二、上传到分发平台 在这里我使用的是Transporter ,当然你也可以看下其他分发平台 在mac电脑app store中下载Transporter,双击打开, 点击添加,将打包好的ipa文件放上去,注意打包的时…...
Node.js入门笔记2---下载安装Node.js
Node.js入门笔记2 Node.js下载并安装的步骤1.Node.js 环境的安装2. 区分 LTS 版本和 Current 版本的不同3.项目node管理版本工具4.Node.js 包管理工具5.MSI与ZIP文件格式的主要区别6. 选择好上面的内容,点击下载mis7. 环境配置 Node.js下载并安装的步骤 1.Node.js …...
基于微信小程序的超市购物系统+论文源码调试讲解
4 系统设计 超市购物系统的设计方案比如功能框架的设计,比如数据库的设计的好坏也就决定了该系统在开发层面是否高效,以及在系统维护层面是否容易维护和升级,因为在系统实现阶段是需要考虑用户的所有需求,要是在设计阶段没有经过…...
OpenCV视频解码实战指南
硬核解析OpenCV视频处理底层原理,从零实现高效视频解码流水线!附赠FFmpeg调优参数和异常帧处理方案,建议收藏备用。 📺 视频解码核心原理 视频容器 vs 编码格式 类型常见格式特点容器格式MP4/MKV/AVI/MOV存储封装格式࿰…...
Python的那些事第四十三篇:功能强大的测试框架pytest
pytest:功能强大的测试框架 摘要 本文旨在深入探讨 pytest 这一功能强大的测试框架。pytest 具有简单易用、功能丰富等特点,支持分布式测试、自动化测试用例发现等功能。本文将从 pytest 的基本概念、主要功能、使用方法等多个方面进行详细阐述,并通过具体的代码示例和表格…...
工程化与框架系列(23)--前端性能优化(下)
前端性能优化(用户体验) 🎨 引言 用户体验(UX)性能优化是前端性能优化的重要组成部分。本文将探讨如何通过优化用户体验相关的性能指标,提升用户对应用的满意度,包括感知性能、交互响应、视觉…...
使用 Elasticsearch 进行集成测试初始化数据时的注意事项
作者:来自 Elastic piotrprz 在创建应该使用 Elasticsearch 进行搜索、数据聚合或 BM25/vector/search 的软件时,创建至少少量的集成测试至关重要。虽然 “模拟索引” 看起来很诱人,因为测试甚至可以在几分之一秒内运行,但它们实际…...
5分钟掌握:billd-desk跨平台远程控制高效解决方案
5分钟掌握:billd-desk跨平台远程控制高效解决方案 【免费下载链接】billd-desk 基于Vue3 WebRTC Nodejs Flutter搭建的远程桌面控制 项目地址: https://gitcode.com/gh_mirrors/bi/billd-desk 还在为远程办公的卡顿和限制而烦恼吗?当你急需远程…...
技术速递|6000 万次 Copilot 代码审查 且仍在持续增长
作者:Ria Gopu & David Apirian排版:Alan WangCopilot 代码审查如何帮助团队跟上 AI 加速带来的代码变更。自去年 4 月我们首次推出 Copilot 代码审查(CCR)以来,其使用量已增长了 10 倍,目前已占 GitHu…...
uniapp集成腾讯地图:从marker点聚合到轨迹回放的跨端实战与性能调优
1. uniapp集成腾讯地图SDK的核心步骤 第一次在uniapp里用腾讯地图SDK时,我踩了个大坑——直接在H5端跑代码发现地图出不来。后来才明白,腾讯地图在H5端需要单独配置安全域名。具体操作是在腾讯地图开放平台申请key时,必须把H5的域名加入白名单…...
影墨·今颜模型API接口开发与调用全指南
影墨今颜模型API接口开发与调用全指南 你是不是已经成功部署了影墨今颜模型,看着它能在本地生成惊艳的图片,心里正盘算着怎么把它变成一个能对外服务的“产品”?比如,让公司的设计团队直接调用,或者集成到自己的应用里…...
SystemVerilog实战:在Vivado 2023.1中实现跨文件clog2计算的3种方法
SystemVerilog实战:在Vivado 2023.1中实现跨文件clog2计算的3种方法 当我们将传统Verilog项目迁移到SystemVerilog环境时,经常会遇到$clog2函数的兼容性问题。这个看似简单的对数计算函数,在不同工具链和文件类型中的表现可能大相径庭。特别是…...
5个步骤彻底修复Windows更新问题:Reset Windows Update Tool完整指南
5个步骤彻底修复Windows更新问题:Reset Windows Update Tool完整指南 【免费下载链接】Reset-Windows-Update-Tool Troubleshooting Tool with Windows Updates (Developed in Dev-C). 项目地址: https://gitcode.com/gh_mirrors/re/Reset-Windows-Update-Tool …...
PCIe金手指设计避坑指南:从硬件选型到PCB布局的5个关键细节
PCIe金手指设计避坑指南:从硬件选型到PCB布局的5个关键细节 在高速数字系统设计中,PCIe金手指接口的可靠性直接决定了扩展卡的识别成功率和数据传输稳定性。许多工程师在完成原理图设计和PCB布局后,常会遇到设备频繁识别失败、链路训练不通过…...
软文SEO的常见指标有哪些_如何撰写有吸引力的软文标题
<h2>软文SEO的常见指标有哪些</h2> <p>在当今的数字营销领域,软文(Soft Article)已经成为推动网站流量和品牌知名度的重要工具。要让软文真正发挥作用,我们必须了解软文SEO的常见指标,这些指标可以帮…...
Windows 11 + CUDA 11.7 环境下,TensorRT 8.5.2.2 保姆级安装与配置避坑指南
Windows 11 CUDA 11.7 环境下 TensorRT 8.5.2.2 终极安装指南 刚接触深度学习推理优化的开发者,往往会在环境配置阶段耗费大量时间。TensorRT作为NVIDIA官方推出的高性能推理库,能够显著提升模型在NVIDIA GPU上的运行效率。本文将手把手带你完成Windows…...
如何用baidupankey解决百度网盘提取码获取难题
如何用baidupankey解决百度网盘提取码获取难题 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 引言:被提取码困住的日常 "又要找提取码?"小张盯着电脑屏幕上的百度网盘分享链接,…...
