2卡分布式训练专用教程环境搭建 → 数据准备 → 2卡 LoRA 微调 → 推理测试 → 部署上线基于 MS-SWIFT 框架 | DeepSpeed ZeRO-2 | 每个参数详细解释 | 复制即用目录第一步环境准备数据集准备多卡训练配置详解完整多卡训练脚本示例⭐ 含训练过程截图推理部署常见问题与解决方案第一步环境准备亲测可用以下环境配置已在实际项目中验证通过1.1 创建 Conda 环境# 创建新环境conda create -n swift python3.11 -y# 激活环境conda activate swift1.2 安装核心依赖根据官方文档Qwen3.5 需要安装以下依赖# MS-SWIFTpip install uv uv pip install -U ms-swift# Transformers 和相关库uv pip install -U transformers5.2.0qwen_vl_utils0.0.14 peft liger-kernel# Flash-Linear-Attention请安装 main 分支uv pip install -U githttps://github.com/fla-org/flash-linear-attention# Causal-Conv1dpip install -U githttps://github.com/Dao-AILab/causal-conv1d --no-build-isolation# Flash-Attention (可以跳过安装不安装也能训练这个安装需要耗时3小时建议跳过)uv pip install flash-attn2.8.3 --no-build-isolation# DeepSpeed多卡训练必须安装uv pip install deepspeed# vLLM可选推理/部署时需要这个可以暂时不安装uv pip install -U vllm0.17.0# 再安装一遍防止 vllm的版本把这个覆盖掉uv pip install transformers5.2.0重要提示⚠️transformers5.3.0目前会报错已实测验证✅ 推荐使用transformers5.2.0版本如果安装了 vLLM训练需要覆盖 vLLM 默认版本再次安装一遍uv pip install -U transformers5.2.0多卡训练必须安装 DeepSpeed1.3 验证安装# 查看 swift 命令行工具swift sft --help# 如果能显示帮助信息说明安装成功# 验证 DeepSpeed 安装ds_report# 应该显示 DeepSpeed 版本和 CUDA 信息验证成功示例数据集准备支持的数据格式MS-SWIFT 支持多种数据格式以下是常用的文本数据格式。1. 纯文本数据{messages: [{role: user, content: 浙江的省会在哪}, {role: assistant, content: 浙江的省会在杭州。}]}{messages: [{role: system, content: 你是个有用无害的助手}, {role: user, content: 介绍一下杭州}, {role: assistant, content: 杭州是浙江省省会...}]}2. 多轮对话数据{messages: [{role: system, content: 你是一个专业的AI助手}, {role: user, content: 什么是机器学习}, {role: assistant, content: 机器学习是人工智能的一个分支...}, {role: user, content: 它有哪些应用}, {role: assistant, content: 机器学习广泛应用于图像识别、自然语言处理、推荐系统等领域...}]}说明支持多轮对话历史system角色可选用于设置助手行为对话轮次不限3. Agent 工具调用数据常用{messages: [{role: user, content: 帮我查一下北京今天的天气}, {role: assistant, content: 好的我来帮你查询北京的天气信息。}, {role: tool_call, content: {\name\: \get_weather\, \arguments\: {\city\: \北京\}}}, {role: tool_response, content: {\temperature\: \15°C\, \condition\: \晴\}}, {role: assistant, content: 北京今天的天气是晴天温度15°C。}], tools: [{type: function, function: {name: get_weather, description: 获取指定城市的天气信息, parameters: {type: object, properties: {city: {type: string, description: 城市名称}}, required: [city]}}}]}说明tool_call: 模型调用工具的请求tool_response: 工具返回的结果tools: 可用工具列表函数定义支持多次工具调用和多个工具使用内置数据集MS-SWIFT 提供了 150 内置数据集可直接使用# 常用数据集AI-ModelScope/alpaca-gpt4-data-zh # 中文指令数据AI-ModelScope/alpaca-gpt4-data-en # 英文指令数据swift/self-cognition # 自我认知数据AI-ModelScope/LaTeX_OCR:human_handwrite # LaTeX OCR 数据数据集采样语法# 基本格式数据集id:子数据集#采样数量--dataset AI-ModelScope/alpaca-gpt4-data-zh#500# 多个数据集--dataset AI-ModelScope/alpaca-gpt4-data-zh#500 \ AI-ModelScope/alpaca-gpt4-data-en#500 \ swift/self-cognition#500# 使用子数据集--dataset AI-ModelScope/LaTeX_OCR:human_handwrite#2000自定义数据集将数据保存为.jsonl格式在训练时指定--dataset train.jsonl --val_dataset val.jsonl2卡训练快速开始本教程提供完整的2卡训练脚本所有参数都有详细解释。如需了解更多参数配置请参考后文的参数详细解释部分。完整多卡训练脚本示例⭐ 核心部分以下是完整的可运行多卡训练脚本包含详细的训练过程截图展示示例 1: 基础多卡 LoRA 微调2卡入门推荐#!/bin/bash# 2卡训练脚本 - 使用 DeepSpeed ZeRO-2# 数据集参数说明请参考前文数据集准备章节export PYTORCH_CUDA_ALLOC_CONFexpandable_segments:TrueNCCL_P2P_DISABLE1 \NPROC_PER_NODE2 \CUDA_VISIBLE_DEVICES0,1 \swift sft \ --model Qwen/Qwen3.5-4B \ --dataset AI-ModelScope/alpaca-gpt4-data-zh#2000 \ --tuner_type lora \ --lora_rank 16 \ --lora_alpha 32 \ --target_modules all-linear \ --torch_dtype bfloat16 \ --deepspeed zero2 \ --num_train_epochs 3 \ --per_device_train_batch_size 2 \ --gradient_accumulation_steps 4 \ --learning_rate 1e-4 \ --warmup_ratio 0.05 \ --max_length 2048 \ --gradient_checkpointing true \ --output_dir output/qwen3.5-4b-multi-2gpu \ --logging_steps 10 \ --save_steps 200 \ --eval_steps 200 \ --save_total_limit 3参数详细解释环境变量配置参数含义说明PYTORCH_CUDA_ALLOC_CONFexpandable_segments:TruePyTorch CUDA 内存分配优化强烈推荐启用可扩展内存段避免显存碎片化导致的OOM错误。PyTorch 2.0必备NCCL_P2P_DISABLE1禁用 NCCL P2P 通信某些GPU拓扑结构下P2P通信可能不稳定禁用后使用更稳定的通信方式NPROC_PER_NODE2每个节点的进程数指定使用2个GPU每个GPU对应1个训练进程CUDA_VISIBLE_DEVICES0,1可见的GPU设备指定使用GPU 0和1进行训练模型和数据参数参数含义说明--model Qwen/Qwen3.5-4B模型路径指定要微调的基础模型可以是ModelScope ID或本地路径--dataset AI-ModelScope/alpaca-gpt4-data-zh#2000训练数据集使用alpaca中文数据集采样2000条数据。格式数据集ID#采样数量LoRA 微调参数参数含义说明--tuner_type lora微调方法使用LoRALow-Rank Adaptation进行参数高效微调--lora_rank 16LoRA秩低秩矩阵的秩控制LoRA参数量。值越大效果越好但参数越多推荐8-32--lora_alpha 32LoRA缩放系数控制LoRA权重的缩放通常设为rank的2-4倍影响学习强度--target_modules all-linear应用LoRA的模块对所有线性层应用LoRA覆盖范围最广效果最好训练精度和优化参数含义说明--torch_dtype bfloat16模型数据类型使用bfloat16混合精度训练节省显存且训练稳定。如GPU不支持可改为float16--deepspeed zero2DeepSpeed配置使用ZeRO-2优化将优化器状态和梯度分片到多卡节省显存30-40%--gradient_checkpointing true梯度检查点通过重计算中间激活值节省显存可降低显存占用30-40%训练速度略慢10%训练超参数参数含义说明--num_train_epochs 3训练轮数完整遍历数据集的次数3轮通常足够过多可能过拟合--per_device_train_batch_size 2每卡批次大小每个GPU每次处理2个样本显存不足可降为1--gradient_accumulation_steps 4梯度累积步数累积4次梯度后更新参数等效批次2×4×216--learning_rate 1e-4学习率LoRA推荐1e-4控制参数更新幅度过大不稳定过小收敛慢--warmup_ratio 0.05预热比例前5%步数学习率线性增长帮助训练初期稳定--max_length 2048最大序列长度单个样本最大token数超过会被截断显存不足可降为1024保存和日志参数参数含义说明--output_dir output/qwen3.5-4b-multi-2gpu输出目录保存模型检查点、日志等文件的目录--logging_steps 10日志记录间隔每10步记录一次训练指标loss、学习率等--save_steps 200保存间隔每200步保存一次模型检查点--eval_steps 200评估间隔每200步在验证集上评估一次需要有验证集--save_total_limit 3最多保存检查点数只保留最新的3个检查点节省磁盘空间关键配置说明有效批次大小计算有效批次 per_device_train_batch_size × gradient_accumulation_steps × GPU数量 2 × 4 × 2 16显存占用估算Qwen3.5-4B LoRA基础配置约18-20GB/卡启用梯度检查点约12-14GB/卡使用ZeRO-2约10-12GB/卡提示:如果GPU不支持bfloat16如GTX系列将--torch_dtype bfloat16改为--torch_dtype float16如果显存不足可以降低per_device_train_batch_size为1或降低max_length为1024推理部署命令行推理基础推理CUDA_VISIBLE_DEVICES0 \swift infer \ --adapters output/qwen3.5-4b-multi-2gpu/vx-xxx/checkpoint-xxx \ --stream true \ --max_new_tokens 512推理参数说明参数说明默认值示例--adaptersLoRA 权重路径[]output/qwen3.5-4b-multi-2gpu/vx-xxx/checkpoint-200--stream流式输出Nonetrue--max_new_tokens最大生成 token 数None512,1024--temperature温度参数从 config 读取0.7,0(确定性)--top_kTop-K 采样None50--top_pTop-P 采样None0.9--enable_thinking开启思考模式Nonefalse--load_data_args加载训练时的数据参数Falsetrue(验证集推理)推理技巧确定性输出:--temperature 0或--top_k 1验证集推理:--load_data_args true会自动加载训练时切分的验证集Python 推理import osos.environ[CUDA_VISIBLE_DEVICES] 0from peft import PeftModelfrom swift import get_model_processor, get_templatefrom swift.infer_engine import TransformersEngine, InferRequest, RequestConfig# 加载模型和 LoRAadapter_dir output/qwen3.5-4b-multi-2gpu/vx-xxx/checkpoint-xxxmodel, processor get_model_processor(Qwen/Qwen3.5-4B)model PeftModel.from_pretrained(model, adapter_dir)# 创建模板和引擎template get_template(processor, enable_thinkingFalse)engine TransformersEngine(model, templatetemplate)# 推理infer_request InferRequest(messages[{ role: user, content: 你好你是谁,}])request_config RequestConfig(max_tokens256, temperature0.7)resp_list engine.infer([infer_request], request_configrequest_config)response resp_list[0].choices[0].message.contentprint(response)# 流式推理request_config RequestConfig(max_tokens256, temperature0.7, streamTrue)gen_list engine.infer([infer_request], request_configrequest_config)for chunk in gen_list[0]: if chunk isNone: continue print(chunk.choices[0].delta.content, end, flushTrue)print()部署 API 服务CUDA_VISIBLE_DEVICES0 \swift deploy \ --adapters output/qwen3.5-4b-multi-2gpu/vx-xxx/checkpoint-xxx \ --served_model_name Qwen3.5-4B-lora \ --port 8025部署参数参数说明默认值--port服务端口8000--host服务地址0.0.0.0--api_keyAPI 密钥None注意: 目前 vllm、sglang、lmdeploy 对 Qwen3.5 的 LoRA 加载存在兼容性问题推荐使用默认的 transformers 后端等待官方后续修复。Web 界面CUDA_VISIBLE_DEVICES0 \swift app \ --adapters output/qwen3.5-4b-multi-2gpu/vx-xxx/checkpoint-xxx \ --stream true浏览器打开显示的地址通常是http://localhost:7860即可对话。常见问题与解决方案Q1: 多卡训练显存不足 (OOM)解决方案按优先级启用 PyTorch CUDA 内存优化必备export PYTORCH_CUDA_ALLOC_CONFexpandable_segments:True为什么必须添加实际效果不启用训练到一半突然 OOM显存使用率只有 70%启用后同样配置可以正常训练完成显存利用率提升到 95%PyTorch 默认的显存分配器会产生显存碎片化问题即使总显存充足但由于碎片化导致无法分配连续大块显存引发 OOMexpandable_segments:True启用可扩展内存段允许 PyTorch 动态扩展内存块特别是在多卡训练、DeepSpeed、梯度检查点等场景下显存碎片化问题更严重PyTorch 2.0 强烈推荐启用可以避免 90% 的显存碎片化 OOM 问题使用 DeepSpeed ZeRO-3--deepspeed zero3启用梯度检查点--gradient_checkpointing true减小批次大小--per_device_train_batch_size 1 \--gradient_accumulation_steps 8使用 Liger Kernel--use_liger_kernel true降低最大长度--max_length 1024CPU Offload自定义 DeepSpeed 配置offload_optimizer: { device: cpu, pin_memory: true}Q2: 多卡训练速度慢加速方法增加每卡批次大小--per_device_train_batch_size 4 \--gradient_accumulation_steps 2使用 bf16 精度--torch_dtype bfloat16使用数据缓存--load_from_cache_file true \--dataset_num_proc 16优化 DeepSpeed 配置使用 ZeRO-2 而非 ZeRO-3如果显存足够启用通信优化overlap_comm: true安装 Flash Attentionpip install flash-attn --no-build-isolationQ3: GPU 利用率不均衡解决方案检查数据分布--dataset_shuffle true \--group_by_length true使用 DeepSpeed ZeRO-3自动平衡各卡负载检查 CUDA_VISIBLE_DEVICES确保指定的 GPU 都可用Q4: 训练效果不好调优建议增加数据量多卡可用更多数据--dataset AI-ModelScope/alpaca-gpt4-data-zh#5000增加训练轮数--num_train_epochs 5调整学习率--learning_rate 5e-5 \--warmup_ratio 0.1增大 LoRA rank多卡显存充足--lora_rank 64使用 DoRA--use_dora trueQ5: 如何断点续训swift sft \ --resume_from_checkpoint output/qwen3.5-4b-multi-2gpu/vx-xxx/checkpoint-200 \ 其他参数保持不变注意保持其他参数不变包括 GPU 数量和 DeepSpeed 配置会自动加载优化器状态和随机种子从上次的步数继续训练Q6: 如何合并 LoRA 权重swift export \ --adapters output/qwen3.5-4b-multi-2gpu/vx-xxx/checkpoint-200 \ --merge_lora true \ --output_dir output/qwen3.5-4b-mergedQ7: DeepSpeed 初始化失败常见原因和解决方案未安装 DeepSpeedpip install deepspeedCUDA 版本不兼容# 检查 CUDA 版本nvcc --version# 重新安装对应版本的 DeepSpeed环境变量问题export CUDA_HOME/usr/local/cudaexport PATH$CUDA_HOME/bin:$PATH训练监控TensorBoard# 安装pip install tensorboard# 启动tensorboard --logdir output/qwen3.5-4b-multi-2gpu# 浏览器打开http://localhost:6006SwanLabswift sft \ --report_to swanlab \ --swanlab_token your_token \ --swanlab_project qwen3.5-multi-gpu-training \ 其他参数性能参考Qwen3.5-4B LoRA 多卡训练性能GPU配置批次大小显存占用/卡训练速度2卡 ZeRO-22×4×216~16GB~200 samples/s4卡 ZeRO-22×4×432~14GB~400 samples/s8卡 ZeRO-24×2×864~12GB~800 samples/s4卡 ZeRO-31×8×432~10GB~350 samples/sDeepSpeed 优化效果配置显存节省速度影响适用场景ZeRO-230-40%基准2-8卡常规训练ZeRO-350-60%略慢 10-15%大模型或显存不足ZeRO-2 CPU Offload40-50%略慢 20%显存紧张ZeRO-3 CPU Offload60-70%略慢 30%超大模型参考资源官方文档: Qwen3.5 最佳实践DeepSpeed 文档: DeepSpeed 配置指南命令行参数: 完整参数文档自定义数据集: 数据集格式文档GitHub: ms-swift 仓库模型下载: ModelScope总结本教程专注于2卡分布式 LoRA 微调帮助你快速掌握 Qwen3.5 多卡训练流程✅环境准备: DeepSpeed 安装和配置✅数据准备: 支持文本、Agent 工具调用等数据格式✅2卡训练: 详细的 DeepSpeed ZeRO-2 配置和每个参数的详细解释✅完整示例: 可直接运行的2卡训练脚本✅推理部署: 命令行、Python API、Web 界面多种方式✅问题排查: 多卡训练常见问题解决方案和性能优化建议2卡训练核心要点必须设置 PYTORCH_CUDA_ALLOC_CONFexpandable_segments:True避免显存碎片化OOM必须安装 DeepSpeed使用 ZeRO-2优化器状态和梯度分片节省显存30-40%设置 NCCL_P2P_DISABLE1避免P2P通信问题有效批次大小 2 × 4 × 2 16per_device × accumulation × GPUs启用梯度检查点进一步降低显存占用参数调优建议显存充足per_device_train_batch_size4gradient_accumulation_steps2显存紧张per_device_train_batch_size1gradient_accumulation_steps8长文本降低max_length到 1024快速实验减少num_train_epochs到 1-2祝训练顺利这里给大家精心整理了一份全面的AI大模型学习资源包括AI大模型全套学习路线图从入门到实战、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等资料免费分享扫码免费领取全部内容1. 成长路线图学习规划要学习一门新的技术作为新手一定要先学习成长路线图方向不对努力白费。这里我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。可以说是最科学最系统的学习成长路线。2. 大模型经典PDF书籍书籍和学习文档资料是学习大模型过程中必不可少的我们精选了一系列深入探讨大模型技术的书籍和学习文档它们由领域内的顶尖专家撰写内容全面、深入、详尽为你学习大模型提供坚实的理论基础。书籍含电子版PDF3. 大模型视频教程对于很多自学或者没有基础的同学来说书籍这些纯文字类的学习教材会觉得比较晦涩难以理解因此我们提供了丰富的大模型视频教程以动态、形象的方式展示技术概念帮助你更快、更轻松地掌握核心知识。4. 2026行业报告行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估以了解哪些行业更适合引入大模型的技术和应用以及在哪些方面可以发挥大模型的优势。5. 大模型项目实战学以致用当你的理论知识积累到一定程度就需要通过项目实战在实际操作中检验和巩固你所学到的知识同时为你找工作和职业发展打下坚实的基础。6. 大模型面试题面试不仅是技术的较量更需要充分的准备。在你已经掌握了大模型技术之后就需要开始准备面试我们将提供精心整理的大模型面试题库涵盖当前面试中可能遇到的各种技术问题让你在面试中游刃有余。7. 资料领取全套内容免费抱走学 AI 不用再找第二份不管你是 0 基础想入门 AI 大模型还是有基础想冲刺大厂、了解行业趋势这份资料都能满足你现在只需按照提示操作就能免费领取扫码免费领取全部内容
Qwen3.5 多卡微调全流程:从环境安装到微调训练以及部署上线
2卡分布式训练专用教程环境搭建 → 数据准备 → 2卡 LoRA 微调 → 推理测试 → 部署上线基于 MS-SWIFT 框架 | DeepSpeed ZeRO-2 | 每个参数详细解释 | 复制即用目录第一步环境准备数据集准备多卡训练配置详解完整多卡训练脚本示例⭐ 含训练过程截图推理部署常见问题与解决方案第一步环境准备亲测可用以下环境配置已在实际项目中验证通过1.1 创建 Conda 环境# 创建新环境conda create -n swift python3.11 -y# 激活环境conda activate swift1.2 安装核心依赖根据官方文档Qwen3.5 需要安装以下依赖# MS-SWIFTpip install uv uv pip install -U ms-swift# Transformers 和相关库uv pip install -U transformers5.2.0qwen_vl_utils0.0.14 peft liger-kernel# Flash-Linear-Attention请安装 main 分支uv pip install -U githttps://github.com/fla-org/flash-linear-attention# Causal-Conv1dpip install -U githttps://github.com/Dao-AILab/causal-conv1d --no-build-isolation# Flash-Attention (可以跳过安装不安装也能训练这个安装需要耗时3小时建议跳过)uv pip install flash-attn2.8.3 --no-build-isolation# DeepSpeed多卡训练必须安装uv pip install deepspeed# vLLM可选推理/部署时需要这个可以暂时不安装uv pip install -U vllm0.17.0# 再安装一遍防止 vllm的版本把这个覆盖掉uv pip install transformers5.2.0重要提示⚠️transformers5.3.0目前会报错已实测验证✅ 推荐使用transformers5.2.0版本如果安装了 vLLM训练需要覆盖 vLLM 默认版本再次安装一遍uv pip install -U transformers5.2.0多卡训练必须安装 DeepSpeed1.3 验证安装# 查看 swift 命令行工具swift sft --help# 如果能显示帮助信息说明安装成功# 验证 DeepSpeed 安装ds_report# 应该显示 DeepSpeed 版本和 CUDA 信息验证成功示例数据集准备支持的数据格式MS-SWIFT 支持多种数据格式以下是常用的文本数据格式。1. 纯文本数据{messages: [{role: user, content: 浙江的省会在哪}, {role: assistant, content: 浙江的省会在杭州。}]}{messages: [{role: system, content: 你是个有用无害的助手}, {role: user, content: 介绍一下杭州}, {role: assistant, content: 杭州是浙江省省会...}]}2. 多轮对话数据{messages: [{role: system, content: 你是一个专业的AI助手}, {role: user, content: 什么是机器学习}, {role: assistant, content: 机器学习是人工智能的一个分支...}, {role: user, content: 它有哪些应用}, {role: assistant, content: 机器学习广泛应用于图像识别、自然语言处理、推荐系统等领域...}]}说明支持多轮对话历史system角色可选用于设置助手行为对话轮次不限3. Agent 工具调用数据常用{messages: [{role: user, content: 帮我查一下北京今天的天气}, {role: assistant, content: 好的我来帮你查询北京的天气信息。}, {role: tool_call, content: {\name\: \get_weather\, \arguments\: {\city\: \北京\}}}, {role: tool_response, content: {\temperature\: \15°C\, \condition\: \晴\}}, {role: assistant, content: 北京今天的天气是晴天温度15°C。}], tools: [{type: function, function: {name: get_weather, description: 获取指定城市的天气信息, parameters: {type: object, properties: {city: {type: string, description: 城市名称}}, required: [city]}}}]}说明tool_call: 模型调用工具的请求tool_response: 工具返回的结果tools: 可用工具列表函数定义支持多次工具调用和多个工具使用内置数据集MS-SWIFT 提供了 150 内置数据集可直接使用# 常用数据集AI-ModelScope/alpaca-gpt4-data-zh # 中文指令数据AI-ModelScope/alpaca-gpt4-data-en # 英文指令数据swift/self-cognition # 自我认知数据AI-ModelScope/LaTeX_OCR:human_handwrite # LaTeX OCR 数据数据集采样语法# 基本格式数据集id:子数据集#采样数量--dataset AI-ModelScope/alpaca-gpt4-data-zh#500# 多个数据集--dataset AI-ModelScope/alpaca-gpt4-data-zh#500 \ AI-ModelScope/alpaca-gpt4-data-en#500 \ swift/self-cognition#500# 使用子数据集--dataset AI-ModelScope/LaTeX_OCR:human_handwrite#2000自定义数据集将数据保存为.jsonl格式在训练时指定--dataset train.jsonl --val_dataset val.jsonl2卡训练快速开始本教程提供完整的2卡训练脚本所有参数都有详细解释。如需了解更多参数配置请参考后文的参数详细解释部分。完整多卡训练脚本示例⭐ 核心部分以下是完整的可运行多卡训练脚本包含详细的训练过程截图展示示例 1: 基础多卡 LoRA 微调2卡入门推荐#!/bin/bash# 2卡训练脚本 - 使用 DeepSpeed ZeRO-2# 数据集参数说明请参考前文数据集准备章节export PYTORCH_CUDA_ALLOC_CONFexpandable_segments:TrueNCCL_P2P_DISABLE1 \NPROC_PER_NODE2 \CUDA_VISIBLE_DEVICES0,1 \swift sft \ --model Qwen/Qwen3.5-4B \ --dataset AI-ModelScope/alpaca-gpt4-data-zh#2000 \ --tuner_type lora \ --lora_rank 16 \ --lora_alpha 32 \ --target_modules all-linear \ --torch_dtype bfloat16 \ --deepspeed zero2 \ --num_train_epochs 3 \ --per_device_train_batch_size 2 \ --gradient_accumulation_steps 4 \ --learning_rate 1e-4 \ --warmup_ratio 0.05 \ --max_length 2048 \ --gradient_checkpointing true \ --output_dir output/qwen3.5-4b-multi-2gpu \ --logging_steps 10 \ --save_steps 200 \ --eval_steps 200 \ --save_total_limit 3参数详细解释环境变量配置参数含义说明PYTORCH_CUDA_ALLOC_CONFexpandable_segments:TruePyTorch CUDA 内存分配优化强烈推荐启用可扩展内存段避免显存碎片化导致的OOM错误。PyTorch 2.0必备NCCL_P2P_DISABLE1禁用 NCCL P2P 通信某些GPU拓扑结构下P2P通信可能不稳定禁用后使用更稳定的通信方式NPROC_PER_NODE2每个节点的进程数指定使用2个GPU每个GPU对应1个训练进程CUDA_VISIBLE_DEVICES0,1可见的GPU设备指定使用GPU 0和1进行训练模型和数据参数参数含义说明--model Qwen/Qwen3.5-4B模型路径指定要微调的基础模型可以是ModelScope ID或本地路径--dataset AI-ModelScope/alpaca-gpt4-data-zh#2000训练数据集使用alpaca中文数据集采样2000条数据。格式数据集ID#采样数量LoRA 微调参数参数含义说明--tuner_type lora微调方法使用LoRALow-Rank Adaptation进行参数高效微调--lora_rank 16LoRA秩低秩矩阵的秩控制LoRA参数量。值越大效果越好但参数越多推荐8-32--lora_alpha 32LoRA缩放系数控制LoRA权重的缩放通常设为rank的2-4倍影响学习强度--target_modules all-linear应用LoRA的模块对所有线性层应用LoRA覆盖范围最广效果最好训练精度和优化参数含义说明--torch_dtype bfloat16模型数据类型使用bfloat16混合精度训练节省显存且训练稳定。如GPU不支持可改为float16--deepspeed zero2DeepSpeed配置使用ZeRO-2优化将优化器状态和梯度分片到多卡节省显存30-40%--gradient_checkpointing true梯度检查点通过重计算中间激活值节省显存可降低显存占用30-40%训练速度略慢10%训练超参数参数含义说明--num_train_epochs 3训练轮数完整遍历数据集的次数3轮通常足够过多可能过拟合--per_device_train_batch_size 2每卡批次大小每个GPU每次处理2个样本显存不足可降为1--gradient_accumulation_steps 4梯度累积步数累积4次梯度后更新参数等效批次2×4×216--learning_rate 1e-4学习率LoRA推荐1e-4控制参数更新幅度过大不稳定过小收敛慢--warmup_ratio 0.05预热比例前5%步数学习率线性增长帮助训练初期稳定--max_length 2048最大序列长度单个样本最大token数超过会被截断显存不足可降为1024保存和日志参数参数含义说明--output_dir output/qwen3.5-4b-multi-2gpu输出目录保存模型检查点、日志等文件的目录--logging_steps 10日志记录间隔每10步记录一次训练指标loss、学习率等--save_steps 200保存间隔每200步保存一次模型检查点--eval_steps 200评估间隔每200步在验证集上评估一次需要有验证集--save_total_limit 3最多保存检查点数只保留最新的3个检查点节省磁盘空间关键配置说明有效批次大小计算有效批次 per_device_train_batch_size × gradient_accumulation_steps × GPU数量 2 × 4 × 2 16显存占用估算Qwen3.5-4B LoRA基础配置约18-20GB/卡启用梯度检查点约12-14GB/卡使用ZeRO-2约10-12GB/卡提示:如果GPU不支持bfloat16如GTX系列将--torch_dtype bfloat16改为--torch_dtype float16如果显存不足可以降低per_device_train_batch_size为1或降低max_length为1024推理部署命令行推理基础推理CUDA_VISIBLE_DEVICES0 \swift infer \ --adapters output/qwen3.5-4b-multi-2gpu/vx-xxx/checkpoint-xxx \ --stream true \ --max_new_tokens 512推理参数说明参数说明默认值示例--adaptersLoRA 权重路径[]output/qwen3.5-4b-multi-2gpu/vx-xxx/checkpoint-200--stream流式输出Nonetrue--max_new_tokens最大生成 token 数None512,1024--temperature温度参数从 config 读取0.7,0(确定性)--top_kTop-K 采样None50--top_pTop-P 采样None0.9--enable_thinking开启思考模式Nonefalse--load_data_args加载训练时的数据参数Falsetrue(验证集推理)推理技巧确定性输出:--temperature 0或--top_k 1验证集推理:--load_data_args true会自动加载训练时切分的验证集Python 推理import osos.environ[CUDA_VISIBLE_DEVICES] 0from peft import PeftModelfrom swift import get_model_processor, get_templatefrom swift.infer_engine import TransformersEngine, InferRequest, RequestConfig# 加载模型和 LoRAadapter_dir output/qwen3.5-4b-multi-2gpu/vx-xxx/checkpoint-xxxmodel, processor get_model_processor(Qwen/Qwen3.5-4B)model PeftModel.from_pretrained(model, adapter_dir)# 创建模板和引擎template get_template(processor, enable_thinkingFalse)engine TransformersEngine(model, templatetemplate)# 推理infer_request InferRequest(messages[{ role: user, content: 你好你是谁,}])request_config RequestConfig(max_tokens256, temperature0.7)resp_list engine.infer([infer_request], request_configrequest_config)response resp_list[0].choices[0].message.contentprint(response)# 流式推理request_config RequestConfig(max_tokens256, temperature0.7, streamTrue)gen_list engine.infer([infer_request], request_configrequest_config)for chunk in gen_list[0]: if chunk isNone: continue print(chunk.choices[0].delta.content, end, flushTrue)print()部署 API 服务CUDA_VISIBLE_DEVICES0 \swift deploy \ --adapters output/qwen3.5-4b-multi-2gpu/vx-xxx/checkpoint-xxx \ --served_model_name Qwen3.5-4B-lora \ --port 8025部署参数参数说明默认值--port服务端口8000--host服务地址0.0.0.0--api_keyAPI 密钥None注意: 目前 vllm、sglang、lmdeploy 对 Qwen3.5 的 LoRA 加载存在兼容性问题推荐使用默认的 transformers 后端等待官方后续修复。Web 界面CUDA_VISIBLE_DEVICES0 \swift app \ --adapters output/qwen3.5-4b-multi-2gpu/vx-xxx/checkpoint-xxx \ --stream true浏览器打开显示的地址通常是http://localhost:7860即可对话。常见问题与解决方案Q1: 多卡训练显存不足 (OOM)解决方案按优先级启用 PyTorch CUDA 内存优化必备export PYTORCH_CUDA_ALLOC_CONFexpandable_segments:True为什么必须添加实际效果不启用训练到一半突然 OOM显存使用率只有 70%启用后同样配置可以正常训练完成显存利用率提升到 95%PyTorch 默认的显存分配器会产生显存碎片化问题即使总显存充足但由于碎片化导致无法分配连续大块显存引发 OOMexpandable_segments:True启用可扩展内存段允许 PyTorch 动态扩展内存块特别是在多卡训练、DeepSpeed、梯度检查点等场景下显存碎片化问题更严重PyTorch 2.0 强烈推荐启用可以避免 90% 的显存碎片化 OOM 问题使用 DeepSpeed ZeRO-3--deepspeed zero3启用梯度检查点--gradient_checkpointing true减小批次大小--per_device_train_batch_size 1 \--gradient_accumulation_steps 8使用 Liger Kernel--use_liger_kernel true降低最大长度--max_length 1024CPU Offload自定义 DeepSpeed 配置offload_optimizer: { device: cpu, pin_memory: true}Q2: 多卡训练速度慢加速方法增加每卡批次大小--per_device_train_batch_size 4 \--gradient_accumulation_steps 2使用 bf16 精度--torch_dtype bfloat16使用数据缓存--load_from_cache_file true \--dataset_num_proc 16优化 DeepSpeed 配置使用 ZeRO-2 而非 ZeRO-3如果显存足够启用通信优化overlap_comm: true安装 Flash Attentionpip install flash-attn --no-build-isolationQ3: GPU 利用率不均衡解决方案检查数据分布--dataset_shuffle true \--group_by_length true使用 DeepSpeed ZeRO-3自动平衡各卡负载检查 CUDA_VISIBLE_DEVICES确保指定的 GPU 都可用Q4: 训练效果不好调优建议增加数据量多卡可用更多数据--dataset AI-ModelScope/alpaca-gpt4-data-zh#5000增加训练轮数--num_train_epochs 5调整学习率--learning_rate 5e-5 \--warmup_ratio 0.1增大 LoRA rank多卡显存充足--lora_rank 64使用 DoRA--use_dora trueQ5: 如何断点续训swift sft \ --resume_from_checkpoint output/qwen3.5-4b-multi-2gpu/vx-xxx/checkpoint-200 \ 其他参数保持不变注意保持其他参数不变包括 GPU 数量和 DeepSpeed 配置会自动加载优化器状态和随机种子从上次的步数继续训练Q6: 如何合并 LoRA 权重swift export \ --adapters output/qwen3.5-4b-multi-2gpu/vx-xxx/checkpoint-200 \ --merge_lora true \ --output_dir output/qwen3.5-4b-mergedQ7: DeepSpeed 初始化失败常见原因和解决方案未安装 DeepSpeedpip install deepspeedCUDA 版本不兼容# 检查 CUDA 版本nvcc --version# 重新安装对应版本的 DeepSpeed环境变量问题export CUDA_HOME/usr/local/cudaexport PATH$CUDA_HOME/bin:$PATH训练监控TensorBoard# 安装pip install tensorboard# 启动tensorboard --logdir output/qwen3.5-4b-multi-2gpu# 浏览器打开http://localhost:6006SwanLabswift sft \ --report_to swanlab \ --swanlab_token your_token \ --swanlab_project qwen3.5-multi-gpu-training \ 其他参数性能参考Qwen3.5-4B LoRA 多卡训练性能GPU配置批次大小显存占用/卡训练速度2卡 ZeRO-22×4×216~16GB~200 samples/s4卡 ZeRO-22×4×432~14GB~400 samples/s8卡 ZeRO-24×2×864~12GB~800 samples/s4卡 ZeRO-31×8×432~10GB~350 samples/sDeepSpeed 优化效果配置显存节省速度影响适用场景ZeRO-230-40%基准2-8卡常规训练ZeRO-350-60%略慢 10-15%大模型或显存不足ZeRO-2 CPU Offload40-50%略慢 20%显存紧张ZeRO-3 CPU Offload60-70%略慢 30%超大模型参考资源官方文档: Qwen3.5 最佳实践DeepSpeed 文档: DeepSpeed 配置指南命令行参数: 完整参数文档自定义数据集: 数据集格式文档GitHub: ms-swift 仓库模型下载: ModelScope总结本教程专注于2卡分布式 LoRA 微调帮助你快速掌握 Qwen3.5 多卡训练流程✅环境准备: DeepSpeed 安装和配置✅数据准备: 支持文本、Agent 工具调用等数据格式✅2卡训练: 详细的 DeepSpeed ZeRO-2 配置和每个参数的详细解释✅完整示例: 可直接运行的2卡训练脚本✅推理部署: 命令行、Python API、Web 界面多种方式✅问题排查: 多卡训练常见问题解决方案和性能优化建议2卡训练核心要点必须设置 PYTORCH_CUDA_ALLOC_CONFexpandable_segments:True避免显存碎片化OOM必须安装 DeepSpeed使用 ZeRO-2优化器状态和梯度分片节省显存30-40%设置 NCCL_P2P_DISABLE1避免P2P通信问题有效批次大小 2 × 4 × 2 16per_device × accumulation × GPUs启用梯度检查点进一步降低显存占用参数调优建议显存充足per_device_train_batch_size4gradient_accumulation_steps2显存紧张per_device_train_batch_size1gradient_accumulation_steps8长文本降低max_length到 1024快速实验减少num_train_epochs到 1-2祝训练顺利这里给大家精心整理了一份全面的AI大模型学习资源包括AI大模型全套学习路线图从入门到实战、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等资料免费分享扫码免费领取全部内容1. 成长路线图学习规划要学习一门新的技术作为新手一定要先学习成长路线图方向不对努力白费。这里我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。可以说是最科学最系统的学习成长路线。2. 大模型经典PDF书籍书籍和学习文档资料是学习大模型过程中必不可少的我们精选了一系列深入探讨大模型技术的书籍和学习文档它们由领域内的顶尖专家撰写内容全面、深入、详尽为你学习大模型提供坚实的理论基础。书籍含电子版PDF3. 大模型视频教程对于很多自学或者没有基础的同学来说书籍这些纯文字类的学习教材会觉得比较晦涩难以理解因此我们提供了丰富的大模型视频教程以动态、形象的方式展示技术概念帮助你更快、更轻松地掌握核心知识。4. 2026行业报告行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估以了解哪些行业更适合引入大模型的技术和应用以及在哪些方面可以发挥大模型的优势。5. 大模型项目实战学以致用当你的理论知识积累到一定程度就需要通过项目实战在实际操作中检验和巩固你所学到的知识同时为你找工作和职业发展打下坚实的基础。6. 大模型面试题面试不仅是技术的较量更需要充分的准备。在你已经掌握了大模型技术之后就需要开始准备面试我们将提供精心整理的大模型面试题库涵盖当前面试中可能遇到的各种技术问题让你在面试中游刃有余。7. 资料领取全套内容免费抱走学 AI 不用再找第二份不管你是 0 基础想入门 AI 大模型还是有基础想冲刺大厂、了解行业趋势这份资料都能满足你现在只需按照提示操作就能免费领取扫码免费领取全部内容