
【免费下载链接】PiD[NeurIPS 2026] PiD: Fast and High-Resolution Latent Decoding with Pixel Diffusion项目地址https://gitcode.com/gh_mirrors/pid18/PiD点击查看免费下载PiD 是一个基于像素扩散Pixel Diffusion的高分辨率潜空间解码项目NeurIPS 2026其训练入口并不使用常见的「YAML 目录 hydra.main」写法而是由attrs类型化配置容器、Hydra ConfigStore配置组注册与合成和LazyCall延迟实例化三件套驱动的 Python 配置系统。本文面向新手解析 PiD 配置系统源码带你完整走通一条命令行如何选中实验、合并配置组并最终实例化模型与 dataloader 启动训练的全流程。 角色分工谁负责哪一步理解 PiD 配置系统前先记住一句话attrs 定义「配置长什么样」Hydra 负责「配置怎么拼」LazyCall 决定「对象什么时候建」。组件源码位置职责attrspid/_ext/imaginaire/config.py定义带类型与默认值的根配置Configtrainer / optimizer / checkpoint 等子配置HydraConfigStorepid/_src/configs/ 下各register_*()函数注册「配置组 → 选项」如net → pixeldit_h1536_d14p2compose()OmegaConfpid/_ext/imaginaire/utils/config_helper.py按defaults与命令行 override 合成最终配置解析${...}插值LazyCallLpid/_ext/imaginaire/lazy_config/lazy.py只记录构造函数和参数训练启动时才真正instantiate() 一条命令从命令行到训练启动在仓库根目录启动 4 卡训练只需一行命令PYTHONPATH. torchrun --nproc_per_node4 --master_port12341 -m scripts.train \ --configpid/_src/configs/pid_training/config.py \ -- experimentpixeldit_text_to_image_finetune_res_2048这条命令可以拆成三段torchrun ... -m scripts.train分布式启动训练入口 scripts/train.py--config.../config.py指定 Python 根配置模块入口会导入它并调用make_config()独立的--之后的全部内容都是 Hydra overrideexperiment...表示选择某个已注册实验。这里的--不能省略config_helper.py 中的 override() 会显式检查它用来区分「训练脚本参数」和「Hydra 参数」缺失时会直接抛出ValueError。 两个实用参数--dryrun只打印并保存合成后的config.yaml不训练--smoke会自动追加trainer.max_iter2等覆盖项只做冒烟测试。️ attrs 根配置defaults 冻结保护根配置在 pid/_src/configs/pid_training/config.py 中声明除了继承通用Config还额外声明了 Hydra 的defaults列表形如defaults [ _self_, {data_train: mock_image}, {optimizer: adamw}, {model: ddp_pixeldit}, {experiment: None}, # …… ]每一项表示「配置组名 → 当前选项名」optimizer: adamw即从optimizer组选择adamw这份配置值为None表示先预留该组、暂不合入内容等命令行用experimentname来选择。_self_代表当前节点自身它的位置决定了「谁先被覆盖」。attrs 带来的另一大好处是冻结保护make_freezable 装饰器 让配置实例支持freeze()且会递归冻结所有嵌套子配置。训练启动时 launch() 会先config.validate()校验 job 名、跨卡广播对齐再config.freeze()——训练过程中任何人误改配置都会立刻报AttributeError这是大型训练任务防止「隐性状态漂移」的常用手法。子配置内容示例JobConfig项目 / 分组 / 实验名、WB 模式TrainerConfigmax_iter、logging_iter、distributed_parallelism、callbacksCheckpointConfigsave_iter、load_path、是否恢复优化器状态️ Hydra ConfigStore配置组如何注册「组名负责选择哪份配置package决定配置合入最终配置的哪里」这是阅读 PiD 配置最关键的一句话。所有组件都通过ConfigStore.instance().store(group..., name..., package..., node...)注册例如 model_pixeldit.pyPIXELDIT_H1536_D14P2 L(PixDiT_T2I)( in_channels3, hidden_size1536, patch_depth14, # …… ) cs.store(groupnet, namepixeldit_h1536_d14p2, packagemodel.config.net, nodePIXELDIT_H1536_D14P2)当前入口的主要配置组与最终落点如下配置组示例选项合入最终配置的位置data_trainmock_imagedataloader_trainnetpixeldit_h1536_d14p2model.config.netconditionerpixeldit_captionmodel.config.conditionermodelddp_pixeldit_global_可同时设置model与trainercallbacksbasic、wandbtrainer.callbacksoptimizeradamwoptimizercheckpoint/ckpt_typelocal/dcpcheckpoint/checkpoint.typeexperiment各实验名_global_直接合入根配置所以「选择网络」写net...而「覆盖网络字段」要写最终路径如model.config.net.rope_modeoriginal。 一个巧妙细节optimizer 注册 里用modelPLACEHOLDER占位——优化器需要模型参数才能构建但配置阶段模型还不存在PLACEHOLDER让配置可以完整描述「将来用get_base_optimizer(model, lr, ...)构造」这件事真正传参发生在instantiate()时。 实验组合override 与self的三个关键点实验就是一份LazyDict核心在其defaults列表以 finetune.py 的 2K 实验 为例defaults[ {override /data_train: pixeldit_MultiAspect_4K_1M_1bs_2048}, {override /net: pixeldit_h1536_d14p2}, {override /callbacks: [basic, wandb]}, _self_, ], optimizerdict(lr1e-5, weight_decay0.0),三个关键点/data_train的斜杠表示从组合根查找该配置组override的语义替换根defaults中已存在的组选项而不是新增一个同名组_self_放在最后先装配模型、数据、网络等组件再由实验正文覆盖它们的字段。例如adamw默认学习率是1e-4该实验最终将其改为1e-5。实验最后通过cs.store(groupexperiment, package_global_, name...)注册——package_global_意味着实验内容直接合入根配置所以最终字段是trainer.max_iter而不是experiment.trainer.max_iter。实验继承则更进一步2K→4K 实验直接在defaults里引用父实验/experiment/pixeldit_text_to_image_finetune_res_2048只替换数据组并修改少量字段如rope_ref_h、grad_accum_iter。而_build_debug_run()用同样方式继承正式实验、把max_iter改到 25 并关闭 WB自动派生出后缀_debug的调试实验——一套实验代码即可同时获得「正式版」与「冒烟版」。合成后的优先级可简化为make_config() 基础值 根 defaults 选择的基础组 实验 defaults 中的组替换 / 父实验 实验自身_self_ 位于最后 命令行字段 override实验配置里还挂了多个every_n_sample采样回调每 N 步用当前权重生成图片并推送 WB下面就是这类回调在训练中期产出的采样图⚡ LazyCall把「创建对象」推迟到最后一刻普通配置里写L(某类)(参数)时并不会真正构造对象——LazyCall.call只是返回一个带_target_键的DictConfig把「类路径 全部参数含函数默认值」原样记录下来。直到launch()阶段执行instantiate(config.model)、instantiate(config.dataloader_train)对象才被创建。这样做有三个直接收益配置阶段零副作用导入配置不会加载几十 GB 的模型权重--dryrun才能秒级打印完整配置配置可序列化dryrun 会调用LazyConfig.save_yaml()保存config.yaml方便复现参数可自由覆盖_target_就是普通字段命令行可以像改数值一样改构造参数。训练真正跑起来后这套延迟实例化的链路产出就是这样的生成效果️ 常见问题速查症状原因与排查提示 override 必须以--开头检查--config与experiment...之间是否漏了独立的--找不到某个组或选项核对cs.store()的group/name以及注册函数/实验模块是否被make_config()导入import_all_modules_from_package覆盖路径不生效确认用的是package最终路径网络字段在model.config.net而不是net实验值被组件默认值覆盖检查实验defaults中_self_的位置希望实验正文最后生效时它应在末尾新增顶层字段失败结果会被还原为结构化 attrs 配置未声明的顶层字段会被拒绝优先覆盖已有字段或扩展Config定义 核心文件速查训练入口与参数解析scripts/train.py配置合成 / override 核心逻辑pid/_ext/imaginaire/utils/config_helper.pyattrs 根配置与冻结机制pid/_ext/imaginaire/config.pyLazyCall / LazyDict 实现pid/_ext/imaginaire/lazy_config/lazy.pyPiD 训练根配置pid/_src/configs/pid_training/config.py实验配置示例pid/_src/configs/pid_training/experiment_pixeldit_finetune/finetune.py官方中文教程docs/hydra_CN.md一句话总结PiD 配置系统让「配置 数据模型 可延迟的描述」——attrs 保证配置结构化且不可变Hydra 提供灵活的组合与覆盖LazyCall 把对象创建推迟到训练启动瞬间。掌握defaults、package、_self_、override这四个词你就读懂了 PiD 训练全流程的「总开关」。赞分享【免费下载链接】PiD[NeurIPS 2026] PiD: Fast and High-Resolution Latent Decoding with Pixel Diffusion项目地址https://gitcode.com/gh_mirrors/pid18/PiD点击查看免费下载相关推荐LFM2.5-8B-A1B-GGUF部署常见问题解答从安装到运行的完整排错指南LFM2.5 8B A1B GGUF部署常见问题解答从安装到运行的完整排错指南 LFM2.5 8B A1B GGUF是Liquid AI开发的新一代混合模型人工智能大模型基础模型本地部署模型量化边缘计算Detectron2训练流程与配置系统Detectron2训练流程与配置系统 Detectron2采用基于YAML的层次化配置系统通过CfgNode类实现灵活的配置管理。配置文件定义了完整的训练流人工智能计算机视觉深度学习机器学习openJiuwen agent-core agent_rl 配置层全解析Pydantic 驱动的离线 RL 训练配置体系openJiuwen agent core agent_rl 配置层全解析Pydantic 驱动的离线 RL 训练配置体系 导读 openjiuwen.age人工智能AI AgentAgent 框架大模型工具调用RAG提示工程强化学习创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考