当前位置: 首页 > news >正文

deepspeed,vllm,llamafactory的使用

大模型微调:DeepSpeed、vLLM 及 LLaMA-Factory 使用指南


一、工具概览

工具定位核心能力
DeepSpeed分布式训练框架ZeRO 显存优化、数据并行、流水线并行
vLLM推理引擎PagedAttention、Continuous Batching、高吞吐推理
LLaMA-Factory一站式微调平台100+ 模型支持、LoRA/QLoRA、Web UI、一键训练

三者关系:LLaMA-Factory 作为上层框架,底层集成 DeepSpeed 做分布式训练,集成 vLLM 做推理部署。


二、环境准备

2.1 硬件要求

模型规模微调方式推荐显存推荐 GPU
7BLoRA (FP16)16GBRTX 4090 / A100 40GB
7BQLoRA (INT4)8GBRTX 3090 / RTX 4080
13BLoRA (FP16)32GBA100 40GB
13BQLoRA (INT4)12GBRTX 4090
70BLoRA (FP16)160GBH100 80GB x 2
70BQLoRA (INT4)48GBA100 80GB / L40

2.2 软件依赖

# Python >= 3.9python-mpipinstall--upgradepip# PyTorch (CUDA 12.1)pipinstalltorch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121# 验证 CUDApython-c"import torch; print(torch.cuda.is_available()); print(torch.version.cuda)"

三、LLaMA-Factory 安装与使用

3.1 安装

# 克隆仓库gitclone--depth1https://github.com/hiyouga/LLaMA-Factory.gitcdLLaMA-Factory# 安装基础依赖pipinstall-e".[torch,metrics]"# 安装全部可选依赖(含 DeepSpeed、vLLM、FlashAttention)pipinstall-e".[torch,metrics,deepspeed,vllm,flash-attn]"# 验证安装llamafactory-cli version

国内镜像加速(可选):

# 使用魔搭社区下载模型exportUSE_MODELSCOPE_HUB=1# 或使用魔乐社区exportUSE_OPENMIND_HUB=1

3.2 启动 Web UI

llamafactory-cli webui

访问http://localhost:7860,可视化界面包含:

  • 模型选择与加载
  • 数据集配置
  • 训练参数调整
  • 训练监控(Loss 曲线)
  • 推理测试

3.3 命令行训练(推荐)

方式一:命令行参数
llamafactory-cli train\--stagesft\--do_trainTrue\--model_name_or_pathQwen/Qwen2.5-7B-Instruct\--finetuning_typelora\--templateqwen\--flash_attnauto\--dataset_dirdata\--datasetalpaca_zh_demo\--cutoff_len2048\--learning_rate5e-05\--num_train_epochs3.0\--per_device_train_batch_size2\--gradient_accumulation_steps8\--lr_scheduler_typecosine\--max_grad_norm1.0\--logging_steps5\--save_steps100\--output_dirsaves/Qwen2.5-7B/lora/sft\--bf16True\--plot_lossTrue\--lora_rank8\--lora_alpha16\--lora_dropout0\--lora_targetall
方式二:YAML 配置文件(推荐)

创建train_lora.yaml

### modelmodel_name_or_path:Qwen/Qwen2.5-7B-Instruct### methodstage:sftdo_train:truefinetuning_type:loralora_target:alllora_rank:8lora_alpha:16lora_dropout:0### datasetdataset:alpaca_zh_demotemplate:qwencutoff_len:2048max_samples:1000overwrite_cache:truepreprocessing_num_workers:16### outputoutput_dir:saves/qwen2.5-7b/lora/sftlogging_steps:10save_steps:500plot_loss:trueoverwrite_output_dir:true### trainper_device_train_batch_size:1gradient_accumulation_steps:8learning_rate:5.0e-5num_train_epochs:3.0lr_scheduler_type:cosinewarmup_ratio:0.1bf16:trueddp_timeout:180000000

执行训练:

llamafactory-cli train train_lora.yaml

3.4 关键参数说明

