新闻详情

新闻详情

首页 / 资讯中心 / 详情

在 PEFT 中使用 WaveFT:基于小波域的稀疏参数高效微调实战指南

发布时间:2026/9/20 17:08:32来源:尧图网络
在 PEFT 中使用 WaveFT:基于小波域的稀疏参数高效微调实战指南
人工智能大模型微调LoRA【免费下载链接】peft PEFT: State-of-the-art Parameter-Efficient Fine-Tuning.项目地址https://gitcode.com/gh_mirrors/pe/peft点击查看免费下载WaveFTWavelet Fine-Tuning是 PEFT 中一种基于小波变换的参数高效微调PEFT方法它不在权重域中学习低秩增量而是在残差矩阵的小波变换域中学习一组稀疏系数再通过逆离散小波变换IDWT把系数映射回权重域从而以远低于 LoRA 的参数预算获得高秩、高表达力的权重更新。本指南将以 examples/waveft_finetuning/README.md 为骨架完整讲解 WaveFT 的原理、WaveFTConfig的每一个可调参数、基于 transformers Trainer 的完整微调脚本以及模型的保存与加载流程并结合 src/peft/tuners/waveft/ 的源码说明其底层实现帮助你把它真正用到自己的因果语言模型微调任务中。WaveFT 是什么从小波域切入的稀疏 PEFTWaveFT 的核心思想最早由 Bilican 等人提出论文Exploring Sparsity for Parameter Efficient Fine Tuning Using WaveletsarXiv:2505.12532。它与主流 PEFT 方法的本质区别在于LoRA 的局限LoRA 把增量权重视为两个低秩矩阵的乘积ΔW BA因此表达力被秩这个离散超参数所约束。想要更强的表达力就要提高秩而提高秩又直接增加可训练参数量二者不可兼得。WaveFT 的思路对权重增量矩阵ΔW施加离散小波变换DWT在小波系数矩阵上只学习一个稀疏子集数量由n_frequency精确控制再通过逆离散小波变换IDWT重建出稠密的、可以远高于低秩约束的高秩ΔW。由于小波基的能量压缩特性少量系数即可重建出表达力很强的更新因而可以在极低参数量下取得好效果同时推理时不引入额外开销重建后的增量直接与基础权重相加。PEFT 官方文档 docs/source/package_reference/waveft.md 中的论文摘要佐证了这一设计目标WaveFT 允许对可训练参数进行精确控制在极低参数量可能远低于 LoRA 的最小秩下表现优异论文以 Stable Diffusion XL 个性化文本到图像生成为基准在低参数量区间显著优于 LoRA 等方法。从仓库源码来看WaveFT 目前在 PEFT 中有一个明确约束只支持torch.nn.Linear线性层nn.Linear与 transformers 的Conv1D亦可见下这与官方文档的说明一致。环境准备与依赖运行本文示例需要以下核心依赖peft本仓库源码安装方式见 README.md 与 setup.pytransformers、torchdatasets加载 IMDb 等数据集trl提供SFTConfig与SFTTrainer仅用于快速上手示例。仓库中的完整脚本 examples/waveft_finetuning/waveft_finetuning.py 则只依赖transformers的Trainer不依赖trl更适合在没有trl的环境中直接运行。快速上手用 WaveFT 微调一个因果语言模型先看 examples/waveft_finetuning/README.md 提供的 Quick start 代码。它演示了用trl的SFTTrainer在 IMDb 数据子集上微调facebook/opt-350m的完整流程import torch from peft import WaveFTConfig, get_peft_model from transformers import AutoTokenizer, AutoModelForCausalLM from trl import SFTConfig, SFTTrainer from datasets import load_dataset model AutoModelForCausalLM.from_pretrained(facebook/opt-350m, dtypetorch.bfloat16, device_mapauto) tokenizer AutoTokenizer.from_pretrained(facebook/opt-350m) dataset load_dataset(imdb, splittrain[:1%]) waveft_config WaveFTConfig( n_frequency2592, ) peft_model get_peft_model(model, waveft_config) training_args SFTConfig(dataset_text_fieldtext, max_length128) trainer SFTTrainer( modelpeft_model, train_datasetdataset, processing_classtokenizer, ) trainer.train() peft_model.save_pretrained(waveft-opt-350m)这段代码有四个要点WaveFTConfig只需设置一个核心参数n_frequency2592即可运行其余参数均使用默认值scaling25.0、wavelet_familydb1、use_idwtTrue等详见下文参数表get_peft_model(model, waveft_config)会把模型中匹配的线性层自动替换为WaveFTLinear由WaveFTModel完成见 model.py默认n_frequency2592是逐层分配的每一层被适配的线性层都拥有 2592 个可训练的小波系数save_pretrained只保存增量适配器基础模型权重不会被打包。为什么要用dtypetorch.bfloat16示例中显式传入了dtypetorch.bfloat16。WaveFT 层在反向传播时需要重建ΔW并与基础权重相加见下文前向与反向小节低精度加载bfloat16/fp16既能显著降低显存占用又不会损失 WaveFT 的数值稳定性。这也是 PEFT 微调脚本的常见做法。完整微调脚本命令行参数逐项解析examples/waveft_finetuning/waveft_finetuning.py 提供了可直接从命令行运行、不依赖trl的完整训练脚本。它的入口train()函数脚本第 30 行起把训练与 WaveFT 相关的全部配置都暴露为命令行参数其对应关系如下脚本参数类型默认值作用--base_modelstr必填基础模型名称或路径如facebook/opt-350m--data_pathstryahma/alpaca-cleaned数据集名称或路径--output_dirstrwaveft适配器与检查点输出目录--batch_sizeint16每设备训练 batch 大小--num_epochsint1训练轮数--learning_ratefloat3e-4学习率--cutoff_lenint256输入截断长度--val_set_sizeint16从训练集切出的验证样本数--eval_step/--save_stepint100评估 / 保存间隔步数--device_mapstrauto设备映射策略--waveft_n_frequencyint2592每层可学习小波系数数量--waveft_target_modulesstrNone待适配模块名逗号分隔或正则--waveft_scalingfloat25.0重建增量权重的缩放因子--waveft_wavelet_familystrdb1小波族如db1/sym2/coif1--waveft_use_idwtboolTrue是否使用 IDWT 重建权重--dtypestrfloat16模型加载精度--seedintNone随机种子运行方式与 README 一致python3 examples/waveft_finetuning/waveft_finetuning.py --base_model facebook/opt-350m在 CPU 上微调如果本机没有 GPU可以显式指定--device_map cpupython3 examples/waveft_finetuning/waveft_finetuning.py --base_model facebook/opt-350m --device_map cpuREADME 特别提醒--device_map cpu在启用分布式DDP场景下同样被脚本识别并据此调整设备映射见下文多卡分布式训练。注意 CPU 训练建议把--dtype调整为float32以保证数值精度。脚本内部的关键实现细节结合源码逐行看train()中有几个容易被忽略但对实战重要的细节DDP 环境自动检测脚本第 51-55 行通过环境变量WORLD_SIZE或PMI_SIZE判断是否多进程若world_size 1且未指定 CPU则把device_map设置为{: Accelerator().process_index}避免 DDP 下模型被重复加载到多张卡。Pad token 兜底脚本第 63-65 行对 LLaMA 等没有 pad token 的分词器自动用eos_token充当 pad token否则 DataCollator 无法做 padding。训练配置使用transformers.Trainer优化器为adamw_torcheval_strategysteps并设置ddp_find_unused_parametersFalse多卡时以加速 DDP数据侧用DataCollatorForSeq2Seq并按 8 的倍数 padding。指令数据组装脚本第 137-142 行默认数据集yahma/alpaca-cleaned按 Alpaca 模板### Instruction ... ### Response组装 prompt 后 tokenize。多卡分布式训练DDPREADME 建议使用 Hugging Face Accelerate 启动 DDP。先配置环境accelerate config # 按提示完成 DDP 配置再启动训练accelerate launch examples/waveft_finetuning/waveft_finetuning.py --base_model facebook/opt-350maccelerate config会生成包含num_processes、mixed_precision等项的 accelerate 配置accelerate launch会据此设置WORLD_SIZE等环境变量正好被脚本第 51 行的检测逻辑捕获从而自动切换到 DDP 设备映射模式。WaveFTConfig核心配置参数全解WaveFTConfig定义在 src/peft/tuners/waveft/config.py继承自PeftConfig。它对每一层被适配的线性层控制学习多少个小波系数、用什么小波族、如何重建与初始化。下表汇总了全部字段及默认值字段默认值含义与调参建议n_frequency2592每层学习的小波系数个数DWT 稀疏子集大小。必须是 0且 d_out * d_in的整数越大通常效果越好但显存占用增加训练速度影响较小scaling25.0重建ΔW的缩放因子等价于 LoRA 的lora_alpha是重要的调参超参数论文在 SDXL 个性化任务上的默认值是 25wavelet_familydb1小波族名称如db1Haar、sym2、coif1。滤波器长度不同训练耗时差异明显use_idwtTrue时尺寸差异自动处理use_idwtTrue是否用 IDWT 重建增量权重False时直接把系数填成稀疏ΔW更快但效果通常更差random_loc_seed777确定n_frequency个可学习系数在小波系数矩阵中随机位置的种子target_modulesNone要适配的模块名列表或正则如[q_proj, v_proj]或.*decoder.*(SelfAttention\|EncDecAttention).*(q\|v)$。当前仅支持线性层exclude_modulesNone要从适配中排除的模块名或正则fan_in_fan_outFalse被替换层权重是否为(fan_in, fan_out)存储格式Conv1D目标层会被自动置为Truebiasnone偏置策略none不加新偏置all对基础层与 WaveFT 组件都加偏置waveft_only仅对 WaveFT 组件加偏置modules_to_saveNone除 WaveFT 层外还需训练并保存的模块如分类头用于序列/词元分类等任务layers_to_transformNone指定要适配的层索引整数或列表若与正则形式的target_modules同时使用会报错layers_patternNone配合layers_to_transform使用的层名模式当模块列表名不是layers/h时使用必须与layers_to_transform同时指定n_frequency_pattern{}字典把特定层名/正则映射到专属n_frequency覆盖全局值例如{model.decoder.layers.0.encoder_attn.k_proj: 1000}proportional_parametersFalse为True时按每层d_in * d_out占比分配n_frequency每层至少 1 个系数。实验性选项主要用于复现论文结果init_weightsTrueTrue时系数初始化为 0False时按标准差 0.01 的正态分布随机初始化__post_init__config.py 第 242 行起会做几项校验list形式的target_modules/exclude_modules被转为set当target_modules是正则字符串时禁止同时使用layers_to_transform与layers_patternlayers_pattern必须与layers_to_transform成对出现wavelet_family必须存在于WAVELET_REDUCTIONS白名单中见 constants.py否则抛出ValueError并列出所有受支持的小波族。支持的 Wavelet 族WAVELET_REDUCTIONSconstants.py定义了每个小波族在二维小波分解/重建时的行列缩减量(rows, cols)用于 IDWT 前对系数矩阵做预填充保证重建后矩阵尺寸精确还原。仓库支持的族包括Daubechiesdbdb1即 Haar缩减量为 (0,0)到db38滤波器长度逐级增加Symletssymsym2到sym20Coifletscoifcoif1到coif17。滤波器越长如db38缩减量达 (74,74)重建精度与表达能力通常越好但计算耗时显著上升实际使用时建议从db1/sym2起步做实验。在任务类型配置上的一点说明示例 Quick start 没有显式传task_type而完整脚本传了task_typeCAUSAL_LM脚本第 98 行。task_type属于PeftConfig的通用字段用于指定任务类型如CAUSAL_LM、SEQ_CLS会决定get_peft_model是否需要额外处理分类头在没有分类头的纯因果 LM 场景下不传也完全可行。此外如果target_modules为NonePEFT 会依据 mapping.py 中维护的TRANSFORMERS_MODELS_TO_WAVEFT_TARGET_MODULES_MAPPING按模型架构自动选择默认目标模块。底层原理从系数到权重更新的三条路径理解 WaveFT 的实现有助于正确调参。核心逻辑集中在 src/peft/tuners/waveft/layer.py 的WaveFTLayer与WaveFTLinear中。1. 系数的分配与初始化update_layerlayer.py 第 68 行起在每层被适配时校验n_frequency必须为正且不超过d_out * d_in用random_loc_seed固定随机种子通过torch.randperm(d_out * d_in)[:n_frequency]采样出n_frequency个展平索引再转换为(row, col)坐标存入waveft_indices创建可训练参数waveft_spectruminit_weightsTrue时初始化为全 0reset_wave_parametersFalse时用标准差 0.01 的正态分布初始化防止训练初期爆炸。2. 增量权重的两种重建方式use_idwtget_delta_weightlayer.py 第 124 行起根据use_idwt走两条路径use_idwtTrue默认先把稀疏系数放入一个经过填充padding的稠密小波系数矩阵——填充量来自WAVELET_REDUCTIONS[wavelet_family]并保证行列数为偶数然后把矩阵按 2×2 分块拆成四个子带cA低频近似、cH、cV、cD三个高频细节构成(cA, (cH, cV, cD))元组交给waverec2d二维逆离散小波重建实现在 waverec2d.py小波滤波器定义在 wavelet.py重建出完整ΔW最后乘上scaling并居中裁剪回精确的(d_out, d_in)尺寸。这条路径能生成稠密高秩更新是 WaveFT 表达力的来源。use_idwtFalse跳过小波重建直接把系数按坐标填入零矩阵形成稀疏ΔW并乘上scaling。更快、显存更省但按源码注释与配置文档在个性化任务上效果更差。3. 前向与合并WaveFTLinear.forwardlayer.py 第 269 行起在未合并时先算基础层输出再对每个激活的 adapter 计算delta_w并执行F.linear(x, delta_w)累加merge/unmergelayer.py 第 218-267 行支持把ΔW直接写回基础权重safe_mergeTrue时会先复制权重并检查 NaN。这也是 WaveFT训练时只更新稀疏系数、推理时零额外开销的依据合并后前向与普通线性层完全相同。另外从 model.py 的_create_new_module可以看到目标层为nn.Linear且显式开启fan_in_fan_out时会发出警告并自动回退为False而Conv1D目标会自动置为True——这印证了当前仅支持线性层的约束。4. 按层差异化分配n_frequencyWaveFTModel._create_and_replacemodel.py 第 75 行起中n_frequency的取值优先级为proportional_parameters缓存值 → 直接传入的optional_kwargs→n_frequency_pattern中按层名匹配的专属值 → 全局n_frequency默认值。启用proportional_parameters时_calculate_proportional_parametersmodel.py 第 35 行起会遍历所有目标模块按d_in * d_out占比分配总预算并用max(1, round(...))保证每层至少分到 1 个系数避免小层被舍入到 0。这在某些层大、某些层小的异构模型上是值得尝试的实验选项。保存、加载与使用训练好的 WaveFT 模型训练完成后save_pretrained会把适配器含adapter_config.json与权重写入指定目录。加载方式与其他 PEFT 模型完全一致from peft import PeftModel from transformers import AutoTokenizer, AutoModelForCausalLM model AutoModelForCausalLM.from_pretrained(facebook/opt-350m) tokenizer AutoTokenizer.from_pretrained(facebook/opt-350m) waveft_model PeftModel.from_pretrained(model, waveft-opt-350m)要点基础模型必须一致加载适配器时传入的from_pretrained模型要与训练时相同架构、规模因为适配器只记录增量WaveFTConfig会被自动恢复adapter_config.json中持久化了n_frequency、scaling、wavelet_family、use_idwt、random_loc_seed等全部字段加载时无需手动重建配置系数位置由种子确定性重建由于waveft_indices由random_loc_seed确定性生成只要种子一致加载后重建的ΔW与训练时完全一致加载后即可直接用于推理如需零开销推理可调用merge_and_unload()把ΔW合并进基础权重对应WaveFTLinear.merge的源码路径。常见问题与调参建议n_frequency超过层尺寸配置校验会直接报错n_frequency d_out * d_in是硬约束。对于较小的层如 768×768 589824默认 2592 是安全的但若目标模块尺寸很小需要调低该值。不支持的wavelet_family配置校验会抛出ValueError并列出全部受支持族db1-db38、sym2-sym20、coif1-coif17对照 constants.py 检查拼写即可。模型报TypeError: Target module ... is not supported说明target_modules命中了非线性层如卷积层、LayerNormWaveFT 当前只支持nn.Linear及 transformers 的Conv1D请改用正则精确匹配线性层。训练效果差优先调整scaling类似 LoRA 的lora_alpha默认 25 可上下搜索再尝试更大的n_frequency或更长滤波器的小波族如sym4、coif2若追求速度且预算允许效果损失可试use_idwtFalse。显存紧张降低n_frequency、使用--dtype float16或 bfloat16加载、缩短cutoff_len、减小batch_size都是有效手段。多卡训练时模型重复加载请通过accelerate launch启动脚本会自动检测WORLD_SIZE并把device_map设为{: process_index}。小结WaveFT 为 PEFT 提供了不同于低秩分解的另一条路径在小波域学习稀疏系数、经 IDWT 重建高秩更新从而用更精细的粒度控制可训练参数量。本文以 examples/waveft_finetuning/README.md 为主线覆盖了从 Quick start、完整训练脚本、WaveFTConfig全参数解读到 layer.py 底层实现原理与保存加载流程的完整链路。你可以直接运行python3 examples/waveft_finetuning/waveft_finetuning.py --base_model facebook/opt-350m复现全文内容再结合本节调参建议针对自己的任务做实验。赞分享人工智能大模型微调LoRA【免费下载链接】peft PEFT: State-of-the-art Parameter-Efficient Fine-Tuning.项目地址https://gitcode.com/gh_mirrors/pe/peft点击查看免费下载相关推荐PEFT 中的 WaveFT基于小波域的稀疏参数高效微调全指南PEFT 中的 WaveFT基于小波域的稀疏参数高效微调全指南 WaveFTWavelet Fine Tuning是 PEFT 中一类独特的参数高效人工智能大模型微调LoRATimesFM 2.5 LoRA 参数高效微调实战基于 HuggingFace Transformers 与 PEFT 的完整指南TimesFM 2.5 LoRA 参数高效微调实战基于 HuggingFace Transformers 与 PEFT 的完整指南 本指南系统讲解如何在当前仓人工智能基础模型大模型时序预测微调claude-skills 微调实战LoRA、QLoRA 与参数高效微调PEFT完整指南claude skills 微调实战LoRA、QLoRA 与参数高效微调PEFT完整指南 在 claude skills 仓库中 fine tuningAI 技能AI 插件后端前端DevOps创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Android App首屏动画实战:替代开机动画的合规方案 2026/9/20 17:56:44

