SuperGradients 配置文件与 Recipes 完全指南:用 YAML 零代码编排训练全流程

SuperGradients 配置文件与 Recipes 完全指南:用 YAML 零代码编排训练全流程 SuperGradients 配置文件与 Recipes 完全指南用 YAML 零代码编排训练全流程【免费下载链接】super-gradientsEasily train or fine-tune SOTA computer vision models with one open source training library. The home of Yolo-NAS.项目地址: https://gitcode.com/GitHub_Trending/su/super-gradients本文是 SuperGradients 配置体系的入门与进阶实战指南围绕仓库中的 configuration_files.md 展开系统讲解 YAML 配置文件即 Recipes的定位、写法、组合机制与命令行使用方式。读完本文你将掌握用一条命令启动完整训练、通过 Hydra 覆盖任意参数、理解defaults组合与_self_覆盖优先级并能结合仓库内置的 40 份示例 Recipe 快速搭建自己的训练配置。配置文件与 Recipes什么是训练菜谱SuperGradients 支持使用 YAML 格式的配置文件。这些文件可以容纳训练超参数learning-rate、weight-decay、epochs 等、模型架构参数block 类型、激活函数、数据集参数以及训练过程所需的任何其他参数。配置文件被解析后会以递归字典或函数实参的形式传递给 SuperGradients 的各个模块。这些 YAML 文件就像训练模型的菜谱cookbook因此它们被称为Recipes。SuperGradients 的设计目标之一就是把尽可能多的参数暴露到配置层让使用者不用写一行代码就能完成训练调整你可以控制学习率、权重衰减甚至更换损失函数、评估指标进一步还能控制模型内部的 block 类型与激活函数——所有这些都可以在配置文件中定义。以下是仓库中真实的训练超参数配置示例节选自 cifar10_resnet_train_params.yamldefaults: - default_train_params max_epochs: 250 lr_updates: _target_: numpy.arange start: 100 stop: 250 step: 50 lr_decay_factor: 0.1 lr_mode: StepLRScheduler lr_warmup_epochs: 0 initial_lr: 0.1 loss: CrossEntropyLoss optimizer: SGD criterion_params: {} optimizer_params: weight_decay: 1e-4 momentum: 0.9注意lr_updates中的_target_: numpy.arange这是 Hydra/OmegaConf 的对象实例化语法配置不再只是静态数值而是可以直接声明调用哪个 Python 函数/类并传入参数。_convert_: all则告知 Hydra 在加载时完成从字符串到 Python 对象的转换。为什么使用配置文件刚接触时配置文件可能显得繁琐甚至冗余但一旦开始管理多个实验它的价值立刻显现统一管理资产数据集、模型和训练方案recipes集中存放。代码文件保持干净、不含参数同一份代码可以借助不同配置构造出不同对象。下面的例子中训练集与验证集共用同一段代码仅配置不同Imagenet 示例出自原文档train_dataset_params: root: /data/Imagenet/train transforms: - RandomResizedCropAndInterpolation: size: 224 interpolation: default - RandomHorizontalFlip - ToTensor - Normalize: mean: [0.485, 0.456, 0.406] # mean for normalization std: [0.229, 0.224, 0.225] # std for normalization val_dataset_params: root: /data/Imagenet/val transforms: - Resize: size: 256 - CenterCrop: size: 224 - ToTensor - Normalize: mean: [0.485, 0.456, 0.406] # mean for normalization std: [0.229, 0.224, 0.225] # std for normalizationtransforms列表中的每一项如RandomResizedCropAndInterpolation、Normalize都是已注册对象的名称SuperGradients 的工厂机制会自动实例化它们详见下文配置即对象部分。实验可追踪每个实验的精确设置都被固化在配置中方便微调、回放与分享。所有参数集中一处实验的可见性与可控性大幅提升。零代码复用同一套训练代码通过切换 Recipe 即可在 Cifar10 分类、COCO 检测、Cityscapes 分割等任务间复用。注意使用 SuperGradients可以不依赖任何配置文件仓库src/super_gradients/examples/目录下提供了纯代码方式如 cifar10_training_torch_objects_example.py的完整示例。如何从配置文件启动训练一条命令跑通 ResNet18 / Cifar10进入仓库根目录执行python -m super_gradients.train_from_recipe --config-namecifar10_resnet训练会启动几个周期后即可用CtrlC停止。这条命令背后的入口脚本是 train_from_recipe.py其核心逻辑极为精简from omegaconf import DictConfig import hydra from super_gradients import Trainer, init_trainer hydra.main(config_pathrecipes, version_base1.2) def _main(cfg: DictConfig) - None: Trainer.train_from_config(cfg) def main() - None: init_trainer() # init_trainer needs to be called before hydra.main _main()cifar10_resnet这份 Recipe 位于 cifar10_resnet.yaml文件头部注释给出了更完整的启动方式与预期精度约 250 个 epoch 后达到 ~94.9% 准确率# Instructions: # 0. Make sure that the data is stored in dataset_params.dataset_dir or add dataset_params.data_dirPATH-TO-DATASET at the end of the command below # 1. Move to the project root # 2. Run the command: # python -m super_gradients.train_from_recipe --config-namecifar10_resnet experiment_namecifar10 # # To use equivalent Albumentations transforms pipeline set dataset_params to cifar10_albumentations_dataset_params: # python -m super_gradients.train_from_recipe --config-namecifar10_resnet dataset_paramscifar10_albumentations_dataset_params defaults: - training_hyperparams: cifar10_resnet_train_params - dataset_params: cifar10_dataset_params - arch_params: resnet18_cifar_arch_params - checkpoint_params: default_checkpoint_params - _self_ - variable_setup train_dataloader: cifar10_train val_dataloader: cifar10_val architecture: resnet18_cifar experiment_name: resnet18_cifar_interpolation_check multi_gpu: Off num_gpus: 1--config-name参数决定了加载哪份 Recipe。在src/super_gradients/recipes/目录下还存放着大量预定义 Recipe从 cifar10_resnet.yaml、coco2017_yolox.yaml 到 coco2017_yolo_nas_s.yaml、cityscapes_ddrnet.yaml 等覆盖分类、检测、分割、姿态估计等多种任务每个 Recipe 的头部注释通常都写明其预期性能与对应的启动命令。Hydra配置加载与组合的引擎hydra.main做了什么Hydra 是开源的 Python 配置框架SuperGradients 借助它完成两件事把 YAML 文件加载为字典以及实例化 YAML 中引用的对象。hydra.main(config_pathrecipes, version_base1.2)装饰器会按照命令行中传入的--config-name在super_gradients.recipes目录中查找同名 YAML 文件并加载为DictConfigimport hydra from omegaconf import DictConfig hydra.main(config_pathrecipes, version_base1.2) def main(cfg: DictConfig) - None: print(cfg.experiment_name)输出目录与.hydra子目录每次运行时Hydra 会在实验目录默认由ckpt_root_dir与experiment_name决定下创建.hydra子目录把本次运行实际使用的全部配置快照保存其中实现实验可复现。两个必须掌握的 Hydra 特性命令行覆盖Command-Line Overrides不修改任何 YAML直接在命令行覆盖任意参数例如training_hyperparams.initial_lr0.03YAML 组合Composition通过defaults列表把多份 YAML 拼接成一份完整配置——这正是 Recipe 体系的核心机制下一节详细展开。Recipe 结构剖析defaults 组合与四大参数块必备的四个参数块一份标准 RecipeSuperGradients 格式由以下必需部分构成配置块作用仓库示例training_hyperparams训练策略学习率、epochs、优化器、损失、EMA 等cifar10_resnet_train_params.yamldataset_params数据集与 dataloader变换、batch size、num_workers 等cifar10_dataset_params.yamlarch_params模型架构参数与根级architecture字段配套resnet18_cifar_arch_params.yamlcheckpoint_params检查点加载权重、预训练权重、迁移学习设置default_checkpoint_params.yaml根级字段architecture指定具体模型如resnet18_cifararch_params则提供该架构的构造参数二者配套使用。train_dataloader/val_dataloader是可选的便捷字段用于结合dataset_params实例化训练/验证 DataLoader。defaults 组合与_self_的优先级以 cifar10_resnet.yaml 为例其组合链为defaults: - training_hyperparams: cifar10_resnet_train_params - dataset_params: cifar10_dataset_params - arch_params: resnet18_cifar_arch_params - checkpoint_params: default_checkpoint_params - _self_ - variable_setup要点defaults顺序即优先级顺序列表中越靠后的条目优先级越高。因此_self_当前文件自身放在默认项之后当前 Recipe 才能覆盖各默认块variable_setup必须是列表最后一项其作用见下文快捷覆盖。引用方式training_hyperparams.initial_lr即指向cifar10_resnet_train_params.yaml中的initial_lr参数这构成了跨文件的参数引用语法。目录约定为配合上述组合Recipe 目录建议按如下结构组织仓库 recipes 目录即遵循此约定├─ cifar10_resnet.yaml ├─ ... ├─training_hyperparams │ ├─ cifar10_resnet_train_params.yaml │ └─ ... ├─dataset_params │ ├─ cifar10_dataset_params.yaml │ └─ ... ├─arch_params │ ├─ resnet18_cifar_arch_params.yaml │ └─ ... └─checkpoint_params ├─ default_checkpoint_params.yaml └─ ...你不必严格遵循该结构但保持它才能与 SuperGradients 的默认解析逻辑无缝兼容。训练超参数速查default_train_paramsdefault_train_params.yaml 是所有训练配置的地基其中常用的关键参数包括学习率调度lr_mode支持StepLRScheduler、PolyLRScheduler、CosineLRScheduler、ExponentialLRScheduler、FunctionLRSchedulerlr_updates配合step_lr_update_freq、lr_decay_factor、lr_warmup_epochs、lr_cooldown_epochs、warmup_initial_lr、cosine_final_lr_ratio等优化器与损失optimizerAdam/SGD/RMSProp、optimizer_params、loss、criterion_params、zero_weight_decay_on_bias_and_bn训练控制max_epochs、batch_accumulate、run_validation_freq、seed默认 42保证可复现、resume/resume_path/ckpt_name指标与检查点train_metrics_list/valid_metrics_list、metric_to_watch默认Accuracy、greater_metric_to_watch_is_better、ckpt_best_name默认ckpt_best.pth工程化选项ema指数移动平均默认关闭、mixed_precision、sync_bn、precise_bn、torch_compile需 PyTorch 2.0、phase_callbacks、sg_logger与sg_logger_paramsTensorBoard/WandB/Deci 平台、clip_grad_norm。数据集配置示例cifar10_dataset_params.yaml 展示了完整的 dataset_params 写法——训练与验证分别定义变换、dataloader 参数train_dataset_params: root: ./data/cifar10 train: True transforms: - RandomCrop: size: 32 padding: 4 - RandomHorizontalFlip - ToTensor - Normalize: mean: [0.4914, 0.4822, 0.4465] std: [0.2023, 0.1994, 0.2010] target_transform: null download: True train_dataloader_params: shuffle: True batch_size: 256 num_workers: 8 drop_last: False pin_memory: True val_dataset_params: root: ./data/cifar10 train: False transforms: - Resize: size: 32 - ToTensor - Normalize: mean: [0.4914, 0.4822, 0.4465] std: [0.2023, 0.1994, 0.2010] target_transform: null download: True val_dataloader_params: batch_size: 512 num_workers: 8 drop_last: False pin_memory: True命令行覆盖不改文件改参数通用覆盖语法Hydra 覆盖的通用语法为python -m super_gradients.train_from_recipe --config-nameconfig-name param1val1 path.to.param2val2参数不带--前缀用.分隔配置树中的每一级路径。例如修改 epochs 与学习率、更换数据集路径python -m super_gradients.train_from_recipe --config-nameconfig-name training_hyperparams.max_epochs250 training_hyperparams.initial_lr0.03 python -m super_gradients.train_from_recipe --config-nameconfig-name dataset_params.data_dirpath-to-dataset再如 COCO 检测任务8 卡训练 YoloX-Smallpython -m super_gradients.train_from_recipe --config-namecoco2017_yolox architectureyolox_s dataset_params.data_dir/home/coco2017注意不同 Recipe 的参数命名可能有差异使用前请先查看目标 Recipe 以确认正确的参数路径。快捷覆盖variable_setup 与内置短路参数完整路径写起来冗长例如改 batch size 要同时写训练与验证两条路径。为此variable_setup.yaml 定义了一组快捷参数通过 Hydra CallbackRecipeShortcutsCallback实现位于 omegaconf_utils.py在加载时自动展开快捷参数等价完整路径lr0.02training_hyperparams.initial_lr0.02bs128dataset_params.train_dataloader_params.batch_size128 dataset_params.val_dataloader_params.batch_size128val_batch_size64dataset_params.val_dataloader_params.batch_size64epochs100training_hyperparams.max_epochs100num_workers4同时设置 train/val 的num_workers4resumeTruetraining_hyperparams.resumeTrueematruetraining_hyperparams.ematrueckpt_root_dir...检查点根目录同时决定.hydra输出位置经hydra_output_dir_resolver解析使用这些快捷参数的前提是 Recipe 的defaults中包含了variable_setup且它必须位于列表最后。例如python -m super_gradients.train_from_recipe --config-namecifar10_resnet lr0.03 epochs50 bs128 num_workers4配置即对象工厂与实例化机制配置文件中出现的类名如CrossEntropyLoss、RandomCrop、SGD都依赖 SuperGradients 的工厂Factories与注册机制才能从字符串变成真实对象。以变换为例Recipes_Factories.md 说明对象如SegColorJitter先被register_transform注册到名称映射表配置加载后由TransformsFactory依据映射实例化from super_gradients.common.registry import register_transform register_transform(nameMyTransformName) class MyTransform: def __init__(self, prob: float): ...注册后即可在 Recipe 中直接使用MyTransformName并配合resolve_param装饰器让函数同时接受对象实例或配置字典两种输入。SuperGradients 提供的注册装饰器非常丰富涵盖模型、损失、指标、优化器、数据集、dataloader、回调、变换、采样器、LR 调度器等详见 factories 模块。这一机制让配置文件定义对象成为可能是 Recipes 体系区别于普通参数文件的根本所在。自定义 Recipe两种路径如果你需要自己的训练配置可以走两条路详见 Recipes_Custom.mdSuperGradients 格式推荐快速上手从 recipes 中挑选最接近你任务的 Recipe复制到项目内专属 recipes 目录并改写参数然后把 train_from_recipe.py 复制到项目将config_pathrecipes改为你的配置目录路径即可直接复用Trainer.train_from_config(cfg)一键启动。完全自定义格式不受 SuperGradients 结构约束但需自己在脚本中实例化所有对象。此时仍需保证training_hyperparams包含与默认格式一致的必填字段且传给dataloaders.get的配置与目标数据集/加载器兼容。仓库 train_from_recipe_with_user_objects 示例 展示了这种手动装配 Trainer、模型与 DataLoader 的写法。另外借助 Hydra 的searchpath你可以让自己的 Recipe 构建在 SuperGradients 预定义 Recipe 之上defaults: - training_hyperparams: default_train_params hydra: searchpath: - pkg://super_gradients.recipes ... # Continue with your recipe小结与延伸阅读回顾本文要点Recipes 概述YAML 格式的配置文件集中定义数据集、模型与训练超参数充当训练菜谱SuperGradients 的用法hydra.mainTrainer.train_from_config将配置直接转为训练defaults组合与工厂注册机制带来高度的可复用性、可复现性与灵活性实战上手python -m super_gradients.train_from_recipe --config-namecifar10_resnet一行启动训练配合 Hydra 覆盖与快捷参数即时调整实验。如果想继续深入建议按顺序阅读同系列文档Recipes_Training.md更完整的训练启动方式与 Recipe 结构讲解Recipes_Factories.md工厂与对象实例化的底层原理Recipes_Custom.md编写自定义 Recipe 的完整实战Data.md数据集的注册与自定义数据集接入。【免费下载链接】super-gradientsEasily train or fine-tune SOTA computer vision models with one open source training library. The home of Yolo-NAS.项目地址: https://gitcode.com/GitHub_Trending/su/super-gradients创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考