LLaMA Factory是一个简单高效的大模型训练与微调平台,通过LoRA等技术冻结大部分参数,大幅降低资源需求。它解决了技术门槛高、流程碎片化等问题,特别适合资源有限的轻量化微调、垂直领域定制和交互应用快速落地测试。文章详细介绍了从环境配置、数据准备到SFT微调和模型合并的完整流程,使小白也能轻松上手大模型微调。

原始链接:

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

中文链接:

https://llamafactory.readthedocs.io/zh-cn/latest/index.html

讲在前面: 为什么使用Llama Factory ?什么样的场景下适合使用Llama Factory。

Llama Factory的核心在于它解决了「技术门槛高、资源需求大、流程碎片化」,对于代码基础不是特别好的同学特别友好,并且支持监督微调(SFT)、奖励建模(RM)、强化学习(RLHF/DPO)等全链路训练的技术栈,相比于手搓代码更简单、更便捷、更高效。另外,Llama Factory适合以下三类场景:

  • 「资源有限、轻量、高效」的轻量化微调场景
  • 「垂直领域」的模型定制场景
  • 「交互类应用」的快速落地测试场景

1、Llama Factory 实战

从官网(原始链接)下载Llama Factory包,或者使用如下命令:

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

创建conda环境(运行环境):

conda create -n llama_factory python=3.10conda activate llama_factorycd LLaMA-Factorypip install -r requirements.txt

检验下是否安装成功(打印出一系列参数表明安装成功,如果想知道Llama Factory中不同参数的用处,也可以使用该命令来查看):

llamafactory-cli train -h

下载需要进行微调的模型到本地(以llama/llama3-8B为例)

modelscope download --model llama/Meta-Llama-3-8B-Instruct --local_dir ./dir

--local\_dir 表示大模型参数文件下载后存储的地址,根据自己的需求进行更改。

LLaMA-Factory 内置了基于 Gradio 开发的 ChatBot 推理页面,可用于对模型效果进行人工测试。在 LLaMA-Factory 目录下,执行以下命令即可启动该页面:

CUDA_VISIBLE_DEVICES=0 llamafactory-cli webchat --model_name_or_path llama/Meta-Llama-3-8B-Instruct --template llama3

支持模型的Template,请参考以下链接:

https://github.com/hiyouga/LLaMA-Factory?tab=readme-ov-file#supported-models