参数说明推荐值
finetuning_type微调类型lora/full/freeze
lora_rankLoRA 秩 r8(简单任务)/ 16-32(复杂任务)
lora_alphaLoRA 缩放因子2 * rank(通常)
lora_target目标模块all/q_proj,v_proj
per_device_train_batch_size每设备 batch1-4(根据显存调整)
gradient_accumulation_steps梯度累积8-16(等效大 batch)
learning_rate学习率1e-5 ~ 5e-5
cutoff_len最大序列长度2048 / 4096
bf16BF16 混合精度true(推荐,比 FP16 稳定)

3.5 自定义数据集

  1. 准备数据文件data/my_dataset.json
[{"instruction":"请解释什么是机器学习","input":"","output":"机器学习是人工智能的一个分支..."}]
  1. data/dataset_info.json中注册:
{"my_dataset":{"file_name":"my_dataset.json","formatting":"alpaca","columns":{"prompt":"instruction","query":"input","response":"output"}}}
  1. YAML 中引用:dataset: my_dataset

四、DeepSpeed 集成(分布式训练)

4.1 DeepSpeed 简介

DeepSpeed 是微软开源的分布式训练框架,核心特性:

  • ZeRO(Zero Redundancy Optimizer):分片优化器状态、梯度、参数,大幅降低显存占用
  • 3D 并行:数据并行 + 张量并行 + 流水线并行
  • Offload:将优化器状态卸载到 CPU/NVMe,进一步节省显存

4.2 在 LLaMA-Factory 中使用 DeepSpeed

单卡 LoRA 微调(ZeRO-2)

创建ds_config_zero2.json

{"train_batch_size":"auto","train_micro_batch_size_per_gpu":"auto","gradient_accumulation_steps":"auto","gradient_clipping":"auto","zero_allow_untested_optimizer":true,"fp16":{"enabled":"auto","loss_scale":0,"loss_scale_window":1000,"initial_scale_power":16,"hysteresis":2,"min_loss_scale":1},"bf16":{"enabled":"auto"},"zero_optimization":{"stage":2,"offload_optimizer":{"device":"cpu","pin_memory":true},"allgather_partitions":true,"allgather_bucket_size":2e8,"overlap_comm":true,"reduce_scatter":true,"reduce_bucket_size":2e8,"contiguous_gradients":true}}

执行训练:

llamafactory-cli train train_lora.yaml--deepspeedds_config_zero2.json
多卡全参数微调(ZeRO-3)

创建ds_config_zero3.json

{"train_batch_size":"auto","train_micro_batch_size_per_gpu":"auto","gradient_accumulation_steps":"auto","gradient_clipping":"auto","zero_allow_untested_optimizer":true,"bf16":{"enabled":true},"zero_optimization":{"stage":3,"offload_optimizer":{"device":"cpu","pin_memory":true},"offload_param":{"device":"cpu","pin_memory":true},"overlap_comm":true,"contiguous_gradients":true,"sub_group_size":1e9,"reduce_bucket_size":"auto","stage3_prefetch_bucket_size":"auto","stage3_param_persistence_threshold":"auto","stage3_max_live_parameters":1e9,"stage3_max_reuse_distance":1e9,"stage3_gather_16bit_weights_on_model_save":true}}

多卡启动:

torchrun--nproc_per_node=4\src/train.py train_full.yaml\--deepspeedds_config_zero3.json

4.3 ZeRO 阶段对比

ZeRO 阶段优化内容显存节省适用场景
ZeRO-1分片优化器状态~4x数据并行
ZeRO-2+ 分片梯度~8x大模型微调
ZeRO-3+ 分片参数~N 倍(N=GPU 数)超大模型训练
ZeRO-Offload卸载到 CPU/NVMe进一步节省显存极度受限

4.4 DeepSpeed 关键配置说明