Android App首屏动画实战:替代开机动画的合规方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
光电子技术习题攻略:从物理图像到知识链的正确打开方式 2026/9/20 17:56:44

光电子技术习题攻略:从物理图像到知识链的正确打开方式

简介:《光电子技术安毓英习题答案(完整版)》是配套安毓英教材的习题解析文档,适合光电子技术课程的学生课后复习、考研备考及相关工程技术人员查证基本概念。资源为单个doc文件,全文约379KB,涵盖辐射照度计…

阅读更多 →
dup工具全解析:从文件描述符复制到重复文件清理 2026/9/20 17:56:44

dup工具全解析:从文件描述符复制到重复文件清理

简介:面向柯尼卡美能达打印机运维人员与信息技术管理员,这份文档详细介绍了驱动打包工具(DPU)的使用方法,用于解决多台设备间驱动快速部署与统一配置的问题。资源为单个PDF文件,约356KB,内容紧凑…

阅读更多 →
经典Lena测试图背后的故事:来源、版本与学术争议 2026/9/20 17:56:44

经典Lena测试图背后的故事:来源、版本与学术争议

做图像处理这行的人,不管你是搞传统算法还是折腾深度学习,几乎都在论文、教程或者开源demo里见过那张经典肖像:背景偏暗,人物戴着一顶带羽毛的帽子,肤色柔和,眼睛看向镜头。大家习惯叫她 Lena 图&#xff0…

阅读更多 →
蓝牙GFSK频谱全解析:从Classic BT到BLE各版本差异与调试 2026/9/20 17:56:44

蓝牙GFSK频谱全解析:从Classic BT到BLE各版本差异与调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
德勤93页PPT拆解:SRM采购平台建设从战略到落地 2026/9/20 17:53:44

德勤93页PPT拆解:SRM采购平台建设从战略到落地

简介:德勤SRM采购平台建设方案PPT,共93页,针对企业采购数字化转型与供应商关系管理平台规划需求,为采购管理者、IT架构师及咨询顾问提供整体建设蓝图。内容涵盖总体方案简介、SRM采购平台总体解决思路、关键解决思路与成功实施保障…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