运行后会自动跳转到以下页面(http://127.0.0.1:7860/):

以上是LLaMA-Factory启动方式,下面具体描述下如何通过LLaMA-Factory来对LLM开源模型进行微调,主要分为三个阶段:

  • 数据准备,
  • SFT指令微调;
  • Merg模型合并。
一、数据准备

我们将SFT的任务定义为一个简单的"生成式推荐"任务,

言简意赅:根据用户的需求来推荐对应的电影,对应的训练数据应该如下:

{"prompt":"推荐Adventure, Animation, Children, Comedy, Fantasy类型的电影","response":"Toy Story (1995)"}

对应的数据集,可以发送"MovieLens"获取,或者自行根据MovieLens 32M数据集进行构建。

将响应的数据放在LLaMA-Factory项目的data目录下,包括train.json和test.json;

并需要在项目的data/dataset_info.json中加入数据集的相关信息进行注册,设置生成式推荐的数据集名称是"gen_recommend",再填入文件路径和数据集json文件中的字段;这样做是为了,SFT训练阶段开源直接根据数据集名称自动映射到对应的数据集上。

二、SFT指令微调

执行以下命令,即可开始训练;

CUDA_VISIBLE_DEVICES=0 llamafactory-cli train --stage sft --do_train --model_name_or_path llama/Meta-Llama-3-8B-Instruct --dataset movies_sft --dataset_dir ./data --template llama3 --finetuning_type lora --output_dir llama/SFT-Meta-Llama-3-8B-Instruct --overwrite_cache --overwrite_output_dir --cutoff_len 1024 --preprocessing_num_workers 16 --per_device_train_batch_size 1 --per_device_eval_batch_size 1 --gradient_accumulation_steps 8 --lr_scheduler_type cosine --logging_steps 50 --warmup_steps 20 --save_steps 100 --eval_steps 100 --learning_rate 5e-5 --num_train_epochs 5.0 --max_samples 1000 --val_size 0.1 --plot_loss --fp16

训练完成之后,可以在LoRA的模型文件中看到整个训练过程的loss。

三、Merg模型合并

经过基于 LoRA的训练完成后,一般需要进行 Merge 操作,这是为了将 LoRA模型的权重 融合回原始基础模型中,从而得到一个完整、可独立部署的模型。

LLaMA-Factory中是通过启动基于Gadio的WeChat服务的时候,通过添加两个参数 分别是:--adapter\_name\_or\_pathfinetuning\_type,告知服务当前调用的LLM是经过了LoRA训练,然后自动加载LoRA训练后得到的模型。

CUDA_VISIBLE_DEVICES=0 llamafactory-cli webchat --model_name_or_path llama/Meta-Llama-3-8B-Instruct --finetuning_type lora --adapter_name_or_path llama/SFT-Meta-Llama-3-8B-Instruct --template llama3

还有一种更简单的方式:直接通过代码来对原模型参数和LoRA后的模型参数进行merge,然后在启动服务的时候,直接将基座模型的路径改成merge后的路径即可。

import os
import argparse
import shutil
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel
def parse_args():
parser = argparse.ArgumentParser("Merge LoRA adapter into base model")
parser.add_argument("--output_lora", required=True, help="LoRA adapter 目录")
parser.add_argument("--model_name", required=True, help="基座模型目录")
parser.add_argument("--out_dir", default=None, help="合并后模型输出目录")
parser.add_argument("--cpu", action="store_true", help="在 CPU 上合并")
return parser.parse_args()
def main():
args = parse_args()
lora_dir = os.path.abspath(args.output_lora)
base_dir = os.path.abspath(args.model_name)
out_dir  = os.path.abspath(args.out_dir or lora_dir + "-merged")
os.makedirs(out_dir, exist_ok=True)
# 检查文件存在性
for f, desc in [(lora_dir, "LoRA目录"), (base_dir, "基座目录")]:
assert os.path.isdir(f), f"{desc}不存在: {f}"
assert os.path.isfile(os.path.join(lora_dir, "adapter_config.json")), "缺少 adapter_config.json"
assert os.path.isfile(os.path.join(base_dir, "config.json")), "基座目录缺少 config.json"
# 设置设备与 dtype
device_map = None if args.cpu else "auto"
dtype = torch.float32 if args.cpu else (torch.bfloat16 if torch.cuda.is_bf16_supported() else torch.float16)
# 加载基座模型
base = AutoModelForCausalLM.from_pretrained(
base_dir, torch_dtype=dtype, device_map=device_map, trust_remote_code=True, local_files_only=True
)
# 加载LoRA并合并
merged = PeftModel.from_pretrained(base, lora_dir, is_trainable=False).merge_and_unload()
# 保存完整模型和 tokenizer
merged.save_pretrained(out_dir, safe_serialization=True, max_shard_size="2GB")
AutoTokenizer.from_pretrained(base_dir, trust_remote_code=True, local_files_only=True).save_pretrained(out_dir)
# 尝试保存 generation_config
if hasattr(base, "generation_config") and base.generation_config is not None:
try: base.generation_config.save_pretrained(out_dir)
except: pass
# 拷贝可选额外文件
for extra in ["chat_template.jinja"]:
src = os.path.join(base_dir, extra)
if os.path.isfile(src): shutil.copy2(src, os.path.join(out_dir, extra))
if __name__ == "__main__":
main()

2、如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

https://img-blog.csdnimg.cn/img_convert/05840567e2912bcdcdda7b15cba33d93.jpeg

在这里插入图片描述

为什么要学习大模型?

我国在A大模型领域面临人才短缺,数量与质量均落后于发达国家。2023年,人才缺口已超百万,凸显培养不足。随着AI技术飞速发展,预计到2025年,这一缺口将急剧扩大至400万,严重制约我国AI产业的创新步伐。加强人才培养,优化教育体系,国际合作并进是破解困局、推动AI发展的关键。

在这里插入图片描述

在这里插入图片描述

大模型入门到实战全套学习大礼包

1、大模型系统化学习路线

作为学习AI大模型技术的新手,方向至关重要。 正确的学习路线可以为你节省时间,少走弯路;方向不对,努力白费。这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划,带你从零基础入门到精通!

img


2、大模型学习书籍&文档

学习AI大模型离不开书籍文档,我精选了一系列大模型技术的书籍和学习文档(电子版),它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。

在这里插入图片描述

3、AI大模型最新行业报告

2025最新行业报告,针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。

img

4、大模型项目实战&配套源码

学以致用,在项目实战中检验和巩固你所学到的知识,同时为你找工作就业和职业发展打下坚实的基础。

img

5、大模型大厂面试真题

面试不仅是技术的较量,更需要充分的准备。在你已经掌握了大模型技术之后,就需要开始准备面试,我精心整理了一份大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余

img

适用人群

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范
第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署
第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建
第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

https://img-blog.csdnimg.cn/img_convert/05840567e2912bcdcdda7b15cba33d93.jpeg

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