在Ubuntu上安装部署LLaMA-Factory,及微调大模型测试
LLaMA-Factory是一个非常好用的开源微调大模型工具。
GitHub:https://github.com/hiyouga/LLaMA-Factory
添加图片注释,不超过 140 字(可选)
添加图片注释,不超过 140 字(可选)
LLaMA-Factory介绍
项目特色
- 多种模型:LLaMA、Mistral、Mixtral-MoE、Qwen、Yi、Gemma、Baichuan、ChatGLM、Phi 等等。
- 集成方法:(增量)预训练、指令监督微调、奖励模型训练、PPO 训练、DPO 训练和 ORPO 训练。
- 多种精度:32 比特全参数微调、16 比特冻结微调、16 比特 LoRA 微调和基于 AQLM/AWQ/GPTQ/LLM.int8 的 2/4/8 比特 QLoRA 微调。
- 先进算法:GaLore、DoRA、LongLoRA、LLaMA Pro、LoRA+、LoftQ 和 Agent 微调。
- 实用技巧:FlashAttention-2、Unsloth、RoPE scaling、NEFTune 和 rsLoRA。
- 实验监控:LlamaBoard、TensorBoard、Wandb、MLflow 等等。
- 极速推理:基于 vLLM 的 OpenAI 风格 API、浏览器界面和命令行接口。
性能指标
与 ChatGLM 官方的 P-Tuning 微调相比,LLaMA Factory 的 LoRA 微调提供了 3.7 倍的加速比,同时在广告文案生成任务上取得了更高的 Rouge 分数。结合 4 比特量化技术,LLaMA Factory 的 QLoRA 微调进一步降低了 GPU 显存消耗。
添加图片注释,不超过 140 字(可选)
支持的模型
模型名 | 模型大小 | 默认模块 | Template |
Baichuan2 | 7B/13B | W_pack | baichuan2 |
BLOOM | 560M/1.1B/1.7B/3B/7.1B/176B | query_key_value | - |
BLOOMZ | 560M/1.1B/1.7B/3B/7.1B/176B | query_key_value | - |
ChatGLM3 | 6B | query_key_value | chatglm3 |
DeepSeek (MoE) | 7B/16B/67B | q_proj,v_proj | deepseek |
Falcon | 7B/40B/180B | query_key_value | falcon |
Gemma | 2B/7B | q_proj,v_proj | gemma |
InternLM2 | 7B/20B | wqkv | intern2 |
LLaMA | 7B/13B/33B/65B | q_proj,v_proj | - |
LLaMA-2 | 7B/13B/70B | q_proj,v_proj | llama2 |
Mistral/Mixtral | 7B/8x7B | q_proj,v_proj | mistral |
OLMo | 1B/7B | att_proj | olmo |
Phi-1.5/2 | 1.3B/2.7B | q_proj,v_proj | - |
Qwen | 1.8B/7B/14B/72B | c_attn | qwen |
Qwen1.5 (MoE) | 0.5B/1.8B/4B/7B/14B/32B/72B | q_proj,v_proj | qwen |
StarCoder2 | 3B/7B/15B | q_proj,v_proj | - |
XVERSE | 7B/13B/65B | q_proj,v_proj | xverse |
Yi | 6B/9B/34B | q_proj,v_proj | yi |
Yuan | 2B/51B/102B | q_proj,v_proj | yuan |
Note 默认模块应作为 --lora_target 参数的默认值,可使用 --lora_target all 参数指定全部模块。 对于所有“基座”(Base)模型,--template 参数可以是 default, alpaca, vicuna 等任意值。但“对话”(Chat)模型请务必使用对应的模板。
项目所支持模型的完整列表请参阅 constants.py。
您也可以在 template.py 中添加自己的对话模板。
训练方法
方法 | 全参数训练 | 部分参数训练 | LoRA | QLoRA |
预训练 | ? | ? | ? | ? |
指令监督微调 | ? | ? | ? | ? |
奖励模型训练 | ? | ? | ? | ? |
PPO 训练 | ? | ? | ? | ? |
DPO 训练 | ? | ? | ? | ? |
ORPO 训练 | ? | ? | ? | ? |
数据集
预训练数据集指令微调数据集偏好数据集
部分数据集的使用需要确认,我们推荐使用下述命令登录您的 Hugging Face 账户。
pip install --upgrade huggingface_hub
huggingface-cli login
软硬件依赖
必需项 | 至少 | 推荐 |
python | 3.8 | 3.10 |
torch | 1.13.1 | 2.2.0 |
transformers | 4.37.2 | 4.39.3 |
datasets | 2.14.3 | 2.18.0 |
accelerate | 0.27.2 | 0.28.0 |
peft | 0.9.0 | 0.10.0 |
trl | 0.8.1 | 0.8.1 |
可选项 | 至少 | 推荐 |
CUDA | 11.6 | 12.2 |
deepspeed | 0.10.0 | 0.14.0 |
bitsandbytes | 0.39.0 | 0.43.0 |
flash-attn | 2.3.0 | 2.5.6 |
硬件依赖
* 估算值
训练方法 | 精度 | 7B | 13B | 30B | 70B | 8x7B |
全参数 | AMP | 120GB | 240GB | 600GB | 1200GB | 900GB |
全参数 | 16 | 60GB | 120GB | 300GB | 600GB | 400GB |
GaLore | 16 | 16GB | 32GB | 64GB | 160GB | 120GB |
部分参数 | 16 | 20GB | 40GB | 80GB | 200GB | 160GB |
LoRA | 16 | 16GB | 32GB | 64GB | 160GB | 120GB |
QLoRA | 8 | 10GB | 20GB | 40GB | 80GB | 60GB |
QLoRA | 4 | 6GB | 12GB | 24GB | 48GB | 30GB |
QLoRA | 2 | 4GB | 8GB | 16GB | 24GB | 18GB |
安装过程
安装依赖
按照GitHub上介绍的过程安装即可,为了加快速度,增加了国内的pip 源。
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 -i https://pypi.tuna.tsinghua.edu.cn/simple -e .[metrics]
可选的额外依赖项:deepspeed、metrics、unsloth、galore、vllm、bitsandbytes、gptq、awq、aqlm、qwen、quality
LLaMA Board 可视化界面
注意:LLaMA Board 可视化界面目前仅支持单 GPU 训练,请使用命令行接口来进行分布式训练。
使用本地环境:
export CUDA_VISIBLE_DEVICES=0 # Windows 使用 `set CUDA_VISIBLE_DEVICES=0`
python src/train_web.py # 或 python -m llmtuner.webui.interface
执行后:
添加图片注释,不超过 140 字(可选)
然后就可以访问web界面了:
添加图片注释,不超过 140 字(可选)
数据准备
可以使用 HuggingFace / ModelScope 上的数据集或加载本地数据集。使用自定义数据集时,请更新 data/dataset_info.json 文件。
效果测试(持续更新)
准备训练几个QWen1.5的模型试一下,从0.5B的开始。
QWen1.5-0.5B + Example
速度非常快。看了一下数据,就2条,怪不得快
添加图片注释,不超过 140 字(可选)
QWen1.5-0.5B + alpach_gpt4_zh训练Lora
这个有48818条记录,数据格式如下:
添加图片注释,不超过 140 字(可选)
训练设置如下:
添加图片注释,不超过 140 字(可选)
看后端提示,在对数据处理后就开始训练了:
添加图片注释,不超过 140 字(可选)
添加图片注释,不超过 140 字(可选)
前端可以看见训练进度:
添加图片注释,不超过 140 字(可选)
0.5B的模型,可是训练起来需要的时间也不少。
添加图片注释,不超过 140 字(可选)
在T4 GPU上训练了4个小时结束
添加图片注释,不超过 140 字(可选)
训练结果在:LLaMA-Factory/saves目录下。
QWen1.5-0.5B + alpach_gpt4_zh全量
添加图片注释,不超过 140 字(可选)
预估时间8小时多,是Lora模式的一倍:
添加图片注释,不超过 140 字(可选)
添加图片注释,不超过 140 字(可选)
QWen1.5-0.5B + alpach_gpt4_zh freeze
添加图片注释,不超过 140 字(可选)
预估时间也是4个多小时:
添加图片注释,不超过 140 字(可选)
添加图片注释,不超过 140 字(可选)
内存占用:
添加图片注释,不超过 140 字(可选)
比全量的少一些。