尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

SWIFT 模型导出与推送实战:LoRA 合并、AWQ/GPTQ/FP8/BNB 量化导出与 ModelScope/HuggingFace 推送

SWIFT 模型导出与推送实战:LoRA 合并、AWQ/GPTQ/FP8/BNB 量化导出与 ModelScope/HuggingFace 推送 SWIFT 模型导出与推送实战LoRA 合并、AWQ/GPTQ/FP8/BNB 量化导出与 ModelScope/HuggingFace 推送【免费下载链接】swiftUse PEFT or Full-parameter to CPT/SFT/DPO/GRPO 600 LLMs (Qwen3.6, DeepSeek-V4, GLM-5.1, InternLM3, Llama4, ...) and 300 MLLMs (Qwen3-VL, Qwen3-Omni, InternVL3.5, Ovis2.5, GLM4.5v, Gemma4, Llava, Phi4, ...) (AAAI 2025).项目地址: https://gitcode.com/GitHub_Trending/swift1/swiftSWIFT 训练完模型后通常还需要经过**导出Export与推送Push**两个环节才能真正落地到推理与生产中将 LoRA 适配器合并回基座权重、将模型量化到更小的体积以换取推理加速并把成品推送到 ModelScope 或 HuggingFace 模型仓库。本文以 SWIFT 官方指南 Export-and-push.md 为核心骨架结合仓库中 examples/export 目录下的真实脚本与 swift/cli/export.py 的入口实现系统讲解swift export的完整用法读完即可在自己的训练产物上完成合并 → 量化 → 推送的全流程。1. 总览swift export一条命令打通导出链路SWIFT 将模型导出能力统一收敛在swift export命令中。从源码入口看swift/cli/export.py 只有短短几行直接委托给swift.pipelines.export_main执行而 swift/pipelines/export 目录则承载了 LoRA 合并、量化、推送、Ollama 转换等具体实现。导出任务支持三大类能力与本文对应能力典型参数说明LoRA 合并--merge_lora true将 LoRA 权重合并回基座模型产出可直接推理的全量权重量化导出--quant_method awq\|gptq\|gptq_v2\|fp8\|bnb支持 AWQ、GPTQ、GPTQ v2、FP8、BNB 五种量化方案模型推送--push_to_hub true将训练或量化产物推送到 ModelScope / HuggingFace这三类能力既可以独立使用也可以组合串联例如先合并 LoRA、再量化、最后推送。下面按指南的章节顺序逐一展开。2. Merge LoRA把训练成果合并回基座权重2.1 为什么需要合并使用 LoRA 等 PEFT 方法训练后checkpoint 目录里保存的是增量适配器权重adapter weights而不是完整模型权重。这样的产物在 SWIFT 生态内可以直接配合--adapters继续训练或推理但若想获得一份独立、完整、便于部署或二次分发的模型就需要把 LoRA 权重与基座模型合并。2.2 最小合并命令仓库中 examples/export/merge_lora.sh 给出了最简用法# Since output/vx-xxx/checkpoint-xxx is trained by swift and contains an args.json file, # there is no need to explicitly set --model, --system, etc., as they will be automatically read. swift export \ --adapters output/vx-xxx/checkpoint-xxx \ --merge_lora true关键点--adapters指定 checkpoint 目录SWIFT 训练产物目录中包含args.json记录了训练时的模型路径、模板、系统提示词等全部参数因此无需再显式传--model、--system等参数导出时会被自动读取。指南中特别强调--model checkpoint-dir与--adapters checkpoint-dir两种写法在导出/推送场景下没有差异均可用于指定待处理的 checkpoint。--merge_lora true触发合并默认输出到当前目录的xxx-merged目录如需指定输出位置可加--output_dir。合并产物是完整全量权重可直接用于后续的量化、推送、vLLM/SGLang/LMDeploy 部署等下游环节。从源码结构看合并逻辑由 swift/pipelines/export 下的 pipeline 实现入口统一为swift export与量化、推送共用同一套参数解析框架因此下面各节的所有参数都可以自由组合。3. 量化导出五种方案选型与实操3.1 方案对比与选型SWIFT 支持 AWQ、GPTQ、FP8、BNB 四种方向的量化导出。指南中给出了一张关键的能力对比表量化技术多模态推理加速继续训练FP8✅✅✅GPTQ✅✅✅AWQ✅✅✅BNB❌✅✅选型要点依据指南原意整理AWQ / GPTQ含 GPTQ v2需要校准数据集量化精度较好但量化耗时较长FP8 / BNB无需校准数据集量化耗时较短其中 BNB 在 SWIFT 的量化导出链路中不支持多模态模型表格中标记 ❌仅用于 LLM。需要说明的是上表中的推理加速与继续训练指的是量化导出后的模型在 SWIFT 生态中的可用性量化后的模型支持用 vLLM / SGLang / LMDeploy 做推理加速也支持用 QLoRA 继续做 SFT / RLHF 训练。3.2 安装额外依赖除 SWIFT 本体外不同量化方案需要各自的第三方库按需安装指南原文# 使用awq量化: # autoawq和cuda版本有对应关系请按照https://github.com/casper-hansen/AutoAWQ选择版本 # 如果出现torch依赖冲突请额外增加指令--no-deps pip install autoawq -U # 使用gptq量化: pip install gptqmodel optimum -U # 使用gptq v2量化: pip install gptqmodel optimum -U # 使用bnb量化 pip install bitsandbytes -U注意事项autoawq与 CUDA 版本存在对应关系安装前需按其官方说明选择匹配版本若出现 torch 依赖冲突可在安装命令后追加--no-depsGPTQ 与 GPTQ v2 依赖相同均基于gptqmodel二者通过--quant_method gptq_v2区分FP8 量化无需额外安装第三方量化库直接使用 transformers 生态能力。3.3 AWQ 量化实操examples/export/quantize/awq.sh 展示了 AWQ 的标准用法pip install transformers4.52 CUDA_VISIBLE_DEVICES0 \ swift export \ --model Qwen/Qwen2.5-72B-Instruct \ --dataset AI-ModelScope/alpaca-gpt4-data-zh#500 \ AI-ModelScope/alpaca-gpt4-data-en#500 \ --device_map cpu \ --quant_n_samples 256 \ --quant_batch_size 1 \ --max_length 2048 \ --quant_method awq \ --quant_bits 4 \ --output_dir Qwen2.5-72B-Instruct-AWQ参数要点--quant_method awq--quant_bits 4指定 AWQ 4bit 量化--dataset校准数据集#500表示取前 500 条样本AWQ 依赖校准数据估计激活分布所以必须提供--quant_n_samples 256校准采样条数--quant_batch_size 1校准批大小--max_length 2048校准时的最大序列长度--device_map cpu将模型权重加载到 CPU 上做量化适合显存有限的大模型场景AWQ 通常需要较多内存/显存做校准--output_dir指定量化产物输出目录。3.4 GPTQ 与 GPTQ v2 量化实操examples/export/quantize/gptq.sh# OMP_NUM_THREADS14 please Check issue: https://github.com/AutoGPTQ/AutoGPTQ/issues/439 OMP_NUM_THREADS14 \ CUDA_VISIBLE_DEVICES0 \ swift export \ --model Qwen/Qwen2.5-1.5B-Instruct \ --dataset AI-ModelScope/alpaca-gpt4-data-zh#500 \ AI-ModelScope/alpaca-gpt4-data-en#500 \ --quant_n_samples 256 \ --quant_batch_size 1 \ --max_length 2048 \ --quant_method gptq \ --quant_bits 4 \ --output_dir Qwen2.5-1.5B-Instruct-GPTQ-Int4examples/export/quantize/gptq_v2.sh 与 GPTQ 用法几乎一致仅将--quant_method改为gptq_v2且需要已安装gptqmodel# You need to install gptqmodel. OMP_NUM_THREADS14 \ CUDA_VISIBLE_DEVICES0 \ swift export \ --model Qwen/Qwen2.5-1.5B-Instruct \ --dataset AI-ModelScope/alpaca-gpt4-data-zh#500 \ AI-ModelScope/alpaca-gpt4-data-en#500 \ --quant_n_samples 256 \ --quant_batch_size 1 \ --max_length 2048 \ --quant_method gptq_v2 \ --quant_bits 4 \ --output_dir Qwen2.5-1.5B-Instruct-GPTQ-V2-Int4注意脚本中设置了OMP_NUM_THREADS14这是为了规避 AutoGPTQ 相关库在特定环境下的线程问题脚本注释中给出了 issue 编号在多卡或高并发环境出现量化异常时调整该环境变量是一个有效手段。3.5 FP8 量化实操examples/export/quantize/fp8.shCUDA_VISIBLE_DEVICES0 \ swift export \ --model Qwen/Qwen2.5-3B-Instruct \ --quant_method fp8 \ --output_dir Qwen2.5-3B-Instruct-FP8FP8 方案无需校准数据集命令最简洁。脚本注释中给出了一条重要提示由于transformers5.0对 MoE 架构做了结构性调整若需要对 MoE 模型做 FP8 量化并兼容 vLLM 推理请改用 Megatron 导出链路参考 examples/megatron/fp8 目录下的 quant 脚本。3.6 BNB 量化实操examples/export/quantize/bnb.shCUDA_VISIBLE_DEVICES0 \ swift export \ --model Qwen/Qwen2.5-1.5B-Instruct \ --quant_method bnb \ --quant_bits 4 \ --bnb_4bit_quant_type nf4 \ --bnb_4bit_use_double_quant true \ --output_dir Qwen2.5-1.5B-Instruct-BNB-NF4BNB 与 FP8 一样无需校准数据集。可配置项包括--bnb_4bit_quant_type nf44bit 量化类型可选 NF4 或 FP4--bnb_4bit_use_double_quant true启用 double quantization对量化常数再做一次量化进一步省显存--quant_bits 4量化位数。3.7 进阶场景多模态、MoE、Bert、Reward Model指南指出SWIFT 的量化导出不止覆盖普通 LLM还扩展到了多模态、MoE、Bert 与 Reward Model 等系列模型仓库 examples/export/quantize 目录下有对应脚本多模态模型MLLM支持 GPTQ 与 AWQ 量化。AWQ 对多模态模型的支持范围有限推荐优先使用 GPTQ。参考脚本 examples/export/quantize/mllm/gptq.sh、examples/export/quantize/mllm/awq.sh、examples/export/quantize/mllm/fp8.sh、examples/export/quantize/mllm/bnb.sh。以 mllm/awq.sh 为例多模态 AWQ 除了--quant_method awq与文本校准数据外还需要图像/视频校准数据pip install transformers4.51.* CUDA_VISIBLE_DEVICES0 \ MAX_PIXELS1003520 \ VIDEO_MAX_PIXELS50176 \ FPS_MAX_FRAMES12 \ swift export \ --model Qwen/Qwen2.5-VL-3B-Instruct \ --dataset AI-ModelScope/alpaca-gpt4-data-zh#500 \ AI-ModelScope/alpaca-gpt4-data-en#500 \ modelscope/coco_2014_caption:validation#500 \ swift/VideoChatGPT:Generic#500 \ --quant_n_samples 256 \ --quant_batch_size -1 \ --max_length 2048 \ --quant_method awq \ --quant_bits 4 \ --output_dir Qwen2.5-VL-3B-Instruct-AWQ可见多模态量化时可通过环境变量MAX_PIXELS、VIDEO_MAX_PIXELS、FPS_MAX_FRAMES控制图像/视频的预处理分辨率--quant_batch_size也可设为-1以配合多模态样本的实际尺寸。MoE 架构参考 examples/export/quantize/moe 下的 awq/bnb/fp8/gptq 脚本Bert 系列参考 examples/export/quantize/bert/gptq.sh。该脚本还演示了先合并 LoRA → 再 GPTQ 量化 → 最后推理验证的完整串联流程# merge-lora CUDA_VISIBLE_DEVICES0 swift export \ --adapters swift/test_bert \ --output_dir output/swift_test_bert_merged \ --merge_lora true EXIT_CODE$? if [ $EXIT_CODE -ne 0 ]; then echo Error: LoRA merge failed with exit code $EXIT_CODE exit $EXIT_CODE fi # gptq quantize CUDA_VISIBLE_DEVICES0 swift export \ --model output/swift_test_bert_merged \ --load_data_args true \ --output_dir output/swift_test_bert_gptq_int4 \ --quant_bits 4 \ --quant_method gptq \ --max_length 512 EXIT_CODE$? if [ $EXIT_CODE -ne 0 ]; then echo Error: GPTQ quantization failed with exit code $EXIT_CODE exit $EXIT_CODE fi # infer CUDA_VISIBLE_DEVICES0 swift infer \ --model output/swift_test_bert_gptq_int4注意其中的--load_data_args true当从训练产物目录合并后的output/swift_test_bert_merged继续量化时可通过该参数复用训练时的数据集配置避免重复指定--dataset。Reward Model参考 examples/export/quantize/reward_model 下的 bnb/gptq 脚本Omni 全模态模型参考 examples/export/quantize/omni/gptq.sh。3.8 量化产物的下游使用指南明确说明使用 SWIFT 量化导出的模型支持使用vLLM / SGLang / LMDeploy进行推理加速对应 examples/infer 下的 vllm/sglang/lmdeploy 脚本使用QLoRA继续进行 SFT / RLHF 训练对应 examples/train/qlora 目录。4. 推送模型发布到 ModelScope / HuggingFace4.1 基本用法SWIFT 支持将训练或量化得到的模型重新推送到ModelScope / HuggingFace默认推送到 ModelScope可通过--use_hf true切换为 HuggingFace。仓库 examples/export/push_to_hub.sh 给出了与指南一致的完整示例swift export \ --adapters output/vx-xxx/checkpoint-xxx \ --push_to_hub true \ --hub_model_id model-id \ --hub_token sdk-token \ --use_hf false参数说明--push_to_hub true开启推送--model checkpoint-dir或--adapters checkpoint-dir指定待推送的 checkpoint 目录两种写法在推送场景下没有差异会读取其中的args.json--hub_model_id model-id目标模型仓库 ID如organization/model-name--hub_token sdk-tokenSDK Token用于鉴权--use_hf false推送到 ModelScope设为true则推送到 HuggingFace。4.2 推送前的小贴士指南给出了三条关键注意事项账号与 Token推送到 ModelScope 前需注册魔搭账号SDK Token 可在魔搭平台的个人访问令牌页面获取编辑权限推送模型的账号需具备hub_model_id对应组织的编辑权限若 model_id 不带组织名则为个人账号权限自动建仓若对应 model_id 的模型仓库不存在推送时会自动创建可使用--hub_private_repo true将自动创建的仓库设为私有。5. 导出链路源码速览从实现层面看swift export的入口在 swift/cli/export.py其核心逻辑集中在 swift/pipelines/export 目录涵盖 LoRA 合并、量化、推送、Ollama 转换等子流程命令行参数定义在 swift/arguments/export_args.py。这意味着所有导出相关的参数--merge_lora、--quant_method、--push_to_hub等由统一的参数体系管理可以任意组合checkpoint 目录中的args.json是打通训练 → 导出的关键训练时的模型、模板、数据集配置会自动回填这也是为什么合并/推送时可以只传--adapters而不必重复传--model。若需要将量化/合并后的模型再转换为其他部署格式仓库还提供了 examples/export/ollama.shOllama 格式导出等扩展脚本可作为导出链路的补充参考。6. 实践建议小结先合并再量化带 LoRA 的 checkpoint 需先--merge_lora true合并得到完整权重后再走量化或推送参考 examples/export/quantize/bert/gptq.sh 的串联写法按需选择量化方案追求精度且接受耗时用 AWQ/GPTQ记得准备校准数据集追求速度用 FP8/BNB免校准多模态量化优先考虑 GPTQ注意 AWQ 对多模态支持有限MoE FP8 注意 transformers 版本transformers5.0下对 MoE 做 FP8 请走 Megatron 导出链路推送前检查权限确保 SDK Token 对应账号具备目标组织的编辑权限私有模型加--hub_private_repo true下游无缝衔接量化产物可直接交给 vLLM/SGLang/LMDeploy 推理或通过 QLoRA 继续 SFT/RLHF形成导出 → 部署/继续训练的完整闭环。【免费下载链接】swiftUse PEFT or Full-parameter to CPT/SFT/DPO/GRPO 600 LLMs (Qwen3.6, DeepSeek-V4, GLM-5.1, InternLM3, Llama4, ...) and 300 MLLMs (Qwen3-VL, Qwen3-Omni, InternVL3.5, Ovis2.5, GLM4.5v, Gemma4, Llava, Phi4, ...) (AAAI 2025).项目地址: https://gitcode.com/GitHub_Trending/swift1/swift创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表