微信扫码
添加专属顾问
LlamaFactory 是一个封装比较完善的LLM微调工具,它能够帮助用户快速地训练和微调大多数LLM模型。
https://github.com/hiyouga/LLaMA-Factory
LlamaFactory主要通过Trainer类来实现训练流程,通过设置数据集、模型选型、训练类型、微调超参、模型保存,以及训练状态监控等信息,来开启训练。
支持的训练方法(这里的Pre-Training指的是增量预训练)
LlamaFactory基于PEFT和TRL进行二次封装,从而可以快速开始SFT和RLHF微调。同时,引入GaLore和Unsloth等方案,能降低训练显存占用。
• 各种模型: LLaMA, LLaVA, Mistral, Mixtral-MoE, Qwen, Yi, Gemma, Baichuan, ChatGLM, Phi, etc.
• 集成训练方法: (Continuous) pre-training, (multimodal) supervised fine-tuning, reward modeling, PPO, DPO and ORPO.
• Scalable resources: 32-bit full-tuning, 16-bit freeze-tuning, 16-bit LoRA and 2/4/8-bit QLoRA via AQLM/AWQ/GPTQ/LLM.int8.
• Advanced algorithms: GaLore, BAdam, DoRA, LongLoRA, LLaMA Pro, Mixture-of-Depths, LoRA+, LoftQ and Agent tuning.
• 实用tricks: FlashAttention-2, Unsloth, RoPE scaling, NEFTune and rsLoRA.
• 实验监控:LlamaBoard, TensorBoard, Wandb, MLflow, etc.
• 推理集成: OpenAI-style API, Gradio UI and CLI with vLLM worker.
LlamaFactory支持单机单卡,同时整合了accelerate和deepseed的单机多卡、多机多卡分布式训练。
| 模型名 | 模型大小 | Template |
| Baichuan2[1] | 7B/13B | baichuan2 |
| BLOOM[2] | 560M/1.1B/1.7B/3B/7.1B/176B | - |
| BLOOMZ[3] | 560M/1.1B/1.7B/3B/7.1B/176B | - |
| ChatGLM3[4] | 6B | chatglm3 |
| Command-R[5] | 35B/104B | cohere |
| DeepSeek (MoE)[6] | 7B/16B/67B/236B | deepseek |
| Falcon[7] | 7B/11B/40B/180B | falcon |
| Gemma/CodeGemma[8] | 2B/7B | gemma |
| GLM4[9] | 9B | glm4 |
| InternLM2[10] | 7B/20B | intern2 |
| LLaMA[11] | 7B/13B/33B/65B | - |
| LLaMA-2[12] | 7B/13B/70B | llama2 |
| LLaMA-3[13] | 8B/70B | llama3 |
| LLaVA-1.5[14] | 7B/13B | vicuna |
| Mistral/Mixtral[15] | 7B/8x7B/8x22B | mistral |
| OLMo[16] | 1B/7B | - |
| PaliGemma[17] | 3B | gemma |
| Phi-1.5/2[18] | 1.3B/2.7B | - |
| Phi-3[19] | 4B/7B/14B | phi |
| Qwen[20] | 1.8B/7B/14B/72B | qwen |
| Qwen1.5 (Code/MoE)[21] | 0.5B/1.8B/4B/7B/14B/32B/72B/110B | qwen |
| Qwen2 (MoE)[22] | 0.5B/1.5B/7B/57B/72B | qwen |
| StarCoder2[23] | 3B/7B/15B | - |
| XVERSE[24] | 7B/13B/65B | xverse |
| Yi (1/1.5)[25] | 6B/9B/34B | yi |
| Yi-VL[26] | 6B/34B | yi_vl |
| Yuan[27] | 2B/51B/102B | yuan |
基于LlamaFactory框架进行的各种训练效率比较
适合进行各种LLM在不同训练方法下,效果评估对比
LlamaFactory配置的数据集格式。
• Wiki Demo (en)[28]
• RefinedWeb (en)[29]
• RedPajama V2 (en)[30]
• Wikipedia (en)[31]
• Wikipedia (zh)[32]
• Pile (en)[33]
• SkyPile (zh)[34]
• FineWeb (en)[35]
• FineWeb-Edu (en)[36]
• The Stack (en)[37]
• StarCoder (en)[38]
• Identity (en&zh)[39]
• Stanford Alpaca (en)[40]
• Stanford Alpaca (zh)[41]
• Alpaca GPT4 (en&zh)[42]
• Glaive Function Calling V2 (en&zh)[43]
• LIMA (en)[44]
• Guanaco Dataset (multilingual)[45]
• BELLE 2M (zh)[46]
• BELLE 1M (zh)[47]
• BELLE 0.5M (zh)[48]
• BELLE Dialogue 0.4M (zh)[49]
• BELLE School Math 0.25M (zh)[50]
• BELLE Multiturn Chat 0.8M (zh)[51]
• UltraChat (en)[52]
• OpenPlatypus (en)[53]
• CodeAlpaca 20k (en)[54]
• Alpaca CoT (multilingual)[55]
• OpenOrca (en)[56]
• SlimOrca (en)[57]
• MathInstruct (en)[58]
• Firefly 1.1M (zh)[59]
• Wiki QA (en)[60]
• Web QA (zh)[61]
• WebNovel (zh)[62]
• Nectar (en)[63]
• deepctrl (en&zh)[64]
• Advertise Generating (zh)[65]
• ShareGPT Hyperfiltered (en)[66]
• ShareGPT4 (en&zh)[67]
• UltraChat 200k (en)[68]
• AgentInstruct (en)[69]
• LMSYS Chat 1M (en)[70]
• Evol Instruct V2 (en)[71]
• Cosmopedia (en)[72]
• STEM (zh)[73]
• Ruozhiba (zh)[74]
• LLaVA mixed (en&zh)[75]
• Open Assistant (de)[76]
• Dolly 15k (de)[77]
• Alpaca GPT4 (de)[78]
• OpenSchnabeltier (de)[79]
• Evol Instruct (de)[80]
• Dolphin (de)[81]
• Booksum (de)[82]
• Airoboros (de)[83]
• Ultrachat (de)[84]
• DPO mixed (en&zh)[85]
• UltraFeedback (en)[86]
• Orca DPO Pairs (en)[87]
• HH-RLHF (en)[88]
• Nectar (en)[89]
• Orca DPO (de)[90]
• KTO mixed (en)[91]
部分数据集的使用需要确认,推荐使用下述命令登录 Hugging Face 账户。
pip install --upgrade huggingface_hub
huggingface-cli login| 必需项 | 至少 | 推荐 |
| python | 3.8 | 3.11 |
| torch | 1.13.1 | 2.3.0 |
| transformers | 4.41.2 | 4.41.2 |
| datasets | 2.16.0 | 2.19.2 |
| accelerate | 0.30.1 | 0.30.1 |
| peft | 0.11.1 | 0.11.1 |
| trl | 0.8.6 | 0.9.4 |
| 可选项 | 至少 | 推荐 |
| CUDA | 11.6 | 12.2 |
| deepspeed | 0.10.0 | 0.14.0 |
| bitsandbytes | 0.39.0 | 0.43.1 |
| vllm | 0.4.3 | 0.4.3 |
| flash-attn | 2.3.0 | 2.5.9 |
* 估算值
| 方法 | 精度 | 7B | 13B | 30B | 70B | 110B | 8x7B | 8x22B |
| Full | AMP | 120GB | 240GB | 600GB | 1200GB | 2000GB | 900GB | 2400GB |
| Full | 16 | 60GB | 120GB | 300GB | 600GB | 900GB | 400GB | 1200GB |
| Freeze | 16 | 20GB | 40GB | 80GB | 200GB | 360GB | 160GB | 400GB |
| LoRA/GaLore/BAdam | 16 | 16GB | 32GB | 64GB | 160GB | 240GB | 120GB | 320GB |
| QLoRA | 8 | 10GB | 20GB | 40GB | 80GB | 140GB | 60GB | 160GB |
| QLoRA | 4 | 6GB | 12GB | 24GB | 48GB | 72GB | 30GB | 96GB |
| QLoRA | 2 | 4GB | 8GB | 16GB | 24GB | 48GB | 18GB | 48GB |
估计的不一定准,取决于输入输出长度、batch_size。建议使用accelerate估计。
• examples目录下,存放各种预置的例子
• src目录的llm-tuner是项目源码
• data目录下,存放各种预置的数据集,以及数据集配置文件dataset_info.json
可以在 src/llmtuner/data/template.py 中添加自己的对话模板。
为了确保和LLM SFT时一致,确保对话模板格式很关键。
关于数据集文件的格式,请参考 data/README_zh.md[92] 的内容。你可以使用 HuggingFace / ModelScope 上的数据集或加载本地数据集。
使用自定义数据集时,请更新 data/dataset_info.json[93] 文件,进行数据集名称、数据集字段以及数据集路径的配置。
dataset_info.json的一些默认配置数据集信息
{
"alpaca_gpt4_zh": {
"file_name": "alpaca_gpt4_data_zh.json"
},
"identity": {
"file_name": "identity.json"
},
"oaast_sft_zh": {
"file_name": "oaast_sft_zh.json",
"columns": {
"prompt": "instruction",
"query": "input",
"response": "output",
"history": "history"
}
},
"lima": {
"file_name": "lima.json",
"columns": {
"prompt": "instruction",
"query": "input",
"response": "output",
"history": "history"
}
},
"belle_2m": {
"hf_hub_url": "BelleGroup/train_2M_CN",
"ms_hub_url": "AI-ModelScope/train_2M_CN"
},
"firefly": {
"hf_hub_url": "YeungNLP/firefly-train-1.1M",
"columns": {
"prompt": "input",
"response": "target"
}
},
"wikiqa": {
"hf_hub_url": "wiki_qa",
"columns": {
"prompt": "question",
"response": "answer"
}
}
}也可以在 template.py 中添加自己的对话模板。典型的几个模板
_register_template(
name="alpaca",
format_user=StringFormatter(slots=["### Instruction:\n{{content}}\n\n### Response:\n"]),
format_separator=EmptyFormatter(slots=["\n\n"]),
default_system=(
"Below is an instruction that describes a task. "
"Write a response that appropriately completes the request.\n\n"
),
)
_register_template(
name="qwen",
format_user=StringFormatter(slots=["<|im_start|>user\n{{content}}<|im_end|>\n<|im_start|>assistant\n"]),
format_system=StringFormatter(slots=["<|im_start|>system\n{{content}}<|im_end|>\n"]),
format_observation=StringFormatter(slots=["<|im_start|>tool\n{{content}}<|im_end|>\n<|im_start|>assistant\n"]),
format_separator=EmptyFormatter(slots=["\n"]),
default_system="You are a helpful assistant.",
stop_words=["<|im_end|>"],
replace_eos=True,
)
_register_template(
name="chatml",
format_user=StringFormatter(slots=["<|im_start|>user\n{{content}}<|im_end|>\n<|im_start|>assistant\n"]),
format_system=StringFormatter(slots=["<|im_start|>system\n{{content}}<|im_end|>\n"]),
format_observation=StringFormatter(slots=["<|im_start|>tool\n{{content}}<|im_end|>\n<|im_start|>assistant\n"]),
format_separator=EmptyFormatter(slots=["\n"]),
stop_words=["<|im_end|>", "<|im_start|>"],
replace_eos=True,
)
_register_template(
name="deepseek",
format_user=StringFormatter(slots=["User: {{content}}\n\nAssistant:"]),
format_system=StringFormatter(slots=[{"bos_token"}, "{{content}}"]),
force_system=True,
)
_register_template(
name="default",
format_user=StringFormatter(slots=["Human: {{content}}\nAssistant: "]),
format_system=StringFormatter(slots=["{{content}}\n"]),
format_separator=EmptyFormatter(slots=["\n"]),
)
_register_template(
name="llama2",
format_user=StringFormatter(slots=[{"bos_token"}, "[INST] {{content}} [/INST]"]),
format_system=StringFormatter(slots=["<<SYS>>\n{{content}}\n<</SYS>>\n\n"]),
default_system=(
"You are a helpful, respectful and honest assistant. "
"Always answer as helpfully as possible, while being safe. "
"Your answers should not include any harmful, unethical, "
"racist, sexist, toxic, dangerous, or illegal content. "
"Please ensure that your responses are socially unbiased and positive in nature.\n\n"
"If a question does not make any sense, or is not factually coherent, "
"explain why instead of answering something not correct. "
"If you don't know the answer to a question, please don't share false information."
),
)
_register_template(
name="llama2_zh",
format_user=StringFormatter(slots=[{"bos_token"}, "[INST] {{content}} [/INST]"]),
format_system=StringFormatter(slots=["<<SYS>>\n{{content}}\n<</SYS>>\n\n"]),
default_system="You are a helpful assistant. 你是一个乐于助人的助手。",
)
_register_template(
name="llama3",
format_user=StringFormatter(
slots=[
(
"<|start_header_id|>user<|end_header_id|>\n\n{{content}}<|eot_id|>"
"<|start_header_id|>assistant<|end_header_id|>\n\n"
)
]
),
format_system=StringFormatter(
slots=[{"bos_token"}, "<|start_header_id|>system<|end_header_id|>\n\n{{content}}<|eot_id|>"]
),
format_observation=StringFormatter(
slots=[
(
"<|start_header_id|>tool<|end_header_id|>\n\n{{content}}<|eot_id|>"
"<|start_header_id|>assistant<|end_header_id|>\n\n"
)
]
),
default_system="You are a helpful assistant.",
stop_words=["<|eot_id|>"],
replace_eos=True,
)在一个干净的虚拟环境,安装如下依赖
git clone https://github.com/hiyouga/LLaMA-Factory.git
conda create -n llama_factory python=3.10
conda activate llama_factory
cd LLaMA-Factory
pip install -e .[metrics]可选的额外依赖项:deepspeed、metrics、unsloth、galore、badam、vllm、bitsandbytes、gptq、awq、aqlm、qwen、modelscope、quality
LlamaFactory Colab Demo脚本:
https://colab.research.google.com/drive/1eRTPn37ltBbYsISy9Aw2NuI2Aq5CQrD9?usp=sharing
ui界面目前只支持单卡训练
目前,最新版本绝大多数examples已改成yaml配置文件,而不是shell命令用parser读取参数了.
当然,本质上就是把训练参数传到train.py中
examples下的lora_single_gpu/llama3_lora_sft.yaml
# model
model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct
# method
stage: sft
do_train: true
finetuning_type: lora
lora_target: q_proj,v_proj
# dataset
dataset: identity,alpaca_gpt4_en
template: llama3
cutoff_len: 1024
max_samples: 1000
overwrite_cache: true
preprocessing_num_workers: 16
# output
output_dir: saves/llama3-8b/lora/sft
logging_steps: 10
save_steps: 500
plot_loss: true
overwrite_output_dir: true
# train
per_device_train_batch_size: 1
gradient_accumulation_steps: 8
learning_rate: 0.0001
num_train_epochs: 3.0
lr_scheduler_type: cosine
warmup_steps: 0.1
fp16: true
# eval
val_size: 0.1
per_device_eval_batch_size: 1
evaluation_strategy: steps
eval_steps: 500脚本 examples/lora_multi_gpu/multi_node.sh
#!/bin/bash
# also launch it on slave machine using slave_config.yaml
CUDA_VISIBLE_DEVICES=0,1,2,3 accelerate launch \
--config_file examples/accelerate/master_config.yaml \
src/train.py examples/lora_multi_gpu/llama3_lora_sft.yaml之前一个训练日志:
配置了几个数据集,进行单机多卡 llama3_8b_instruct进行中文数据集sft训练
llama3_8b_instruct进行增量预训练还是中文数据SFT都不过是倒腾数据集和配置脚本的事情,当然这只是踏出训练的第一步。
毕竟搞出一个baseline和能训练好还是两码事(需要自己调参摸索,更需要学习开源的经验)。
LlamaFactory适合快速进行全参数、LoRA等高效微调,适合增量预训练、指令微调和强化学习微调。
它具备可视化界面,同时集成了多种比较前沿的训练Trick,用的人多。
但是呢,由于集成地太好,隐藏了很多细节,一方面不利于学习和定制化。另一方面,在使用的时候,也需要详细了解参数配置。
LlamaFactory适合快速上手,毕竟它已经集成好的框架将分散的包组合到一起,能够省时省力,但用好需花一点精力。
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业
2026-07-02
不改一行代码,看透 AI Agent 的每一次调用
2026-07-02
AI 不缺智商缺纪律:一场 Harness 工程化实践
2026-07-02
天工 3.2 重磅升级:Skywork Tags 上线,给 Agent 一张工牌,邀其加入你的工作群聊
2026-07-02
Context Infra 会是 AI 领域的下一个热点
2026-07-01
一文了解|SkillScan 智能体技能安全扫描最佳实践
2026-07-01
协作的逆向演进:从 Agent 逻辑重构团队管理
2026-07-01
港科大郭毅可谈Agentic AI时代的核心命题:人机共生,人不可能退场
2026-07-01
Sonnet 5终于来了,然而Opus 4.8现在有点尴尬
2026-04-15
2026-04-07
2026-04-07
2026-04-24
2026-04-17
2026-04-05
2026-04-05
2026-04-14
2026-04-24
2026-04-22
欢迎您使用【53AI 官方网站】(以下简称“本网站”或“我们”)。本《会员服务协议》(以下简称“本协议”)是您(以下简称“会员”或“用户”)与【深圳市博思协创网络科技有限公司】之间关于注册、登录及使用本网站会员服务所订立的法律协议。
在您注册或登录前,请务必审慎阅读、充分理解各条款内容,特别是免除或限制责任的条款、知识产权条款、争议解决条款等。此类条款将以加粗形式提示您注意。 当您通过微信公众号授权、手机验证码验证或其他方式成功登录本网站时,即视为您已完全理解并同意接受本协议的全部内容。
一、 定义
本网站:指由【深圳市博思协创网络科技有限公司】运营的,域名为【53ai.com】的网站及相关移动端页面。
会员服务:指本网站向注册会员提供的知识库文章查阅、内容检索及其他相关增值服务。
知识库内容:指本网站发布的包括但不限于文字、图表、数据、研究报告、行业分析等数字化内容资源。
二、 账号注册与登录
登录方式:本网站支持以下登录方式,您可根据实际情况选择:
微信公众号授权登录:您同意将您的微信OpenID信息授权给本网站,用于创建或关联会员账号。
手机验证码登录:您需提供真实有效的手机号码,并通过短信验证码完成身份验证与登录/注册。
账号安全:您的账号仅限您本人使用,禁止赠与、借用、租用、转让或售卖。因您保管不善导致的账号被盗、密码泄露等损失,由您自行承担。
实名认证:根据相关法律法规要求,我们可能要求您在特定功能下完成实名认证。如您拒绝提供,可能无法使用部分或全部服务。
未成年人保护:若您未满18周岁,请在法定监护人的陪同下阅读本协议,并在征得监护人同意后使用本服务。
三、 服务内容与规范
知识库查阅权限:会员登录后,有权按照其会员等级对应的权限范围,在线浏览、检索本网站知识库中的相关文章及内容。
服务变更:我们有权根据业务发展需要,调整、变更或终止部分服务内容,并将以网站公告、公众号消息等方式提前通知。
禁止行为:您在使用服务时不得实施以下行为:
利用技术手段批量爬取、下载、转存知识库内容;
将知识库内容用于商业目的或未经授权地向第三方传播;
干扰本网站正常运行或侵犯其他用户合法权益;
发布违法违规信息或从事违反公序良俗的活动。
四、 知识产权声明
权利归属:本网站知识库中的排版设计、软件代码等内容的知识产权均归【公司全称】或原权利人所有,受《中华人民共和国著作权法》等法律保护。
有限许可:本网站授予会员一项非独占、不可转让、不可转授权的普通许可,仅限于个人学习、研究之目的在线查阅知识库内容。
侵权追责:未经书面许可,任何单位或个人不得以任何形式复制、转载、摘编、镜像、汇编或以其他方式使用上述内容。一经发现,我们保留追究其法律责任的权利。
五、 个人信息保护
我们重视对您个人信息的保护。关于我们如何收集、使用、存储和保护您的个人信息,请单独阅读 《隐私政策》。
您通过微信公众号授权或手机号验证所提供的信息,我们将严格按照《个人信息保护法》的规定处理,仅用于身份识别、服务提供及安全验证等必要用途。
您可以随时通过网站设置或联系客服行使查阅、更正、删除个人信息及撤回授权同意的权利。
六、 免责声明
内容准确性:知识库内容仅供参考,不构成专业建议。我们不对其完整性、准确性、时效性作任何明示或暗示的保证,您应自行判断并承担使用风险。
不可抗力:因自然灾害、政策法规变化、网络故障、第三方平台接口异常(如微信接口维护、运营商短信通道故障)等不可抗力导致的服务中断或延迟,我们不承担违约责任。
第三方链接:本网站可能包含指向第三方网站的链接,该等网站的内容和服务不受我们控制,请您自行甄别风险。
七、 违约责任
如您违反本协议约定,我们有权视情节采取警告、限制功能、暂停服务、注销账号等措施,并保留要求赔偿损失的权利。
如因您的违约行为导致我们遭受行政处罚、第三方索赔或商誉损失,您应承担全部赔偿责任(包括但不限于罚款、赔偿金、律师费、公证费等)。
八、 法律适用与争议解决
本协议的订立、执行和解释均适用中华人民共和国大陆地区法律。
因本协议产生的或与本协议有关的任何争议,双方应友好协商解决;协商不成的,任何一方均可向【公司所在地】有管辖权的人民法院提起诉讼。
九、 其他
本协议构成双方就本服务达成的完整协议,取代此前任何口头或书面约定。
本协议任一条款被认定为无效或不可执行的,不影响其他条款的效力。
我们对本协议享有最终解释权,并在法律允许的范围内保留随时修改的权利。修改后的协议一经公布即生效,继续使用服务即视为同意修订内容。