[ English | 中文 ]
微调大型语言模型可以像……一样简单
https://github.com/user-attachments/assets/7c96b465-9df7-45f4-8053-bf03e58386d3
选择你的路径:
- Colab: https://colab.research.google.com/drive/1eRTPn37ltBbYsISy9Aw2NuI2Aq5CQrD9?usp=sharing
- PAI-DSW: https://gallery.pai-ml.com/#/preview/deepLearning/nlp/llama_factory
- 本地机器: 请参阅 使用方法
目录
功能
- 多样化的模型: LLaMA, LLaVA, Mistral, Mixtral-MoE, Qwen, Yi, Gemma, Baichuan, ChatGLM, Phi 等。
- 集成方法: (连续)预训练,(多模态)监督微调,奖励建模,PPO, DPO, KTO, ORPO 等。
- 可扩展资源: 16位全量微调,冻结微调,LoRA 以及通过 AQLM/AWQ/GPTQ/LLM.int8/HQQ/EETQ 实现的 2/3/4/5/6/8 位 QLoRA。
- 先进算法: GaLore, BAdam, Adam-mini, DoRA, LongLoRA, LLaMA Pro, Mixture-of-Depths, LoRA+, LoftQ, PiSSA 和 Agent 调优。
- 实用技巧: FlashAttention-2, Unsloth, RoPE 扩展, NEFTune 和 rsLoRA。
- 实验监控: LlamaBoard, TensorBoard, Wandb, MLflow 等。
- 更快的推理: 类 OpenAI 风格的 API, Gradio UI 和 CLI,配备 vLLM worker。
基准测试
相比于 ChatGLM 的 P-Tuning,LLaMA Factory 的 LoRA 微调在广告文本生成任务中提供了 3.7 倍的速度提升,同时拥有更好的 Rouge 分数。通过采用 4 位量化技术,LLaMA Factory 的 QLoRA 进一步提高了 GPU 内存的利用效率。
定义
- 训练速度: 训练过程中每秒处理的训练样本数量。(bs=4, cutoff_len=1024)
- Rouge 分数: 广告文本生成任务开发集上的 Rouge-2 分数。(bs=4, cutoff_len=1024)
- GPU 内存: 在 4 位量化训练中的峰值 GPU 内存使用量。(bs=1, cutoff_len=1024)
- 我们为 ChatGLM 的 P-Tuning 采用
pre_seq_len=128
,为 LLaMA Factory 的 LoRA 微调采用lora_rank=32
。
更新日志
[24/08/09] 我们支持 Adam-mini 优化器。请参阅 示例 了解用法。感谢 @relic-yuexi 的 PR。
[24/07/04] 我们支持 无污染打包训练。使用 neat_packing: true
激活此功能。感谢 @chuan298 的 PR。
[24/06/16] 我们支持 PiSSA 算法。请参阅 示例 了解用法。
完整更新日志
[24/06/07] 我们支持微调 Qwen2 和 GLM-4 模型。
[SOURCE_TEXT]
[23/09/10] 我们支持 FlashAttention-2。如果你使用的是RTX4090、A100或H100 GPU,可以尝试使用 flash_attn: fa2
参数来启用 FlashAttention-2。
[23/08/12] 我们支持 RoPE scaling,以扩展 LLaMA 模型的上下文长度。在训练时尝试 rope_scaling: linear
参数,在推理时使用 rope_scaling: dynamic
参数来外推位置嵌入。
[23/08/11] 我们支持 DPO 训练 用于指令微调模型。请参阅 示例 了解用法。
[23/07/31] 我们支持 数据集流式加载。可以尝试使用 streaming: true
和 max_steps: 10000
参数以流式加载数据集。
[23/07/29] 我们在 Hugging Face 上发布了两个指令微调的 13B 模型。详细信息请参阅这些 Hugging Face 仓库 (LLaMA-2 / Baichuan)。
[23/07/18] 我们开发了一个集成的 Web UI,用于训练、评估和推理。如果你希望在 Web 浏览器中微调模型,可以尝试使用 train_web.py
。感谢 @KanadeSiina 和 @codemayq 在开发中的努力。
[23/07/09] 我们发布了 FastEdit ⚡🩹,这是一个易于使用的软件包,可以高效地编辑大型语言模型的事实知识。如果你感兴趣,请关注 FastEdit。
[23/06/29] 我们提供了一个 可复现的示例,展示如何使用指令跟随数据集训练一个聊天模型,详情请参阅 Baichuan-7B-sft。
[23/06/22] 我们将 demo API 与 OpenAI 的格式对齐,你可以将微调后的模型插入 任意基于 ChatGPT 的应用程序 中。
[23/06/03] 我们支持量化训练和推理(即 QLoRA)。使用方法请参阅 示例。
支持的模型
模型 | 模型大小 | 模板 |
---|---|---|
Baichuan 2 | 7B/13B | baichuan2 |
BLOOM/BLOOMZ | 560M/1.1B/1.7B/3B/7.1B/176B | - |
ChatGLM3 | 6B | chatglm3 |
Command R | 35B/104B | cohere |
DeepSeek (Code/MoE) | 7B/16B/67B/236B | deepseek |
Falcon | 7B/11B/40B/180B | falcon |
Gemma/Gemma 2/CodeGemma | 2B/7B/9B/27B | gemma |
GLM-4 | 9B | glm4 |
InternLM2/InternLM2.5 | 7B/20B | intern2 |
Llama | 7B/13B/33B/65B | - |
Llama 2 | 7B/13B/70B | llama2 |
Llama 3/Llama 3.1 | 8B/70B | llama3 |
LLaVA-1.5 | 7B/13B | vicuna |
MiniCPM | 1B/2B | cpm |
Mistral/Mixtral | 7B/8x7B/8x22B | mistral |
OLMo | 1B/7B | - |
PaliGemma | 3B | gemma |
Phi-1.5/Phi-2 | 1.3B/2.7B | - |
Phi-3 | 4B/7B/14B | phi |
Qwen/Qwen1.5/Qwen2 (Code/Math/MoE) | 0.5B/1.5B/4B/7B/14B/32B/72B/110B | qwen |
StarCoder 2 | 3B/7B/15B | - |
XVERSE | 7B/13B/65B | xverse |
Yi/Yi-1.5 | 6B/9B/34B | yi |
Yi-VL | 6B/34B | yi_vl |
Yuan 2 | 2B/51B/102B | yuan |
[!注意] 对于“基础”模型,
template
参数可以选择default
、alpaca
、vicuna
等。但请确保在“指令/聊天”模型中使用 对应的模板。请记住在训练和推理中使用 相同的 模板。
请参考 constants.py 查看我们支持的模型的完整列表。
你也可以将自定义聊天模板添加到 template.py。
支持的训练方法
方法 | 全量微调 | 冻结微调 | LoRA | QLoRA |
---|---|---|---|---|
预训练 | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
监督微调 | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
奖励建模 | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
PPO 训练 | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
DPO 训练 | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
KTO 训练 | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
ORPO 训练 | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
SimPO 训练 | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
[!提示] PPO 的实现细节可以在 [这篇博客](https://newfacade.github.io/notes
- 身份 (中英)
- Stanford Alpaca (英)
- Stanford Alpaca (中)
- Alpaca GPT4 (中英)
- Glaive Function Calling V2 (中英)
- LIMA (英)
- Guanaco 数据集 (多语言)
- BELLE 2M (中)
- BELLE 1M (中)
- BELLE 0.5M (中)
- BELLE 对话 0.4M (中)
- BELLE 学校数学 0.25M (中)
- BELLE 多轮对话 0.8M (中)
- UltraChat (英)
- OpenPlatypus (英)
- CodeAlpaca 20k (英)
- Alpaca CoT (多语言)
- OpenOrca (英)
- SlimOrca (英)
- MathInstruct (英)
- 萤火虫 1.1M (中)
- Wiki QA (英)
- Web QA (中)
- 网络小说 (中)
- Nectar (英)
- deepctrl (中英)
- 广告生成 (中)
- ShareGPT 超过滤 (英)
- ShareGPT4 (中英)
- UltraChat 200k (英)
- AgentInstruct (英)
- LMSYS Chat 1M (英)
- Evol Instruct V2 (英)
- Cosmopedia (英)
- STEM (中)
- 若知吧 (中)
- Neo-sft (中)
- WebInstructSub (英)
- Magpie-Pro-300K-过滤 (英)
- Magpie-ultra-v0.1 (英)
- LLaVA 混合 (中英)
- Open Assistant (德)
- Dolly 15k (德)
- Alpaca GPT4 (德)
- OpenSchnabeltier (德)
- Evol Instruct (德)
- Dolphin (德)
- Booksum (德)
- Airoboros (德)
- UltraChat (德)
有些数据集在使用前需要确认,因此我们建议使用以下命令登录您的 Hugging Face 帐户。
pip install --upgrade huggingface_hub
huggingface-cli login
要求
必需 | 最低 | 推荐 |
---|---|---|
python | 3.8 | 3.11 |
torch | 1.13.1 | 2.4.0 |
transformers | 4.41.2 | 4.43.4 |
datasets | 2.16.0 | 2.20.0 |
accelerate | 0.30.1 | 0.32.0 |
peft | 0.11.1 | 0.12.0 |
trl | 0.8.6 | 0.9.6 |
可选 | 最低 | 推荐 |
---|---|---|
CUDA | 11.6 | 12.2 |
deepspeed | 0.10.0 | 0.14.0 |
bitsandbytes | 0.39.0 | 0.43.1 |
vllm | 0.4.3 | 0.5.0 |
flash-attn | 2.3.0 | 2.6.3 |
硬件要求
* 估计
| 方法 | 位数 | 7B | 13B | 30B | 70B |
[!TIP]
使用llamafactory-cli help
来显示帮助信息。
使用 LLaMA Board GUI 进行微调 (由 Gradio 提供支持)
llamafactory-cli webui
构建 Docker
对于 CUDA 用户:
cd docker/docker-cuda/
docker compose up -d
docker compose exec llamafactory bash
对于 Ascend NPU 用户:
cd docker/docker-npu/
docker compose up -d
docker compose exec llamafactory bash
对于 AMD ROCm 用户:
cd docker/docker-rocm/
docker compose up -d
docker compose exec llamafactory bash
在不使用 Docker Compose 的情况下构建
对于 CUDA 用户:
docker build -f ./docker/docker-cuda/Dockerfile \
--build-arg INSTALL_BNB=false \
--build-arg INSTALL_VLLM=false \
--build-arg INSTALL_DEEPSPEED=false \
--build-arg INSTALL_FLASHATTN=false \
--build-arg PIP_INDEX=https://pypi.org/simple \
-t llamafactory:latest .
docker run -dit --gpus=all \
-v ./hf_cache:/root/.cache/huggingface \
-v ./ms_cache:/root/.cache/modelscope \
-v ./data:/app/data \
-v ./output:/app/output \
-p 7860:7860 \
-p 8000:8000 \
--shm-size 16G \
--name llamafactory \
llamafactory:latest
docker exec -it llamafactory bash
对于 Ascend NPU 用户:
# 根据您的环境选择 Docker 镜像
docker build -f ./docker/docker-npu/Dockerfile \
--build-arg INSTALL_DEEPSPEED=false \
--build-arg PIP_INDEX=https://pypi.org/simple \
-t llamafactory:latest .
# 根据您的资源修改 `device`
docker run -dit \
-v ./hf_cache:/root/.cache/huggingface \
-v ./ms_cache:/root/.cache/modelscope \
-v ./data:/app/data \
-v ./output:/app/output \
-v /usr/local/dcmi:/usr/local/dcmi \
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /etc/ascend_install.info:/etc/ascend_install.info \
-p 7860:7860 \
-p 8000:8000 \
--device /dev/davinci0 \
--device /dev/davinci_manager \
--device /dev/devmm_svm \
--device /dev/hisi_hdc \
--shm-size 16G \
--name llamafactory \
llamafactory:latest
docker exec -it llamafactory bash
对于 AMD ROCm 用户:
docker build -f ./docker/docker-rocm/Dockerfile \
--build-arg INSTALL_BNB=false \
--build-arg INSTALL_VLLM=false \
--build-arg INSTALL_DEEPSPEED=false \
--build-arg INSTALL_FLASHATTN=false \
--build-arg PIP_INDEX=https://pypi.org/simple \
-t llamafactory:latest .
docker run -dit \
-v ./hf_cache:/root/.cache/huggingface \
-v ./ms_cache:/root/.cache/modelscope \
-v ./data:/app/data \
-v ./output:/app/output \
-v ./saves:/app/saves \
-p 7860:7860 \
-p 8000:8000 \
--device /dev/kfd \
--device /dev/dri \
--shm-size 16G \
--name llamafactory \
llamafactory:latest
docker exec -it llamafactory bash
关于 volume 的详细信息
hf_cache
: 使用主机上的 Hugging Face 缓存。如果缓存已存在于其他目录,可以重新指定。ms_cache
: 类似 Hugging Face 缓存,但适用于 ModelScope 用户。data
: 将数据集放在主机的这个目录,以便在 LLaMA Board GUI 中选择。output
: 设置导出目录为这个位置,以便在主机上直接访问合并结果。
通过 OpenAI 风格的 API 和 vLLM 进行部署
API_PORT=8000 llamafactory-cli api examples/inference/llama3_vllm.yaml
[!TIP]
请访问 此页面 获取 API 文档。
从 ModelScope Hub 下载
如果从 Hugging Face 下载模型和数据集遇到困难,您可以使用 ModelScope。
export USE_MODELSCOPE_HUB=1 # Windows 系统请使用 `set USE_MODELSCOPE_HUB=1`
通过指定 ModelScope Hub 的模型 ID 为 model_name_or_path
来训练模型。您可以在 ModelScope Hub 上找到完整的模型 ID 列表,例如 LLM-Research/Meta-Llama-3-8B-Instruct
。
使用 W&B Logger
要使用 Weights & Biases 记录实验结果,需要在 yaml 文件中添加以下参数。
report_to: wandb
run_name: test_run # 可选
在启动训练任务时将 WANDB_API_KEY
设置为 您的密钥,以便登录您的 W&B 账户。
使用 LLaMA Factory 的项目
如果您有需要纳入的项目,请通过电子邮件联系或创建 pull request。
点击查看
1. 王等人. ESRL: 用于序列生成的高效采样强化学习. 2023. [[arxiv]](https://arxiv.org/abs/2308.02223) 1. 余等人. 开放、封闭或小型语言模型用于文本分类?2023. [[arxiv]](https://arxiv.org/abs/2308.10092) 1. 王等人. UbiPhysio: 通过动作理解和自然语言反馈支持日常功能、健身和康复. 2023. [[arxiv]](https://arxiv.org/abs/2308.10526) 1. Luceri等人. 利用大型语言模型检测社交媒体中的影响力活动. 2023. [[arxiv]](https://arxiv.org/abs/2311.07816) 1. 张等人. 通过诱发幻觉来缓解大型语言模型的幻觉. 2023. [[arxiv]](https://arxiv.org/abs/2312.15710) 1. 王等人. 更好地了解您的需求:通过类比推理增强的LLM实现营销人员需求的结构化理解. KDD 2024. [[arxiv]](https://arxiv.org/abs/2401.04319) 1. 王等人. CANDLE: 从大型语言模型中迭代概念化和实例蒸馏,用于常识推理. ACL 2024. [[arxiv]](https://arxiv.org/abs/2401.07286) 1. Choi等人. FACT-GPT: 通过与LLM的声明匹配进行事实检查增强. 2024. [[arxiv]](https://arxiv.org/abs/2402.05904) 1. 张等人. AutoMathText: 使用语言模型进行数学文本的自动数据选择. 2024. [[arxiv]](https://arxiv.org/abs/2402.07625) 1. 吕等人. KnowTuning: 面向大型语言模型的知识感知微调. 2024. [[arxiv]](https://arxiv.org/abs/2402.11176) 1. 杨等人. LaCo: 通过层折叠对大型语言模型进行剪枝. 2024. [[arxiv]](https://arxiv.org/abs/2402.11187) 1. Bhardwaj等人. 语言模型是荷马·辛普森!通过任务算术对微调语言模型进行安全重新对齐. 2024. [[arxiv]](https://arxiv.org/abs/2402.11746) 1. 杨等人. 通过增强小规模同理心模型的LLM提升同理心响应生成. 2024. [[arxiv]](https://arxiv.org/abs/2402.11801) 1. 易等人. 生成与验证相遇:通过智能并行自动纠错解码加速大型语言模型推理. ACL 2024 Findings. [[arxiv]](https://arxiv.org/abs/2402.11809) 1. 曹等人. 面向大型语言模型的可共享注意力机制. 2024. [[arxiv]](https://arxiv.org/abs/2402.11819) 1. 张等人. 通过从资源丰富语言自蒸馏增强大型语言模型的多语言能力. 2024. [[arxiv]](https://arxiv.org/abs/2402.12204) 1. 金等人. 高效且有效的词汇扩展,面向多语言大型语言模型. 2024. [[arxiv]](https://arxiv.org/abs/2402.14714) 1. 余等人. KIEval: 一种知识驱动的交互式评价框架,用于大型语言模型. ACL 2024. [[arxiv]](https://arxiv.org/abs/2402.15043) 1. 黄等人. 关键点驱动的数据合成及其对数学推理的增强. 2024. [[arxiv]](https://arxiv.org/abs/2403.02333) 1. 段等人. 否定否定:通过分布性厌恶优化在没有人类正样本的情况下进行对齐. 2024. [[arxiv]](https://arxiv.org/abs/2403.03419) 1. 谢与Schwertfeger. 使用大型语言模型赋能机器人:基于osmAG的地图理解. 2024. [[arxiv]](https://arxiv.org/abs/2403.08228) 1. 吴等人. 大型语言模型是并行多语言学习者. 2024. [[arxiv]](https://arxiv.org/abs/2403.09073) 1. 张等人. EDT: 通过基于熵的动态温度采样提高大型语言模型的生成. 2024. [[arxiv]](https://arxiv.org/abs/2403.14541) 1. Weller等人. FollowIR: 评估并教授信息检索模型如何遵循指令. 2024. [[arxiv]](https://arxiv.org/abs/2403.15246) 1. 洪彬那. CBT-LLM: 用于基于认知行为疗法的心理健康问答的中文大型语言模型. COLING 2024. [[arxiv]](https://arxiv.org/abs/2403.16008) 1. Zan等人. CodeS: 通过多层草图将自然语言转换为代码库. 2024. [[arxiv]](https://arxiv.org/abs/2403.16443) 1. 刘等人. 广泛的自对比使无反馈语言模型对齐成为可能. 2024. [[arxiv]](https://arxiv.org/abs/2404.00604) 1. 罗等人. BAdam: 一种用于大型语言模型的内存高效全参数训练方法. 2024. [[arxiv]](https://arxiv.org/abs/2404.02827) 1. 杜等人. Chinese Tiny LLM: 预训练一个以中文为中心的大型语言模型. 2024. [[arxiv]](https://arxiv.org/abs/2404.04167) 1. 马等人. 通过Givens旋转实现参数高效的准正交微调. ICML 2024. [[arxiv]](https://arxiv.org/abs/2404.04316) 1. 刘等人. 通过大型语言模型动态生成个性. 2024. [[arxiv]](https://arxiv.org/abs/2404.07084) 1. 尚等人. 我们在使用大型语言模型理解剥离的二进制代码上走了多远. 2024. [[arxiv]](https://arxiv.org/abs/2404.09836) 1. 黄等人. LLMTune: 通过大型语言模型加速数据库参数调优. 2024. [[arxiv]](https://arxiv.org/abs/2404.11581) 1. 邓等人. Text-Tuple-Table: 通过全局元组抽取实现文本到表格生成中的信息整合. 2024. [[arxiv]](https://arxiv.org/abs/2404.14215) 1. Acikgoz等人. Hippocrates: 一个开源框架,用于推进大型语言模型在医疗领域的发展. 2024. [[arxiv]](https://arxiv.org/abs/2404.16621) 1. 张等人. 小型语言模型需要强大的验证器来自我纠正推理. ACL 2024 Findings. [[arxiv]](https://arxiv.org/abs/2404.17140) 1. 周等人. FREB-TQA: 一个用于表格问答的细粒度鲁棒性评估基准. NAACL 2024. [[arxiv]](https://arxiv.org/abs/2404.18585) 1. 徐等人. 大型语言模型用于网络安全的系统性文献综述. 2024. [[arxiv]](https://arxiv.org/abs/2405.04760) 1. Dammu等人. "他们没有文化": 揭示LLM生成对话中的隐性伤害和社会威胁. 2024. [[arxiv]](https://arxiv.org/abs/2405.05378) 1. 易等人. 通过子空间导向的模型融合实现大型语言模型的安全重新对齐框架. 2024. [[arxiv]](https://arxiv.org/abs/2405.09055) 1. 娄等人. SPO: 通过隐式奖励建模进行多维偏好序列对齐. 2024. [[arxiv]](https://arxiv.org/abs/2405.12739) 1. 张等人. 少即是多: 大型语言模型是出色的自发多语言学习者. 2024. [[arxiv]](https://arxiv.org/abs/ 请遵循模型许可来使用相应的模型权重:[Baichuan 2](https://huggingface.co/baichuan-inc/Baichuan2-7B-Base/blob/main/Community%20License%20for%20Baichuan%202%20Model.pdf) / [BLOOM](https://huggingface.co/spaces/bigscience/license) / [ChatGLM3](https://github.com/THUDM/ChatGLM3/blob/main/MODEL_LICENSE) / [Command R](https://cohere.com/c4ai-cc-by-nc-license) / [DeepSeek](https://github.com/deepseek-ai/DeepSeek-LLM/blob/main/LICENSE-MODEL) / [Falcon](https://huggingface.co/tiiuae/falcon-180B/blob/main/LICENSE.txt) / [Gemma](https://ai.google.dev/gemma/terms) / [GLM-4](https://huggingface.co/THUDM/glm-4-9b/blob/main/LICENSE) / [InternLM2](https://github.com/InternLM/InternLM#license) / [Llama](https://github.com/facebookresearch/llama/blob/main/MODEL_CARD.md) / [Llama 2 (LLaVA-1.5)](https://ai.meta.com/llama/license/) / [Llama 3](https://llama.meta.com/llama3/license/) / [MiniCPM](https://github.com/OpenBMB/MiniCPM/blob/main/MiniCPM%20Model%20License.md) / [Mistral](LICENSE) / [OLMo](LICENSE) / [Phi-1.5/Phi-2](https://huggingface.co/microsoft/phi-1_5/resolve/main/Research%20License.docx) / [Phi-3](https://huggingface.co/microsoft/Phi-3-mini-4k-instruct/blob/main/LICENSE) / [Qwen](https://github.com/QwenLM/Qwen/blob/main/Tongyi%20Qianwen%20LICENSE%20AGREEMENT) / [StarCoder 2](https://huggingface.co/spaces/bigcode/bigcode-model-license-agreement) / [XVERSE](https://github.com/xverse-ai/XVERSE-13B/blob/main/MODEL_LICENSE.pdf) / [Yi](https://huggingface.co/01-ai/Yi-6B/blob/main/LICENSE) / [Yi-1.5](LICENSE) / [Yuan 2](https://github.com/IEIT-Yuan/Yuan-2.0/blob/main/LICENSE-Yuan)引用
如果此工作对您有帮助,请引用以下内容:
@inproceedings{zheng2024llamafactory,
title={LlamaFactory: Unified Efficient Fine-Tuning of 100+ Language Models},
author={Yaowei Zheng and Richong Zhang and Junhao Zhang and Yanhan Ye and Zheyan Luo and Zhangchi Feng and Yongqiang Ma},
booktitle={Proceedings of the 62nd Annual Meeting of the Association for Computational Linguistics (Volume 3: System Demonstrations)},
address={Bangkok, Thailand},
publisher={Association for Computational Linguistics},
year={2024},
url={http://arxiv.org/abs/2403.13372}
}
致谢
此仓库受益于 PEFT, TRL, QLoRA 和 FastChat。感谢他们的出色工作。