{"zero_optimization":{"stage":2,// ZeRO 阶段:1/2/3"offload_optimizer":{// 优化器状态卸载"device":"cpu",// 卸载到 CPU 或 nvme"pin_memory":true// 固定内存,加速传输},"overlap_comm":true,// 通信与计算重叠"contiguous_gradients":true// 连续梯度,减少碎片}}

五、vLLM 集成(推理部署)

5.1 vLLM 简介

vLLM 是高性能大模型推理引擎,核心特性:

  • PagedAttention:将 KV Cache 分页管理,显存利用率接近 100%
  • Continuous Batching:动态合并请求,最大化 GPU 利用率
  • 高吞吐:相比原生 Transformers,吞吐量提升 3-10 倍

5.2 在 LLaMA-Factory 中使用 vLLM

方式一:LLaMA-Factory 内置脚本
python scripts/vllm_infer.py\--model_name_or_pathsaves/qwen2.5-7b/lora/sft\--templateqwen\--datasetdata_sample\--cutoff_len512\--max_samples1000\--batch_size32\--max_new_tokens512
方式二:启动 OpenAI 兼容 API 服务
# 合并 LoRA 权重后部署llamafactory-cliexportmerge_lora.yaml# 使用 vLLM 启动 API 服务python-mvllm.entrypoints.openai.api_server\--modelsaves/qwen2.5-7b/lora/sft_merged\--templateqwen\--dtypehalf\--gpu_memory_utilization0.95\--max_model_len4096\--port8000

调用 API:

fromopenaiimportOpenAI client=OpenAI(base_url="http://localhost:8000/v1",api_key="dummy")response=client.chat.completions.create(model="saves/qwen2.5-7b/lora/sft_merged",messages=[{"role":"user","content":"你好"}])print(response.choices[0].message.content)
方式三:LLaMA-Factory 一键部署
# 使用 LLaMA-Factory 的 API 模式(底层调用 vLLM)llamafactory-cli api\--model_name_or_pathsaves/qwen2.5-7b/lora/sft\--templateqwen\--finetuning_typelora\--infer_backendvllm

5.3 vLLM 关键参数

参数说明推荐值
--dtype数据类型half/bfloat16/float16
--gpu_memory_utilizationGPU 显存利用率0.90-0.95
--max_model_len最大序列长度根据模型支持设置
--tensor_parallel_size张量并行 GPU 数1(单卡)/ 2/4/8
--quantization量化方式awq/gptq/fp8
--block_sizePagedAttention 块大小16(默认)/ 32

5.4 性能优化

# 启用 AWQ 量化部署python-mvllm.entrypoints.openai.api_server\--modelQwen/Qwen2.5-7B-Instruct-AWQ\--quantizationawq\--dtypehalf\--gpu_memory_utilization0.95# 多卡张量并行python-mvllm.entrypoints.openai.api_server\--modelQwen/Qwen2.5-72B-Instruct\--tensor_parallel_size4\--dtypebfloat16

六、完整工作流示例

6.1 微调 + 合并 + 部署(单卡)

# 1. 准备环境gitclone--depth1https://github.com/hiyouga/LLaMA-Factory.gitcdLLaMA-Factory pipinstall-e".[torch,metrics,deepspeed,vllm]"# 2. 准备数据集(放入 data/ 目录并注册)# 3. LoRA 微调llamafactory-cli train configs/train_lora.yaml# 4. 合并 LoRA 权重cat>merge.yaml<<'EOF' model_name_or_path: Qwen/Qwen2.5-7B-Instruct adapter_name_or_path: saves/qwen2.5-7b/lora/sft template: qwen finetuning_type: lora export_dir: saves/qwen2.5-7b/lora/sft_merged export_size: 2 export_device: cpu export_legacy_format: false EOFllamafactory-cliexportmerge.yaml# 5. vLLM 部署python-mvllm.entrypoints.openai.api_server\--modelsaves/qwen2.5-7b/lora/sft_merged\--templateqwen\--dtypehalf\--gpu_memory_utilization0.95\--port8000

6.2 多卡分布式微调(DeepSpeed + ZeRO-3)

# 使用 torchrun 启动多卡训练torchrun--nproc_per_node=4\--nnodes=1\--node_rank=0\src/train.py\--deepspeedconfigs/ds_config_zero3.json\configs/train_full.yaml

6.3 量化微调(QLoRA)

# train_qlora.yamlmodel_name_or_path:Qwen/Qwen2.5-7B-Instructstage:sftdo_train:truefinetuning_type:loraquantization_bit:4# 4-bit 量化quantization_method:bitsandbyteslora_rank:64lora_alpha:16lora_target:alldataset:alpaca_zh_demotemplate:qwencutoff_len:2048per_device_train_batch_size:1gradient_accumulation_steps:8learning_rate:1.0e-4num_train_epochs:3.0output_dir:saves/qwen2.5-7b/qlora/sftbf16:true
llamafactory-cli train train_qlora.yaml

七、监控与调试

7.1 训练监控

# 启用 WandB 监控pipinstallwandb wandb login# YAML 中添加report_to: wandb run_name: qwen2.5-7b-lora-sft

7.2 显存监控

# 实时监控 GPUwatch-n1nvidia-smi# 或使用 nvitoppipinstallnvitop nvitop

7.3 常见问题

问题原因解决
CUDA OOM显存不足减小 batch_size / 启用 gradient_checkpointing / 使用 ZeRO-Offload
Loss = NaN学习率过大降低 learning_rate,启用 warmup
训练速度慢数据加载瓶颈增加 num_workers,启用 pin_memory
vLLM 启动失败CUDA 版本不匹配检查nvidia-smitorch.version.cuda
模型加载慢网络下载使用USE_MODELSCOPE_HUB=1或本地缓存

http://www.jsqmd.com/news/1069526/

相关文章:

  • Kimi Work 来了:月之暗面发布桌面 Agent,知识工作者的“Vibe Working“时代开启
  • AI 时代,每个人都需要构建自己的操作系统
  • 【流形学习多模态语言变量分析基础】王阳明代数讲义之元认知透镜
  • 杰理ac791 wifi_camera 工程排坑手册
  • 云耀计算AI-Claura,在树莓派运行的AI
  • 【AI应用实战-WorkBuddy】工作流搭建:从需求到自动化全流程(十三)
  • 第二章 数字类型及其操作3
  • IntelliGit 项目个人工作总结
  • 模型配置篇(子篇)《DeepSeek API Key 获取实操指南:手把手教你拿到“大龙虾”的通行证》
  • 计算机毕业设计之村级技能培训管理系统
  • 微分几何中的等参超曲面与焦点流形稳定性分析
  • 从 Receiver Agreement 看懂 SAP PI/PO 出站路由的最后一公里
  • 秋招倒计时两个月,AI能力要从“会用工具”变成“能讲案例”
  • 为什么很多公司禁用 MyBatis 二级缓存?看完你就不敢乱开了
  • Python 3正则表达式完全指南:从入门到精通
  • 基于 Harmony 6.0 应用的游戏时长统计与防沉迷提醒应用首页实现
  • 金融事件序列建模:PRAGMA Transformer模型解析与应用
  • 2026 AI 开发者生存指南(5):AI Agent 框架对比——LangChain、LangGraph、CrewAI、Dify 怎么选?
  • Tiny Time Mixers (TTMs): Fast Pre-trained Models for Enhanced Zero/Few-Shot Forecasting of Multivari
  • 基于LLM的文本相关性评估:从RAG优化到可持续性分析的工程实践
  • Spring AI 接入 MCP:DeepSeek 连接 Filesystem Server 读取本地文件
  • 复杂流体系统实时控制:模型降阶与滚动时域优化实践
  • DINOv3+LoRA:基于视觉基础模型的图像篡改检测新范式
  • 当AI Agent开始写AI Agent:自进化系统在企业管理中的伦理与安全红线
  • MatRIS-MoE与Janus框架:突破百亿参数通用机器学习原子间势训练壁垒
  • 指纹浏览器指纹工厂(下):基于真实设备数据特征的马尔可夫链生成与校验
  • 广告物料行业实践指南:从制作到落地的全流程解析与未来趋势展望
  • 基于SRAM存内计算的Transformer Softmax硬件加速方案解析
  • 自适应信息流:让视觉语言模型学会动态聚焦的关键技术
  • 小旺 AI 截图:基于多模态大模型的桌面效率工具