- 人工智能
- 大模型
- 微调
- 模型评测
- 强化学习
- 多模态
【免费下载链接】LMFlow
An Extensible Toolkit for Finetuning and Inference of Large Foundation Models. Large Models for All.
本文以 README.md 的 Quick Start 章节为核心骨架,结合 scripts 目录下的真实训练脚本与 src/lmflow 的源码实现,系统讲解 LMFlow 从环境搭建、数据集下载、三种主流微调方式(Full Finetuning / LISA / LoRA)到推理部署与评估的完整闭环。读者学完可掌握:基于 Linux 与 Conda 的 LMFlow 环境配置、Alpaca 等对话数据集的获取、通过
accelerate启动分布式微调的关键参数、以及如何用训练好的模型搭建 Gradio 聊天机器人。
一、LMFlow 是什么
LMFlow 是一个可扩展、便捷且高效的大模型微调与推理工具箱,面向全社区开放,定位是"用户友好、速度快、可靠性高"。它的核心能力覆盖:
- 微调:Full Finetuning、LISA、LoRA、QLoRA,以及自定义优化器训练;
- 推理:HF 后端、vLLM、SGLang,支持 FlashAttention、长上下文(Position Interpolation);
- 对齐:DPO / Iterative DPO、RAFT(Reward rAnked FineTuning)等;
- 多模态与部署:多模态聊天机器人、Gradio UI、Flask 部署。
本文聚焦 README 的 Quick Start 主线:从零开始完成一次可运行的对话模型微调。
二、环境搭建(Setup)
2.1 基础安装
官方文档明确说明:LMFlow 已在Linux OS(Ubuntu 20.04)上完成测试;macOS 与 Windows 未完全测试,可能遇到意外错误。首次使用建议在 Linux 机器或 Google Colab 上进行。
git clone -b v1.0.0 https://github.com/OptimalScale/LMFlow.git cd LMFlow conda create -n lmflow python=3.9 -y conda activate lmflow conda install mpi4py pip install -e .要点说明:
- 使用
-b v1.0.0检出稳定发布分支;若需旧版本(v0.0.10 及更早),README 也提供了对应的克隆命令(git clone -b v0.0.10 ...),旧版本适合 CUDA 10.3–11.7 环境。 conda install mpi4py是分布式通信依赖。pip install -e .以可编辑模式安装,便于后续调试源码。
2.2 可选依赖(Extras)
基础安装已足以支撑Full / LoRA / LISA 微调与 HF 后端推理。更多高级功能按需安装:
| Extra | 启用功能 | 安装命令 |
|---|---|---|
vllm | vLLM 后端推理与 Iterative DPO | pip install -e ".[vllm]" |
sglang | SGLang 后端推理与 Iterative DPO | pip install -e ".[sglang]" |
trl | DPO / Iterative DPO 训练 | pip install -e ".[trl]" |
deepspeed | DeepSpeed 集成 | pip install -e ".[deepspeed]" |
flash_attn | Flash Attention 2 | pip install -e ".[flash_attn]" |
ray | 分布式奖励模型推理 | pip install -e ".[ray]" |
multimodal | 多模态模型 | pip install -e ".[multimodal]" |
gradio | Gradio 聊天 UI | pip install -e ".[gradio]" |
flask | Flask 部署 | pip install -e ".[flask]" |
多个 Extra 可组合,例如 Iterative DPO + vLLM:pip install -e ".[vllm,trl]";SGLang 变体则用".[sglang,trl]"。
重要提醒:vLLM 与 SGLang 依赖互不兼容的 CUDA / PyTorch 版本,不要安装进同一个环境。如需两者,请分别创建独立 Conda 环境(如
lmflow-vllm与lmflow-sglang)。
2.3 训练日志与 WandB
LMFlow 默认使用WandB跟踪可视化训练过程。运行训练脚本前需登录:
wandb login若希望禁用 WandB,有两种方式:
- 运行训练命令前设置环境变量:
export WANDB_MODE=disabled- 在训练脚本中指定
--report_to none。
三、准备数据集(Prepare Dataset)
README 的微调示例统一使用 data/download.sh 下载数据集。该脚本支持多种数据集(alpaca、MedMCQA、PubMedQA、wikitext、hh_rlhf、dpo-mix-7k、多模态 COCO2017 / LLaVA 等),并支持all参数一次下载全部:
cd data && ./download.sh alpaca && cd -执行后会在data/alpaca/下生成训练对话数据,微调命令中的--dataset_path data/alpaca/train_conversation即指向该目录。从 download.sh 源码可见,下载逻辑是wget从公共服务器拉取tar.gz并就地解压清理。
四、微调(Finetuning)
4.1 硬件需求估算
| 方法 | 0.5B | 3B | 7B | 14B | 30B | 70B | xB |
|---|---|---|---|---|---|---|---|
Fullbf16/fp16 | 9GB | 55GB | 120GB | 240GB | 600GB | 1200GB | 18xGB |
| LoRA | 1GB | 6GB | 16GB | 32GB | 64GB | 160GB | 2xGB |
QLoRAquant_bit=8 | 0.7GB | 3GB | 10GB | 20GB | 40GB | 80GB | xGB |
QLoRAquant_bit=4 | 0.4GB | 1.5GB | 6GB | 12GB | 24GB | 48GB | x/2GB |
该表给出了规模化的显存估算公式:Full 微调约为18xGB,LoRA 约2xGB,QLoRA(4bit)约x/2GB——例如 7B 模型 Full 训练约需 120GB,而 4bit QLoRA 仅需约 6GB。
4.2 训练脚本的统一入口
仓库中的 run_finetune.sh、run_finetune_with_lisa.sh、run_finetune_with_lora.sh 等脚本,最终都通过accelerate launch调用 examples/finetune.py 完成训练。核心调用链(从源码结构看):
examples/finetune.py ├─ HfArgumentParser 解析 ModelArguments / DatasetArguments / FinetunerArguments ├─ AutoPipeline.get_pipeline("finetuner") → 构建 Finetuner(src/lmflow/pipeline/finetuner.py) ├─ Dataset(data_args) → 加载数据集(src/lmflow/datasets/dataset.py) ├─ AutoModel.get_model(model_args) → 加载 HF 模型 └─ finetuner.tune(model, dataset) → 执行训练所有脚本共用相同的accelerate启动方式,区别仅在微调策略相关参数(--use_lisa、--use_lora、--use_qlora等)。默认分布式配置为 configs/accelerate_fsdp_config.yaml,使用 FSDP 全分片(FULL_SHARD)、bf16 混合精度,num_processes: 8对应 8 卡训练;单卡时需按配置注释调整distributed_type: NO。仓库另提供 configs/accelerate_dsz0_config.yaml、configs/accelerate_dsz2_config.yaml、configs/accelerate_dsz3_config.yaml 等 DeepSpeed 方案供选择。
4.3 Full Finetuning(全参微调)
Full 训练更新模型全部参数。README 示例(GPT-2 base):
cd data && ./download.sh alpaca && cd - bash ./scripts/run_finetune.sh \ --model_name_or_path gpt2 \ --dataset_path data/alpaca/train_conversation \ --output_model_path output_models/finetuned_gpt2Tips:对话数据集建议指定对话模板以获得更好效果,追加
--conversation_template。例如 Llama-3-8B:bash ./scripts/run_finetune.sh \ --model_name_or_path meta-llama/Meta-Llama-3-8B \ --dataset_path data/alpaca/train_conversation \ --conversation_template llama3 \ --output_model_path output_models/finetuned_llama3_8b
模板实现位于 src/lmflow/utils/conversation_template,已内置 llama、llama3、chatml、qwen、phi、gemma、deepseek、internlm、zephyr、yi、chatglm、hymba 等模板,分别对应独立文件。
实际脚本 run_finetune.sh 中的默认参数可作完整参考:
model_name_or_path=meta-llama/Llama-3.2-3B-Instruct dataset_path=data/alpaca/train_conversation conversation_template=llama3 output_dir=output_models/finetune accelerate launch --config_file configs/accelerate_fsdp_config.yaml \ examples/finetune.py \ --model_name_or_path ${model_name_or_path} \ --trust_remote_code 0 \ --dataset_path ${dataset_path} \ --output_dir ${output_dir} --overwrite_output_dir \ --conversation_template ${conversation_template} \ --disable_group_texts 1 \ --num_train_epochs 1 \ --block_size 512 \ --per_device_train_batch_size 1 \ --gradient_accumulation_steps 1 \ --learning_rate 2e-5 \ --lr_scheduler_type cosine \ --bf16 \ --torch_dtype bfloat16 \ --validation_split_percentage 0 \ --logging_steps 20 \ --do_train \ --ddp_timeout 72000 \ --save_steps 5000 \ --use_flash_attention 0 \ --gradient_checkpointing 0 \ --dataloader_num_workers 8 \ --report_to wandb \ --run_name finetune \ --seed 42关键训练参数说明(均可在 src/lmflow/args.py 的FinetunerArguments与ModelArguments中找到定义与默认值):
--block_size 512:文本块最大长度;--learning_rate 2e-5:全参微调常用学习率;--lr_scheduler_type cosine:余弦学习率调度;--bf16 --torch_dtype bfloat16:bf16 混合精度训练;--per_device_train_batch_size 1+--gradient_accumulation_steps 1:单卡批大小与梯度累积步数;--use_flash_attention:是否启用 FlashAttention 层以降低显存(默认 0);--gradient_checkpointing:梯度检查点,显存不足时以计算换显存(默认 0);--report_to wandb:日志上报后端,可改为none禁用。
4.4 LISA 微调(Layerwise Importance Sampling)
LISA(arXiv:2403.17919)是一种显存高效微调算法,通过在优化过程中随机解冻部分层、冻结其余层来权衡显存与训练效果。README 转述论文观点称其效果可超越 LoRA 类方法。当前脚本仅在单 GPU上测试过。
cd data && ./download.sh alpaca && cd - bash ./scripts/run_finetune_with_lisa.sh \ --model_name_or_path meta-llama/Llama-2-7b-hf \ --dataset_path data/alpaca/train_conversation \ --output_model_path output_models/finetuned_llama2_7b \ --lisa_activated_layers 1 \ --lisa_interval_steps 20Tips:Llama-2-7B 对话数据集示例可追加
--conversation_template llama2。
对应脚本 run_finetune_with_lisa.sh 中实际参数为:
# LISA related arguments lisa_activated_layers=1 lisa_interval_steps=20 accelerate launch --config_file configs/accelerate_fsdp_config.yaml \ examples/finetune.py \ --model_name_or_path ${model_name_or_path} \ ... --use_lisa 1 \ --lisa_activated_layers ${lisa_activated_layers} \ --lisa_interval_steps ${lisa_interval_steps} \ ...源码层面(src/lmflow/args.py):
use_lisa:是否启用 LISA 策略(默认False);lisa_activated_layers:激活(解冻)层数(默认2);lisa_interval_steps:每个冻结区间内的步数,即每隔该步数随机切换被解冻层(默认20);lisa_layers_attribute:模型层属性路径(默认model.model.layers)。
在 src/lmflow/pipeline/finetuner.py 中,当training_args.use_lisa为真时,会构造DynamicLayerActivationCallback并将其追加到 Trainer 的回调列表,由该回调按interval_steps周期性地随机更新激活层——这就是 LISA 机制在 HF Trainer 框架中的落地点。
4.5 LoRA 微调
LoRA 是参数高效微调算法,比全参微调更省显存与算力。README 示例(Galactica-1.3B):
cd data && ./download.sh alpaca && cd - bash ./scripts/run_finetune_with_lora.sh \ --model_name_or_path facebook/galactica-1.3b \ --dataset_path data/alpaca/train_conversation \ --output_lora_path output_models/finetuned_galactica_loraTips:Llama-2-7B 对话数据集示例可追加
--conversation_template llama2。
对应脚本 run_finetune_with_lora.sh 的实际参数:
# LoRA related arguments lora_r=8 lora_alpha=32 lora_dropout=0.1 accelerate launch --config_file configs/accelerate_fsdp_config.yaml \ examples/finetune.py \ --model_name_or_path ${model_name_or_path} \ ... --use_lora 1 \ --lora_r ${lora_r} \ --lora_alpha ${lora_alpha} \ --lora_dropout ${lora_dropout} \ ...LoRA 参数定义见 src/lmflow/args.py:
use_lora:是否启用 LoRA(默认False);lora_r:LoRA 秩,越小参数量越少(默认8);lora_alpha:论文中的 alpha,控制微调权重与原始权重的合并比例(默认32);lora_dropout:lora.linear的 dropout 率(默认0.1);lora_target_modules:应用 LoRA 的模块,逗号分隔多个模块;save_aggregated_lora:是否保存聚合后的 LoRA 权重。
合并 LoRA 权重
将 LoRA 权重与基座模型合并为单一模型:
bash ./scripts/run_merge_lora.sh \ --model_name_or_path Qwen/Qwen1.5-1.8B \ --lora_model_path output_models/lora \ --output_model_path output_models/lora_merged从 run_merge_lora.sh 源码可见,该脚本支持--model_name_or_path、--lora_model_path、--output_model_path、--device(默认cpu)四个参数,底层调用 examples/merge_lora.py;当前仅支持 CPU 合并,GPU 合并会报错提示。
4.6 QLoRA(补充)
仓库还提供 run_finetune_with_qlora.sh,在 LoRA 基础上对基座模型做 4bit/8bit 量化,进一步压低显存:
quant_bit=4 lora_r=8 lora_alpha=32 lora_dropout=0.1 accelerate launch --config_file configs/accelerate_fsdp_config.yaml \ examples/finetune.py \ ... --use_qlora 1 \ --quant_bit ${quant_bit} \ --lora_r ${lora_r} \ --lora_alpha ${lora_alpha} \ --lora_dropout ${lora_dropout} \ ...量化相关参数(src/lmflow/args.py):
quant_bit:量化位数,可选4/8(默认4);quant_type:量化类型,可选nf4/fp4(默认nf4);double_quant:是否使用双重量化(默认True)。
五、推理(Inference)
微调完成后即可对话:
bash ./scripts/run_chatbot.sh output_models/finetuned_gpt2Tips:批量推理推荐 SGLang 以获得更高吞吐:
bash ./scripts/run_sglang_inference.sh若遇到
ModuleNotFoundError: No module named 'common_ops',请先apt-get update再apt install numactl。
六、部署(Deployment)
如需本地部署自研模型,可使用 Gradio 搭建聊天 UI:
pip install gradio python ./examples/chatbot_gradio.py \ --deepspeed configs/ds_config_chatbot.json \ --model_name_or_path YOUR-LLAMA \ --lora_model_path ./robin-7b \ --prompt_structure "A chat between a curious human and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the human's questions.###Human: {input_text}###Assistant:" \ --end_string "#" \ --max_new_tokens 200其中--prompt_structure指定对话提示模板,{input_text}为输入占位符。LMFlow 也提供 examples/chatbot.py、examples/vis_chatbot_gradio.py(多模态版本)等入口。
七、评估(Evaluation)
多数评估场景推荐使用 LM Evaluation Harness(EleutherAI 的lm-evaluation-harness)。仓库同时提供 examples/evaluation.py 与 scripts/run_evaluation.sh 等内置评估脚本可供参考,README 建议将 LM Evaluation Harness 作为主要评估工具。
八、支持的特性速览
微调加速与显存优化
- LISA:训练命令加
--use_lisa 1启用,--lisa_activated_layers 2控制激活层数,--lisa_interval_steps 20调整冻结层切换间隔; - LoRA:参数高效微调;
- FlashAttention:支持 FlashAttention-1 与 FlashAttention-2,详见 docs/readme/flash_attn2.md;
- Gradient Checkpointing:加
--gradient_checkpointing以计算换显存; - DeepSpeed Zero3:支持 Zero-3 Offload,可直接使用 configs/deepspeed/zero3.json。
推理加速
- CPU 推理(LLaMA):借助 llama.cpp 的 4bit 量化将 LLaMA 模型跑在 CPU 上;
- FlashAttention / vLLM:快速易用的 LLM 推理与 Serving。
长上下文
- Position Interpolation:支持 LLaMA 模型的 Linear 与 NTK 缩放技术,详见 docs/readme/Position_Interpolation.md。
模型定制与多模态
- Vocabulary Extension:训练自定义 sentencepiece tokenizer 并与原 HF tokenizer 合并;
- Multimodal Chatbot:支持图文多模态输入,脚本见 scripts/multimodal/run_vis_chatbot_gradio_minigpt4.sh。
自定义优化器
LMFlow 支持以多种优化器进行训练,脚本见 run_finetune_with_custom_optim.sh;优化器实现集中在 src/lmflow/optim(包含 adam、adamw_schedule_free、adan、lamb、muon、sophia、sgdp、yogi、novograd、adabelief、adabound、radam、nadam、adamp、lars、sgd_schedule_free 等)。README 在 Alpaca 数据集上以 GPT-2 微调 0.1 epoch 给出的各优化器训练损失对比(默认超参,仅供参考):
| Optimizer Name | Train Loss |
|---|---|
| RMSprop | 2.4016 |
| LION-32bit | 2.4041 |
| Adam | 2.4292 |
| AdamP | 2.4295 |
| AdamW | 2.4469 |
| AdaFactor | 2.4543 |
| AdaBound | 2.4547 |
| AdamWScheduleFree | 2.4677 |
| Adan | 2.5063 |
| NAdam | 2.5569 |
| AdaBelief | 2.5857 |
| AdaMax | 2.5924 |
| RAdam | 2.6104 |
| AdaDelta | 2.6298 |
| AdaGrad | 2.8657 |
| Yogi | 2.9314 |
| NovoGrad | 3.1071 |
| Sophia | 3.1517 |
| LAMB | 3.2350 |
| LARS | 3.3329 |
| SGDScheduleFree | 3.3541 |
| SGDP | 3.3567 |
| SGD | 3.3734 |
九、许可与引用
- 项目代码遵循Apache 2.0许可证(见 LICENSE);
- 商用模型使用需另行签署授权文件;
- 引用请使用 README 提供的三篇论文 BibTeX:LMFlow(arXiv:2306.12420)、RAFT(arXiv:2304.06767)、LISA(arXiv:2403.17919)。
说明:README 中提到的部分旧功能路径(如
scripts/speculative_decoding、scripts/vocab_extension、readme/目录)在当前仓库中已随 v1.0.0 重构有所调整,本文均以仓库实际存在的文件路径为准。
- 人工智能
- 大模型
- 微调
- 模型评测
- 强化学习
- 多模态
【免费下载链接】LMFlow
An Extensible Toolkit for Finetuning and Inference of Large Foundation Models. Large Models for All.
相关推荐
LMFlow 快速上手实战指南:从环境搭建、数据集准备到全量/LISA/LoRA 微调、推理与评测
LMFlow 快速上手实战指南:从环境搭建、数据集准备到全量/LISA/LoRA 微调、推理与评测 本文基于 LMFlow 仓库的官方多语言 README( d
人工智能大模型微调模型评测强化学习多模态LMFlow 实战指南:环境安装、全参数 / LISA / LoRA 微调与推理评估全流程
LMFlow 实战指南:环境安装、全参数 / LISA / LoRA 微调与推理评估全流程 本文基于 LMFlow 官方文档(西班牙语版 README)整理并结
人工智能大模型微调模型评测强化学习多模态LMFlow 微调实战指南:从数据准备到检查点保存,完整掌握全参数、LISA 与 LoRA 微调
LMFlow 微调实战指南:从数据准备到检查点保存,完整掌握全参数、LISA 与 LoRA 微调 本文基于 LMFlow 仓库官方微调文档 finetuning
人工智能大模型微调模型评测强化学习多模态
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考