恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
Diffusers 中的 HeliosDMDScheduler:Helios-Distilled 蒸馏视频模型的流匹配采样调度器全解析
首页
资讯中心
/
Diffusers 中的 HeliosDMDScheduler:Helios-Distilled 蒸馏视频模型的流匹配采样调度器全解析
Diffusers 中的 HeliosDMDScheduler:Helios-Distilled 蒸馏视频模型的流匹配采样调度器全解析
发布时间:2026/9/11 17:58:20
Diffusers 中的 HeliosDMDSchedulerHelios-Distilled 蒸馏视频模型的流匹配采样调度器全解析【免费下载链接】diffusers Diffusers: State-of-the-art diffusion models for image, video, and audio generation in PyTorch.项目地址: https://gitcode.com/GitHub_Trending/di/diffusersHeliosDMDScheduler 是 Hugging Face Diffusers 为 Helios 蒸馏版视频生成模型Helios-Distilled专门实现的调度器它基于 Helios 论文中提出的金字塔式流匹配采样pyramidal flow-matching sampling与 DMD 蒸馏采样策略将去噪步数压缩到每级 2 步左右即可生成分钟级长视频。本文结合仓库源码 scheduling_helios_dmd.py 与 pipeline_helios_pyramid.py完整讲解该调度器的配置参数、初始化原理、采样步进逻辑以及它与普通 HeliosScheduler 的差异帮助你在实战中正确选用并调参。一、HeliosDMDScheduler 是什么在 Diffusers 官方文档 helios_dmd.md 中HeliosDMDScheduler被定义为基于 Helios 论文引入的金字塔式流匹配采样pyramidal flow-matching sampling实现的调度器。它是 Helios 三档模型体系中效率最优一档的核心组件Helios 模型预测方式采样方式使用的调度器Helios-Basev-prediction标准 CFGHeliosSchedulerHelios-Midv-predictionCFG-Zero*HeliosSchedulerHelios-Distilledx0-predictionDMD 蒸馏采样HeliosDMDScheduler从 pipelines/helios.md 的官方说明可以看到Helios-Distilled 主打Best Efficiency最高效率配合HeliosPyramidPipeline与pyramid_num_inference_steps_list[2, 2, 2]即可完成文本/图像/视频到视频的分钟级生成。而 HeliosDMDScheduler 正是支撑这种极低步数采样的底层引擎。在源码中HeliosDMDScheduler位于 scheduling_helios_dmd.py继承自SchedulerMixin与ConfigMixin与普通 HeliosScheduler 是同源兄弟类——两者的核心区别在于采样步进方式HeliosScheduler 提供 Euler/UniPC 求解器而 HeliosDMDScheduler 面向蒸馏模型采用一步预测 x0 加噪回跳的 DMD 风格循环。二、构造函数与全部配置参数HeliosDMDScheduler.__init__源码 L39-L67通过register_to_config将全部参数固化到config中既支持from_pretrained从模型仓库加载也支持直接实例化from diffusers import HeliosDMDScheduler scheduler HeliosDMDScheduler( num_train_timesteps1000, # 训练噪声步数 shift1.0, # 时间偏移系数默认 1.0 表示不偏移 stages3, # 金字塔阶段数 stage_range[0, 1/3, 2/3, 1], # 每个阶段的归一化时间范围 gamma1/3, # 级间重加噪renoise强度 prediction_typeflow_prediction, # 模型输出类型 use_flow_sigmasTrue, # 使用 flow-matching 的 sigma 定义 use_dynamic_shiftingFalse, # 是否按序列长度动态偏移 time_shift_typelinear, # 偏移公式类型exponential / linear )各参数的实际作用如下均可在源码中得到印证参数默认值作用说明num_train_timesteps1000训练阶段的总离散步数用于将连续时间归一化到 0~1000 的 timestep 空间shift1.0时间偏移系数遵循 Stable Diffusion 3 的做法1.0表示关闭静态偏移stages3金字塔阶段数对应pyramid_num_inference_steps_list的长度stage_range[0, 1/3, 2/3, 1]各阶段在总时间轴上的占比边界长度必须为stages 1gamma1/3阶段切换时重加噪的强度系数同时被金字塔噪声协方差矩阵使用prediction_typeflow_prediction模型输出类型蒸馏模型输出的是流velocity场采样前需转换为 x0use_flow_sigmasTrue使用 flow-matching 约定alpha_t 1 - sigmause_dynamic_shiftingFalse是否根据序列长度动态计算偏移与shift互斥源码中以assert强制time_shift_typelinear动态/静态偏移使用的公式类型exponential或linear2.1 需要特别留意的约束源码在 set_timesteps 中设置了两个硬性约束use_dynamic_shiftingTrue时强制shift 1.0assert self.config.shift 1.0反之shift ! 1.0时不允许开启动态偏移金字塔模式下stages 1set_timesteps必须显式传入stage_index否则无法从timesteps_per_stage取到对应阶段的时刻序列。三、金字塔式流匹配分阶段的时间与 sigma 组织HeliosDMDScheduler 的核心创新在于金字塔式pyramidal多阶段采样长视频不是一次性在全分辨率下生成而是先在低分辨率下粗采样再逐级上采样细化。调度器通过init_sigmas_for_each_stage源码 L87-L145为每一级准备独立的 timesteps 与 sigmas。3.1 全局 sigma 初始化init_sigmas源码 L69-L85构建全局噪声调度在[1, 1/num_train_timesteps]上线性取alphas得到sigmas 1 - alphas应用 SD3 风格的偏移变换flip(shift * sigmas / (1 (shift - 1) * sigmas))当shift1时该变换退化为恒等timesteps sigmas * num_train_timesteps将 sigma 映射回 0~1000 的离散空间。3.2 每阶段的起止点与比例init_sigmas_for_each_stage以stage_range为边界为每个阶段计算原始起点 sigmaori_start_sigmas[i_s]阶段i_s起始处的全局 sigma修正起点 sigmastart_sigmas[i_s]对非首阶段使用公式corrected_sigma (1 / (sqrt(1 1/gamma) * (1 - ori_sigma) ori_sigma)) * ori_sigma修正——该修正保证阶段切换时信号与噪声的混合比例与gamma一致避免接缝伪影终点 sigmaend_sigmas[i_s]阶段结束处的 sigma末阶段为 0。随后按流动长度stage_distance start_sigma - end_sigma加权分配各阶段的时间比例timestep_ratios最终用np.linspace生成每阶段的离散timesteps_per_stage与统一从 0.999 到 0 的sigmas_per_stage。3.3 set_timesteps按阶段切分推理步数set_timesteps源码 L174-L233负责在推理前为当前阶段构建 timestep 序列。蒸馏模式下它做了一次步数扩增if is_amplify_first_chunk: num_inference_steps num_inference_steps * 2 1 else: num_inference_steps num_inference_steps 1即首块放大时步数翻倍再加 1普通块在用户指定步数上加 1多出的步用于预热。随后stages 1走单阶段路径直接从 1 到1/num_train_timesteps线性铺 sigma必要时施加静态time_shiftstages 1从timesteps_per_stage[stage_index]与sigmas_per_stage[stage_index]中按num_inference_steps均匀抽点末尾补一个 0 sigmatorch.cat([sigmas, torch.zeros(1)])再裁剪掉多余元素保证step()中能取到下一步 sigmause_dynamic_shiftingTrue时用mu参数对整个序列做动态偏移。time_shift的两种实现源码 L236-L263与 FlowMatchEulerDiscreteScheduler 一致指数型exp(mu) / (exp(mu) (1/t - 1)^sigma)线性型mu / (mu (1/t - 1)^sigma)四、DMD 采样步进一步 x0 预测 加噪回跳DMDDistribution Matching Distillation蒸馏的核心思想是用训练好的教师模型蒸馏出的学生模型能够在极少的步数内直接预测干净的 x0再按调度重新加噪回跳到下一步。HeliosDMDScheduler 的step源码 L285-L324完整实现了这一范式。4.1 convert_flow_pred_to_x0流预测转干净样本蒸馏模型输出的是 velocity流场需要转换成 x0 预测。convert_flow_pred_to_x0源码 L274-L283先把所有张量提升到double精度计算再通过 argmin 找到当前 timestep 对应的 sigmatimestep_id torch.argmin((timesteps.unsqueeze(0) - timestep.unsqueeze(1)).abs(), dim1) sigma_t sigmas[timestep_id].reshape(-1, 1, 1, 1, 1) x0_pred xt - sigma_t * flow_pred这是 flow-matching 中x_t (1 - sigma_t) * x0 sigma_t * noise的逆向推导得到x0_pred后即视为已经生成的干净视频帧。4.2 add_noise向 x0 回跳加噪add_noise源码 L266-L272将预测出的 x0 与噪声按目标时刻的 sigma 线性混合sample (1 - sigma) * original_samples sigma * noise其中噪声张量dmd_noisy_tensor由 pipeline 传入——它正是金字塔阶段起始点start_point_list[stage_idx]的原始噪声 latent。4.3 step 主循环step的整体逻辑为源码 L285-L324用convert_flow_pred_to_x0把模型输出转成pred_image_or_video若cur_sampling_step len(all_timesteps) - 1即还有下一步把pred_image_or_video与dmd_noisy_tensor按下一步 timestep 的 sigma 混合得到prev_sample最后一步则直接使用pred_image_or_video作为最终样本默认返回HeliosDMDSchedulerOutput(prev_sample...)其中还预留了model_outputs、last_sample、this_order三个可空字段与 HeliosSchedulerOutput 保持一致的接口形态。从该步进逻辑可以看出每一步本质上只调用一次 transformer 前向配合蒸馏后2 步/级 × 3 级 6 步的配置这就是 Helios-Distilled 能实现近实时推理的关键。五、与 HeliosPyramidPipeline 的协作调用链全解HeliosDMDScheduler不是独立使用的组件它通过HeliosPyramidPipelinepipeline_helios_pyramid.py被驱动。pipeline 构造函数接受scheduler: HeliosScheduler | HeliosDMDScheduler并通过is_distilled配置位区分是否走蒸馏路径。5.1 蒸馏路径的专属参数HeliosPyramidPipeline.__call__中与 DMD 调度相关的参数包括参数默认值说明pyramid_num_inference_steps_list[10, 10, 10]每级金字塔的推理步数蒸馏模型建议[2, 2, 2]is_amplify_first_chunkFalse是否对首个 chunk 放大步数与引导强度蒸馏专用guidance_scale5.0蒸馏模型下应设为1.0无 CFGhistory_sizes[16, 2, 1]自回归 chunk 生成的上下文窗口大小num_latent_frames_per_chunk9每个 chunk 产生的 latent 帧数5.2 蒸馏模式的调度调用链在 pipeline 的去噪主循环源码 L929-L1072中蒸馏路径的关键步骤为对每个金字塔阶段调用self.scheduler.set_timesteps(steps, stage_idx, device, mumu, is_amplify_first_chunk...)其中mu由 calculate_shift 依据 latent 序列长度动态计算阶段切换时stage_idx 0执行上采样与级间重加噪latents alpha * latents beta * noise源码 L971-L988其中alpha、beta由gamma与ori_start_sigmas推导噪声noise来自sample_block_noise源码 L443-L482——该函数按patch_size(1,2,2)构建块相关协方差矩阵cov eye*(1gamma) - ones*gamma并用 Cholesky 分解采样用于修复块状伪影若self.config.is_distilled将每级起始点 latents 存入start_point_list供 DMD 回跳使用蒸馏模型不执行 CFGguidance_scale1.0时do_classifier_free_guidanceFalse直接调用self.scheduler.step(noise_pred, t, latents, cur_sampling_stepi, dmd_noisy_tensorstart_point_list[stage_idx], dmd_sigmasself.scheduler.sigmas, dmd_timestepsself.scheduler.timesteps, all_timestepstimesteps)源码 L1051-L1072。从模块化管线定义 modular_blocks_helios_pyramid_distilled.py 中的描述也可以看到蒸馏版去噪块被明确定义为T2V/I2V/V2V distilled pyramid denoise block with DMD scheduler and no CFG使用 DMD 调度器且无 CFG与源码行为完全吻合。5.3 官方推荐用法Helios-Distilled 文生视频以下代码取自 pipelines/helios.md 的 Distilled 示例精简了提示词import torch from diffusers import AutoModel, HeliosPyramidPipeline from diffusers.utils import export_to_video vae AutoModel.from_pretrained(BestWishYsh/Helios-Distilled, subfoldervae, dtypetorch.float32) pipeline HeliosPyramidPipeline.from_pretrained( BestWishYsh/Helios-Distilled, vaevae, dtypetorch.bfloat16, ) pipeline.to(cuda) # or mps, xpu, cpu output pipeline( promptA vibrant tropical fish swimming gracefully among colorful coral reefs in a clear, turquoise ocean..., negative_promptBright tones, overexposed, static, blurred details, ..., num_frames240, pyramid_num_inference_steps_list[2, 2, 2], guidance_scale1.0, is_amplify_first_chunkTrue, generatortorch.Generator(cuda).manual_seed(42), ).frames[0] export_to_video(output, helios_distilled_t2v_output.mp4, fps24)要点guidance_scale1.0蒸馏模型不使用 CFG若传入大于 1 的值pipeline 会打印警告Guidance scale ... is ignored for step-wise distilled models见 check_inputsis_amplify_first_chunkTrue触发首块步数放大set_timesteps中steps*21首块总步数为sum([2,2,2])*2 12之后每块 6 步num_frames240可生成约 10 秒24fps的分钟级长视频官方还提供了图像到视频传入image与视频到视频传入video的等价用法。六、进阶调参指南与注意事项6.1 推理步数如何影响质量与速度蒸馏模型对步数非常敏感官方推荐[2, 2, 2]若追求更高画质可尝试[4, 4, 4]但会线性增加推理时间非蒸馏的 Helios-Mid/Base 应使用HeliosScheduler步数推荐[20, 20, 20]Mid或单阶段 50 步Base不要把HeliosDMDScheduler用到未蒸馏模型上——其一步 x0 回跳假设依赖蒸馏训练目标。6.2 gamma 与阶段衔接gamma同时影响级间重加噪alpha/beta计算与sample_block_noise的协方差结构默认1/3是论文实验的均衡值若生成视频在阶段切换处出现闪烁或块状伪影优先检查gamma是否被意外修改以及stage_range是否仍保持[0, 1/3, 2/3, 1]的等分结构。6.3 关于输出类型与后处理蒸馏模型默认输出 x0 预测因此 pipeline 最后一步直接得到干净 latent再经AutoencoderKLWan解码源码 L1102-L1121若只需 latent如二次编辑可设置output_typelatent此时返回real_history_latents而非解码后的视频。6.4 复现性建议使用generatortorch.Generator(cuda).manual_seed(42)固定随机种子sample_block_noise源码注释明确提示必须提供 generator 以保证结果可复现源码 L453-L461。七、与其他调度器的关系与取舍与HeliosScheduler的关系两者共享同一套分阶段金字塔时间组织逻辑init_sigmas_for_each_stage等代码高度同构差异仅在采样步进——HeliosScheduler 提供 Euler/UniPC 多步求解器scheduling_helios.pyHeliosDMDScheduler 提供 DMD 一步回跳与FlowMatchEulerDiscreteScheduler的关系time_shift系列方法直接从 FlowMatchEulerDiscreteScheduler 复制源码注释# Copied from ...印证了 Helios 流匹配调度与 SD3/FLUX 家族同源与 UniPC/Euler 的取舍追求最高质量用 Helios-Base 标准 CFG平衡质量与速度用 Helios-Mid CFG-Zero*追求实时效率用 Helios-Distilled HeliosDMDScheduler三档模型在 pipelines/helios.md 中有完整对照。结语HeliosDMDScheduler 是 Diffusers 中为数不多的、面向蒸馏视频模型的流匹配调度器实现。它通过金字塔分阶段 DMD 一步 x0 回跳 级间块相关重加噪三件套把原本需要数十步的去噪过程压缩到个位数步数同时通过gamma修正与协方差噪声消除级间接缝伪影。理解 scheduling_helios_dmd.py 的源码结构能帮助你在使用 Helios-Distilled 时准确设置pyramid_num_inference_steps_list、is_amplify_first_chunk等关键参数并为类似蒸馏视频模型的调度器设计提供参考。【免费下载链接】diffusers Diffusers: State-of-the-art diffusion models for image, video, and audio generation in PyTorch.项目地址: https://gitcode.com/GitHub_Trending/di/diffusers创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考