☰
LMFlow 微调全流程指南:环境搭建、数据集准备与 Full / LISA / LoRA 训练实战
2026/9/25 6:55:53 网站建设 项目流程
  • 人工智能
  • 大模型
  • 微调
  • 模型评测
  • 强化学习
  • 多模态

【免费下载链接】LMFlow

An Extensible Toolkit for Finetuning and Inference of Large Foundation Models. Large Models for All.

项目地址:https://gitcode.com/gh_mirrors/lm/LMFlow
点击查看免费下载

本文以 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启用功能安装命令
vllmvLLM 后端推理与 Iterative DPOpip install -e ".[vllm]"
sglangSGLang 后端推理与 Iterative DPOpip install -e ".[sglang]"
trlDPO / Iterative DPO 训练pip install -e ".[trl]"
deepspeedDeepSpeed 集成pip install -e ".[deepspeed]"
flash_attnFlash Attention 2pip install -e ".[flash_attn]"
ray分布式奖励模型推理pip install -e ".[ray]"
multimodal多模态模型pip install -e ".[multimodal]"
gradioGradio 聊天 UIpip install -e ".[gradio]"
flaskFlask 部署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,有两种方式:

  1. 运行训练命令前设置环境变量:
export WANDB_MODE=disabled
  1. 在训练脚本中指定--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.5B3B7B14B30B70BxB
Fullbf16/fp169GB55GB120GB240GB600GB1200GB18xGB
LoRA1GB6GB16GB32GB64GB160GB2xGB
QLoRAquant_bit=80.7GB3GB10GB20GB40GB80GBxGB
QLoRAquant_bit=40.4GB1.5GB6GB12GB24GB48GBx/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_gpt2

Tips:对话数据集建议指定对话模板以获得更好效果,追加--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 20

Tips: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_lora

Tips: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_gpt2

Tips:批量推理推荐 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 NameTrain Loss
RMSprop2.4016
LION-32bit2.4041
Adam2.4292
AdamP2.4295
AdamW2.4469
AdaFactor2.4543
AdaBound2.4547
AdamWScheduleFree2.4677
Adan2.5063
NAdam2.5569
AdaBelief2.5857
AdaMax2.5924
RAdam2.6104
AdaDelta2.6298
AdaGrad2.8657
Yogi2.9314
NovoGrad3.1071
Sophia3.1517
LAMB3.2350
LARS3.3329
SGDScheduleFree3.3541
SGDP3.3567
SGD3.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.

项目地址:https://gitcode.com/gh_mirrors/lm/LMFlow
点击查看免费下载

相关推荐

上一篇:Eclipse LSP4J 项目常见问题解决方案
下一篇:kail容器过滤与命名空间管理:精细控制日志输出范围

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询