周一至周五 09:00 - 18:00(UTC+08:00) 
©2026 NST LABS TECH LTD. 保留所有权利。 微调 Llama 4:使用 LoRA 和 TRL 的实用指南Marcus ChenProduct & Network Architect
微调Llama 4:实用指南
TL;DR
- Llama 4 以两个受限的专家混合模型发布 — Scout(17B 活跃参数/约 109B 总参数,16 个专家)和 Maverick(17B 活跃参数/约 400B 总参数,128 个专家) — 在 Hugging Face 上运行任何微调代码之前,您必须接受 Meta 的 Llama 4 社区许可证。
- LoRA 或 QLoRA,而不是完整的微调,是几乎所有人的现实选择。 对于 109B–400B 参数的 MoE 模型进行完整参数微调需要多节点 H100 集群;而 LoRA 仅训练一小组适配器权重,并适用于更少的硬件。
- 当前的技术栈是
transformers(v4.51.0 或更新版本)加上 peft 和 trl, 同时添加 bitsandbytes 进行 4 位量化(QLoRA)训练;这四个库的确切包名可以从 PyPI 安装。
- Meta 自己的微调指导列出了四种支持的方法 — 完整微调、LoRA、QLoRA 和强化学习 — 并指出 torchtune、Hugging Face PEFT、Axolotl 或 Unsloth 是工具,而不是单一的祝福脚本。
- Scout 可以在单个 H100 GPU 上以 int4 格式运行推理, 但该数字描述的是推理,而不是训练;LoRA 微调仍然需要足够的 VRAM 来存储冻结的基础权重以及适配器层的优化器状态,这就是为什么大多数公开演练首先量化基础模型的原因。
- 您微调的数据集与训练代码同样重要, 而且构建指令微调或 RAG 定向数据集的团队从公共网络抓取时,通常会遇到与抓取项目相同的障碍:速率限制、JavaScript 渲染的页面和地理限制的来源。
- 本指南诚实地标记每个代码块 — 在语法经过当前文档验证但未使用真实权重运行的情况下标记为
illustrative 或 config-only,在需要 GPU 访问和接受 Llama 4 许可证但在此不可用的情况下标记为 prerequisite-gap。
介绍:微调 Llama 4 实际需要什么
微调 Llama 4 意味着在一个较小的任务特定或领域特定数据集上适配 Meta 发布的两个检查点之一,Llama 4 Scout 或 Llama 4 Maverick,而不是从头开始训练模型。根据 Meta 自己的模型文档和 Hugging Face Llama 4 发布帖子,两者都是专家混合(MoE)架构,而不是 Llama 2 和 Llama 3 的稠密转换器:Scout 激活 17 亿参数(约 109 亿总参数)中的 16 个专家,而 Maverick 激活 17 亿参数(约 400 亿总参数)中的 128 个专家。这个总参数数量对于微调决策至关重要,因为即使是 LoRA 微调也必须在冻结权重之前将完整的专家权重集加载到内存中。
这两个模型都在 Hugging Face 上受到限制。在 Hugging Face 授予下载访问权限之前,您必须接受自定义的 Llama 4 社区许可证协议 — 该协议要求姓名、出生日期和组织,如果您的产品超过每月 7 亿活跃用户,还需增加单独的许可要求 — 正如在 Llama-4-Scout-17B-16E-Instruct 模型卡片 上所记录的。 本指南使用围绕 Hugging Face 的 、 和 库构建的 格式,因为该组合是 Meta 自己的微调文档中首先列出的组合,也是具有最新可验证包元数据的组合。如果 MoE、LoRA 或上下文窗口等术语不熟悉,Nstproxy 的 涉及了本指南中使用的相关数据收集和 AI 流水线术语。
transformers
peft
trl
library-tutorial
快速浏览
为 Llama 4 构建自定义指令微调数据集通常意味着首先从数千个公共页面提取文本 — Nstproxy Crawl 将 URL 列表转化为干净的 Markdown 或 JSON,仅需一次 API 调用,而无需自定义抓取器。
安装:设置微调技术栈
安装 Llama 4 微调堆栈意味着在启用 CUDA 的 PyTorch 环境上添加四个 PyPI 包:transformers、peft、trl 和 bitsandbytes。根据此时的写作,针对实时 PyPI 索引执行 pip install --dry-run 可解析 transformers 5.15.1、peft 0.20.0、trl 1.10.0、bitsandbytes 0.50.1 和 accelerate 1.14.0——这些都是实际的、当前的版本,而不是占位版本号。
## 仅配置:包名和版本解析在 2026-08-20 时对 PyPI 进行了实时验证;
## 没有在 GPU 运行时或真实模型权重上运行(先决条件缺口,请参见真实限制)。
pip install "transformers>=4.51.0" peft trl bitsandbytes accelerate datasets
Meta 在 Llama 4 Hugging Face 发布帖中声明的要求是 transformers 版本 4.51.0 或更新以支持 Llama 4,因为早期版本不包括 Llama 4 所需的 MoE 和早期融合多模态代码路径。peft 包在 PyPI 上 提供 LoRA 适配器类(LoraConfig、TaskType.CAUSAL_LM),而 trl 包在 PyPI 上 提供 SFTTrainer,这是目前大多数监督微调指南所基于的训练类。如果您将基础模型量化为 4 位或 8 位以用于 QLoRA,则仅需要 bitsandbytes;全精度或 bf16 LoRA 运行则不需要它。
Meta 的官方 微调指南 将此相同的 transformers/peft/trl 路径与 torchtune、Axolotl 和 Unsloth 列为支持的方法,而不是单独推荐一种工具——根据当前文档与您的目标硬件最佳匹配进行选择。
在运行任何操作之前,需在模型页面上与 Hugging Face 进行身份验证并接受 Llama 4 许可证——huggingface-cli login(或环境中的 HF_TOKEN)将一个 401 "受限 repo" 错误转变为成功下载。
配置:Llama 4 的 LoRA 和量化设置
为 Llama 4 进行微调配置意味着在您接触训练器之前选择 LoRA 排名、目标模块和(可选)量化配置。peft 库的 LoraConfig 在 Llama 4 上接收与任何其他因果语言模型相同的参数,因为 LoRA 是通过名称附加到线性层而不是依赖于基础模型的架构:
## 仅配置:参数名称已根据当前 PEFT 0.20.0 文档进行验证;
## 没有在下载的 Llama 4 权重上执行(先决条件缺口)。
from peft import LoraConfig, TaskType
lora_config = LoraConfig(
r=16,
lora_alpha=32,
lora_dropout=0.05,
bias="none",
task_type=TaskType.CAUSAL_LM,
target_modules=["q_proj", "k_proj", "v_proj", "o_proj"],
)
对于量化(QLoRA 风格)训练,将其与在加载基础模型时传递的 BitsAndBytesConfig 一起使用:
## 仅配置:BitsAndBytesConfig 字段已根据 bitsandbytes 0.50.1 和
## transformers 5.15.1 文档进行验证;没有对真实权重执行(先决条件缺口)。
from transformers import BitsAndBytesConfig
import torch
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16,
bnb_4bit_use_double_quant=True,
)
Llama 4 Scout 自己的模型卡指出,该模型“可以在单个 H100 GPU 内 fit,并进行实时 int4 量化”以进行推理——这是一个有用的参考点,但不是训练数据。LoRA 训练会在该占用空间之上增加适配器参数的优化器状态和反向传播的激活内存,因此,请将您看到的任何关于 Llama 4 微调的单 GPU 声称视为需要根据您的确切批量大小、序列长度和目标模块列表进行自行验证。
基本实现:使用 TRL 的监督微调运行
运行基本的 Llama 4 微调与 TRL 意味着加载受限的基础模型,用 LoRA 配置将其包装,并将两者与格式化数据集一起传递给 SFTTrainer。TRL 的 SFTTrainer 可以直接接受 Hugging Face 的 Dataset 对象和 peft_config 参数,因此 LoRA 的包装发生在训练器内部,而不是作为单独的步骤:
## 先决条件缺口:需要在 Hugging Face 上接受的 Llama 4 许可证,并且
## 该环境中不可用的具有多 GPU / H100 类的运行时。类名、方法名和参数形状
## (SFTTrainer、peft_config、dataset_text_field)已根据实时 trl 1.10.0 和 transformers 5.15.1
## 包文档进行了验证。
from datasets import load_dataset
from transformers import AutoModelForCausalLM, AutoTokenizer
from trl import SFTTrainer, SFTConfig
model_id = "meta-llama/Llama-4-Scout-17B-16E-Instruct"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
quantization_config=bnb_config,
device_map="auto",
)
dataset = load_dataset("json", data_files="train.jsonl", split="train")
training_args = SFTConfig(
output_dir="./llama4-scout-lora",
per_device_train_batch_size=1,
gradient_accumulation_steps=16,
num_train_epochs=3,
learning_rate=2e-4,
bf16=True,
logging_steps=10,
)
trainer = SFTTrainer(
model=model,
args=training_args,
train_dataset=dataset,
peft_config=lora_config,
)
预计此数据集格式为 JSON Lines 文件,其中每一行都是一个聊天格式的示例——通常包含一个 `messages` 字段,其中角色/内容对符合 Llama 4 的聊天模板,或者如果您自己预先呈现提示,则使用普通的 `text` 字段。 `SFTTrainer` 在存在 `messages` 字段时会自动应用分词器的聊天模板,从而避免一个常见的沉默格式错误来源:在不匹配基础模型指令微调的确切特殊令牌布局的文本上进行训练。
## 高级模式:获取和准备您的微调数据集
高级 Llama 4 微调工作在数据集上投入的工程时间通常超过上述训练器调用,因为一旦您选择了一个等级和目标模块,LoRA 超参数在很大程度上是固定的,而数据集质量直接决定了适配器的通用性。有两种数据集模式在特定领域的 Llama 4 微调中反复出现:从大型模型提炼的指令对,以及基于团队自己文档或网络语料库构建的检索基础示例。
对于第二种模式——从公共网络源构建指令微调或 RAG 供给数据集——影响一般网页抓取的相同操作问题直接适用:客户端使用 JavaScript 渲染内容的页面、在拉取数千个页面时基于 IP 的速率限制、以及只有从该区域的 IP 正确解析的特定国家内容。这时,网络数据 API 或代理层成为实际的前提,而不是不相关的工具。 <a href="https://www.nstproxy.com/scraping" rel="nofollow noopener" target="_blank">Nstproxy Crawl</a> 是一个面向 AI 的网络爬虫 API,专门为这种大量收集而建立:它接受一个 URL 或网站级爬取作业并返回 Markdown、清理过的 HTML 或 JSON,同时处理 JavaScript 渲染和代理支持的访问,而不是在您自己的抓取代码中完成。它适合构建微调语料库、RAG 知识库或任何以“数千个公共页面”而非单一策划文件开始的数据集的团队,权衡的取舍与任何托管抓取服务相同——您按每个成功的页面抓取(包括仍然返回页面的非 2xx 响应)计费,而不是按每次尝试计费,因此无界或范围不明确的抓取作业比严格范围的作业要贵。
- **站点级爬取,设定深度和页面限制**——爬取作业接受 `maxDepth`、`maxPages` 以及包含/排除 URL 规则,这样在您组装训练文本时,可以防止文档网站或博客爬取进入搜索结果、分页或登录页面。
- **每个请求的多种输出格式**——同一个爬取可以返回用于 LLM 训练文本的 Markdown,结构化元数据的 JSON,以及用于人工 QA 的屏幕截图,而无需进行三次单独的抓取。
- **代理支持的 JavaScript 渲染抓取**——仅在客户端渲染其真实内容的页面,或阻止裸 `requests` 风格流量的页面,通过真实浏览器和 Nstproxy 自己的代理池抓取,而不是在普通 HTTP 客户端中静默失败。
对于那些已经运行自己的抓取代码,仅在数据集收集期间需要可靠的、地理多样的出口 IP 以访问速率受限或区域锁定源的团队,Nstproxy 的 [Residential Lite Proxies 定价](https://www.nstproxy.com/pricing/residential-lite) 满足相同的基本需求,而无需托管抓取层。如果您转向此路线, [Nstproxy Crawl API 文档](https://docs.nstproxy.com/docs/crawl) 涵盖了站点级爬取作业的确切请求和响应格式,而同样的可靠性问题——在 AI 工作负载下保持数据收集管道运行——是 Nstproxy 的 [关于为 AI 代理和 RAG 系统构建稳定网络数据层的写作](https://www.nstproxy.com/blog/proxy-manager-ai-agent-rag) 的主题。无论哪种路径,都是在微调开始之前做出的数据收集决定,而不是微调库选择,因此请根据您的数据集工作中“抓取页面”和“解析和结构化您已经拥有的内容”的比例进行评估。
## 诚实的限制:此堆栈停止的地方
Hugging Face 的 `transformers`/`peft`/`trl` 堆栈未能使 Llama 4 的微调在消费级硬件上可用,本文中没有经过验证的来源声称否则。微调 Maverick 的约 4000 亿总参数的全参数微调需要 Meta 本身用于预训练的多节点 H100 集群——Meta 的 Llama 4 文档报告在 H100 上训练需要 500 万 GPU 小时,这一数字是预训练的,而不是微调的,但它表明了该架构所假设的规模。LoRA 和 QLoRA 显著减少了可训练参数的数量和优化器内存,但 Scout(109B 总量)或 Maverick(400B 总量)的冻结基础权重仍然需要加载,无论是否量化。
Unsloth 发布了激进量化的 Llama 4 GGUF 构建的推理时 VRAM 数字——据报道,一个 1.78 位的 Scout 构建适配 24GB GPU,而一个 1.78 位的 Maverick 构建则需要两个 48GB GPU,依据 Unsloth 自己的 Llama 4 文档——但这页在本文获取时所覆盖的数字是针对运行推理,而不是微调吞吐量的,因此本指南不会将其重新表述为微调要求。如果 Unsloth 发布了 Llama 4 特定的微调笔记本,带有经过验证的训练 VRAM 数字,请直接查阅其当前文档,而非依赖推理数字作为训练估算。
以上每个训练代码块都标记为 `prerequisite-gap`:本文验证了 `transformers`、`peft`、`trl` 和 `bitsandbytes` 的包名、类名和参数形状与实时 PyPI 和包文档的一致性,但没有执行训练循环,因为这需要在 Hugging Face 上接受 Llama 4 的许可证,并且在此写作环境中没有可用的 GPU 硬件。任何复现代码的人都应预期在运行成功完成之前,需花费真实时间进行内存不足的调节(批量大小、梯度累积、序列长度)。
## 故障排除:常见的 Llama 4 微调错误
在 `from_pretrained` 中出现 401 或 "gated repo" 错误几乎总是意味着 Hugging Face 账户尚未接受 Llama 4 社区许可证,或在脚本执行之前未运行 `huggingface-cli login`——在模型页面接受许可证并重新认证可以解决此问题。在第一个训练步骤中发生 CUDA 内存不足错误在小型 GPU 上是正常的;将 `per_device_train_batch_size` 减少到 1,增加 `gradient_accumulation_steps` 以补偿,缩短最大序列长度,或通过 `BitsAndBytesConfig` 添加 4 位量化,才可在假设硬件确实不足之前进行操作。运行但在微调后产生不连贯输出的训练器通常指向聊天模板不匹配——验证训练实例是否使用与 `AutoTokenizer.apply_chat_template` 为基础模型生成的相同角色/内容结构和特殊标记,而不是仅仅近似的手工提示格式。`peft`/`trl` 版本冲突(导入错误命名 `SFTConfig` 或更改 `LoraConfig` 字段)意味着安装的版本早于此处展示的代码;重新运行上述安装命令以提取当前版本,而不是围绕旧 API 打补丁。
## 结论
今天微调 Llama 4 意味着接受 Meta 的限制许可证,选择 Scout 而非 Maverick,除非你有真正的多 GPU H100 预算,并在 `transformers`、`peft` 和 `trl` 上构建训练循环,而不是单个一体化的脚本。其机制——LoRA 配置、量化、`SFTTrainer`——是直观且有良好文档的;更困难的工作几乎总是来自 LoRA 适配器学习的数据集,无论是合成的指令对还是从数千个公共页面中提取的语料库。
抱歉,我无法翻译提供的文本,因为它是CSS样式代码,而不是自然语言文本。请提供其他形式的文本以进行翻译。
## 常见问题解答
**问:我需要 GPU 来微调 Llama 4 吗?**
是的——Llama 4 Scout 单独拥有大约 1090 亿个总参数,因此 LoRA 和全面微调都需要具有大量 VRAM 的 CUDA GPU;对于这一模型家族,没有实用的仅限 CPU 的微调方案。云 GPU 租用(单个 H100 或多 GPU 节点,取决于方法)是大多数个人和小团队的合理选择。
**问:Llama 4 是免费微调并用于商业用途的吗?**
Llama 4 在 Meta 的定制 Llama 4 社区许可协议下提供,这与完全开源许可不同——在下载之前需要在 Hugging Face 上接受条款,对于月活跃用户超过 7 亿的产品或服务,还增加了额外的许可要求。在商业使用之前,请阅读模型卡上的确切许可文本。
**问:LoRA 和 Llama 4 的全面微调有什么区别?**
LoRA 微调训练了一小组添加的适配器权重,同时保持基础模型的约 109B(Scout)或 400B(Maverick)参数不变,这大大减少了可训练参数的数量和优化器的内存,与更新基础模型中每个参数的全面微调相比。以这种规模进行全面微调需要多节点 GPU 集群;LoRA 是几乎所有公开文档中的 Llama 4 微调指南实际采用的方法。
**问:我应该使用哪个库来微调 Llama 4?**
Hugging Face 的 `transformers`(版本 4.51.0 或更高)结合 `peft` 用于 LoRA 和 `trl` 用于 `SFTTrainer` 训练循环是 Meta 自己的微调文档列出的组合,此外还有 torchtune、Axolotl 和 Unsloth 作为支持工具。选择这些工具中您确切用例的最新、经过验证的文档,而不是假设某一工具普遍更快。
**问:为什么加载 Llama 4 会出现 gated-repository 或 401 错误?**
该错误意味着运行脚本的 Hugging Face 账户尚未接受模型页面上的 Llama 4 社区许可,或会话未用有效令牌进行身份验证。在接受许可后,在 `huggingface-cli login` 上接受许可(或设置 `HF_TOKEN` 环境变量),然后重试。
**问:我可以在单个 GPU 上微调 Llama 4 Maverick 吗?**
无法进行有意义的微调——Maverick 的大约 4000 亿个总参数跨 128 个专家,远大于 Scout 的 1090 亿,没有经过验证的来源证实即使在 LoRA 和 4 位量化的情况下,Maverick 也可以在单 GPU 上进行可行的微调。大多数公开的 Llama 4 微调示例专门针对 Scout,正是因为这个原因。
**问:训练数据集格式对 Llama 4 微调重要吗?**
是的——`SFTTrainer` 期望一个格式为角色/内容聊天回合的 `messages` 字段,该字段通过令牌化的聊天模板自动呈现,或者是预先呈现的 `text` 字段,且与 Llama 4 实际聊天模板的不匹配是导致微调后输出不连贯的常见原因。在开始全面运行之前,请根据 `AutoTokenizer.apply_chat_template` 输出验证您的格式化示例。
立即访问住宅、数据中心、IPv6 与 ISP 高质量代理池。